Zum Hauptinhalt springen
Dieses Projekt befindet sich in der Beta-Phase. Einen Fehler gefunden? GitHub Issue erstellen. Frage oder Idee? In Discussions fragen — wir freuen uns über dein Feedback!
Wie ist die Übersetzungsqualität auf dieser Seite?

Ein Compute-Profil wählen

Verwaltete Workflows laufen auf Compute-Profilen. Ein Compute-Profil ist eine feste Kombination aus vCPUs, Speicher und GPUs, ähnlich den Ressourcen, die du bei einem HPC-Scheduler anforderst. Wenn du einen Workflow hochlädst, ordnest du seine Größen, wie S und M, Profilen zu, und jeder Lauf wählt eine dieser Größen. Der Job läuft dann auf einem eigenen Knoten mit diesem Profil und behält das Profil, bis der Job endet.

ProfilvCPUsSpeicher (GB)GPUs
8x32832Keine
16x12816128Keine
48x76848768Keine
128x15001281500Keine
24x120x1l40s241201 L40S
20x320x2a100203202 A100
80x1200x8a1008012008 A100
160x1792x8h10016017928 H100

Eine Profil-ID hat die Form {cpu}x{memory}, mit Speicher in GB, oder {cpu}x{memory}x{count}{gpu} für ein Profil mit GPUs. Zum Beispiel hat 24x120x1l40s 24 vCPUs, 120 GB Speicher und eine NVIDIA-L40S-GPU.

Verfügbare Profile prüfen​

Um zu sehen, welche Profile verfügbar sind, rufe compute_profiles() auf:

run_workflow_remotely.ipynb

from qiskit_ibm_catalog import ManagedWorkflowClient

client = ManagedWorkflowClient()
print(client.compute_profiles())
8x32 (8 vCPU / 32 GB)
16x128 (16 vCPU / 128 GB)
48x768 (48 vCPU / 768 GB)
128x1500 (128 vCPU / 1500 GB)
24x120x1l40s (24 vCPU / 120 GB / 1l40s)
20x320x2a100 (20 vCPU / 320 GB / 2a100)
80x1200x8a100 (80 vCPU / 1200 GB / 8a100)
160x1792x8h100 (160 vCPU / 1792 GB / 8h100)

Ein Profil anhand seiner Ressourcen nachschlagen​

Statt eine Profil-ID einzutippen, kannst du die Ressourcen, die dein Workflow braucht, mit compute_profile() beschreiben und das Ergebnis als Wert in sizes_map verwenden. Übergib cpu und memory in GB und übergib gpu für ein GPU-Profil:

run_workflow_remotely.ipynb

profile = client.compute_profile(cpu=24, memory=120, gpu="1l40s")
print(profile) # 24x120x1l40s

sizes_map = {"S": "8x32", "L": profile}

Eine sizes_map akzeptiert Profil-IDs und die Profile, die compute_profile() zurückgibt, und du kannst beides in einer Map mischen. Um eine Profil-ID vor dem Hochladen zu prüfen, übergib sie an compute_profile(), zum Beispiel client.compute_profile("16x128"). Wenn kein Profil passt, listet der Fehler die verfügbaren Profile auf.

compute_profiles() gibt eine Liste zurück, sodass du sie auch selbst filtern kannst. Der folgende Code findet zum Beispiel die GPU-Profile:

run_workflow_remotely.ipynb

gpu_profiles = [p for p in client.compute_profiles() if p.gpu]

Ein Standard-Compute-Profil für deinen Workflow festlegen​

Die meisten Workflows beginnen mit einer Größe. Ordne sie beim Hochladen des Workflows mit sizes_map einem Profil zu und mache sie mit default_size zum Standard:

run_workflow_remotely.ipynb

from qiskit_ibm_catalog import ManagedWorkflow, ManagedWorkflowClient

client = ManagedWorkflowClient()

my_workflow = client.upload(
ManagedWorkflow(
title="my-workflow",
entrypoint="my_workflow.py",
working_dir="./source_files/",
sizes_map={"M": "16x128"},
default_size="M",
)
)

Jeder Lauf des Workflows verwendet dieses Profil, sodass du beim Ausführen keine Größe übergeben musst:

run_workflow_remotely.ipynb

job = my_workflow.run(circuits=circuits) # Runs on 16x128

Best Practice: Passe die Größen an die Problemgrößen an​

Ein Workflow löst bestimmte Probleme und braucht möglicherweise andere Compute-Profile, wenn die Probleme an Umfang und Komplexität zunehmen. Mit einer sizes_map für jeden Workflow kannst du Folgendes tun:

  • Große Probleme mit genügend Rechenressourcen ausstatten, damit sie vollständig durchlaufen.

  • Verhindern, dass kleine Probleme einen größeren Knoten nutzen, als sie brauchen.

