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.
| Profil | vCPUs | Speicher (GB) | GPUs |
|---|---|---|---|
8x32 | 8 | 32 | Keine |
16x128 | 16 | 128 | Keine |
48x768 | 48 | 768 | Keine |
128x1500 | 128 | 1500 | Keine |
24x120x1l40s | 24 | 120 | 1 L40S |
20x320x2a100 | 20 | 320 | 2 A100 |
80x1200x8a100 | 80 | 1200 | 8 A100 |
160x1792x8h100 | 160 | 1792 | 8 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,LoderXL. -
Du setzt
sizes_mapohnedefault_sizeoderdefault_sizeohnesizes_map. -
default_sizeist keine der Bezeichnungen insizes_map. -
Ein Wert in
sizes_mapist 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_mapsetzt, ersetzen die neuen Größen alle gespeicherten Größen. -
Wenn du
sizes_mapweglässt, behält der Workflow die gespeicherten Größen und den Standard. -
Um nur den Standard zu ändern, setze
default_sizeohnesizes_map. Der Wert vondefault_sizemuss 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
| Problem | Ursache |
|---|---|
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. |