Du kannst die Größen an den Faktoren ausrichten, die den Speicher- und CPU-Bedarf deines Workflows bestimmen, etwa die Größe des Unterraums, die Anzahl der Batches oder die Anzahl der Qubits.

Die Größen definieren​

Du kannst bis zu vier Größen zuordnen, für kleine (S), mittlere (M), große (L) und sehr große (XL) Probleme. Der folgende Code definiert zum Beispiel einen Workflow mit drei Größen:

run_workflow_remotely.ipynb

sizes_map = {"S": "8x32", "M": "16x128", "L": "128x1500"}

my_workflow = client.upload(
ManagedWorkflow(
title="my-workflow",
entrypoint="my_workflow.py",
working_dir="./source_files/",
sizes_map=sizes_map,
default_size="M",
)
)

Größenregeln​

Größenbezeichnungen müssen S, M, L oder XL sein, sodass ein Workflow bis zu vier Größen definieren kann. Ein verwalteter Workflow erkennt Bezeichnungen in Groß- oder Kleinschreibung und speichert sie in Großbuchstaben. Zwei Größen können demselben Profil zugeordnet werden.

Ein Workflow lehnt den ersten Upload in den folgenden Fällen ab:

  • Eine Bezeichnung ist nicht S, M, L oder XL.

  • Du setzt sizes_map ohne default_size oder default_size ohne sizes_map.

  • default_size ist keine der Bezeichnungen in sizes_map.

  • Ein Wert in sizes_map ist kein verfügbares Compute-Profil.

Größen beim erneuten Hochladen ändern​

Wenn du den Workflow mit demselben title erneut hochlädst, behandelt der verwaltete Workflow die Größen wie folgt:

  • Wenn du sizes_map setzt, ersetzen die neuen Größen alle gespeicherten Größen.

  • Wenn du sizes_map weglässt, behält der Workflow die gespeicherten Größen und den Standard.

  • Um nur den Standard zu ändern, setze default_size ohne sizes_map. Der Wert von default_size muss eine der gespeicherten Größen sein.

Setze default_size jedes Mal, wenn du sizes_map setzt. Ein erneutes Hochladen erfordert default_size nicht. Wenn die neuen Größen den alten Standard nicht enthalten, hat der Workflow keinen Standard, und jeder Lauf ohne function_size schlägt fehl.

Eine Größe für jeden Lauf wählen​

Übergib function_size an run(), um für diesen Job eine der Größen des Workflows zu wählen. Wenn du es weglässt, verwendet der Job die Standardgröße des Workflows:

run_workflow_remotely.ipynb

print(my_workflow.sizes()) # {'S': '8x32', 'M': '16x128', 'L': '128x1500'}
print(my_workflow.get_default_size()) # 'M'

job = my_workflow.run(function_size="L", circuits=circuits) # Runs on 128x1500
job = my_workflow.run(circuits=circuits) # Runs on the default size, M

sizes() und get_default_size() geben die Größen zurück, die beim Laden des Workflows gespeichert waren. Um Größen zu sehen, die sich nach dem Laden des Workflows geändert haben, lade ihn erneut.

Um die Größe und das Compute-Profil des Jobs zu lesen, rufe get_function_size() und get_compute_profile() in deinem Workflow-Code auf:

source_files/my_workflow.py

from qiskit_serverless import get_compute_profile, get_function_size

print(get_function_size()) # 'L'
print(get_compute_profile()) # '128x1500'

Größen beheben​

ProblemUrsache
Der Upload schlägt mit Invalid size '...'. Valid sizes are: S, M, L, XL. fehl.Eine Bezeichnung in sizes_map ist keine der vier unterstützten Bezeichnungen.
Der Upload schlägt mit Unknown compute profile '...' for size '...'. fehl.Ein Wert in sizes_map ist kein verfügbares Profil. Prüfe die ID mit compute_profiles() oder schlage sie mit compute_profile() nach.
compute_profile() schlägt mit No compute profile matches ... fehl.Kein Profil hat genau diese Ressourcen. Übergib bei einem GPU-Profil auch gpu. Wähle ein Profil aus der Liste im Fehler.
Der Upload schlägt mit 'default_size' is required when 'sizes' is provided. fehl.Der erste Upload setzt sizes_map ohne default_size.
run() schlägt mit Unknown function size '...' for this function. Available sizes: ... fehl.Der Workflow definiert die Größe nicht, die du an function_size übergeben hast.
run() schlägt mit This function has no size. fehl.Ein erneutes Hochladen hat die Größen ersetzt und den Standard entfernt. Lade erneut mit default_size hoch oder übergib function_size.