Alege un profil de calcul
Workflow-urile gestionate rulează pe profiluri de calcul. Un profil de calcul este o combinație fixă de vCPU-uri, memorie și GPU-uri, similară cu resursele pe care le soliciți de la un planificator HPC. Când încarci un workflow, asociezi dimensiunile sale, cum ar fi S și M, cu profiluri, iar fiecare rulare alege una dintre aceste dimensiuni. Jobul rulează apoi pe propriul nod cu acel profil și păstrează profilul până când se termină.
| Profil | vCPU-uri | Memorie (GB) | GPU-uri |
|---|---|---|---|
8x32 | 8 | 32 | Niciunul |
16x128 | 16 | 128 | Niciunul |
48x768 | 48 | 768 | Niciunul |
128x1500 | 128 | 1500 | Niciunul |
24x120x1l40s | 24 | 120 | 1 L40S |
20x320x2a100 | 20 | 320 | 2 A100 |
80x1200x8a100 | 80 | 1200 | 8 A100 |
160x1792x8h100 | 160 | 1792 | 8 H100 |
Un ID de profil are forma {cpu}x{memory}, cu memoria în GB, sau {cpu}x{memory}x{count}{gpu} pentru un profil cu GPU-uri. De exemplu, 24x120x1l40s are 24 de vCPU-uri, 120 GB de memorie și un GPU NVIDIA L40S.
Verifică profilurile disponibile
Pentru a vedea ce profiluri sunt disponibile, apelează compute_profiles():
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)
Caută un profil după resursele sale
În loc să tastezi un ID de profil, poți descrie resursele de care are nevoie workflow-ul tău cu compute_profile() și poți folosi rezultatul ca valoare în sizes_map. Transmite cpu și memory în GB și transmite gpu pentru un profil cu GPU:
run_workflow_remotely.ipynb
profile = client.compute_profile(cpu=24, memory=120, gpu="1l40s")
print(profile) # 24x120x1l40s
sizes_map = {"S": "8x32", "L": profile}
Un sizes_map acceptă ID-uri de profil și profilurile returnate de compute_profile(), iar le poți combina pe ambele într-o singură hartă. Pentru a verifica un ID de profil înainte de încărcare, transmite-l către compute_profile(), de exemplu client.compute_profile("16x128"). Dacă niciun profil nu se potrivește, eroarea listează profilurile disponibile.
compute_profiles() returnează o listă, deci o poți filtra și singur. De exemplu, următorul cod găsește profilurile cu GPU:
run_workflow_remotely.ipynb
gpu_profiles = [p for p in client.compute_profiles() if p.gpu]
Setează un profil de calcul implicit pentru workflow-ul tău
Majoritatea workflow-urilor pornesc cu o singură dimensiune. Asociaz-o cu un profil prin sizes_map și fă-o implicită cu default_size, când încarci workflow-ul:
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",
)
)
Fiecare rulare a workflow-ului folosește acest profil, deci nu trebuie să transmiți o dimensiune când îl rulezi:
run_workflow_remotely.ipynb
job = my_workflow.run(circuits=circuits) # Runs on 16x128
Bună practică: potrivește dimensiunile cu mărimea problemelor
Un workflow rezolvă probleme specifice și poate necesita profiluri de calcul diferite pe măsură ce problemele cresc ca scară și complexitate. Cu un sizes_map pentru fiecare workflow, poți face următoarele:
-
Oferă problemelor mari suficiente resurse de calcul pentru a rula până la capăt.
-
Împiedică problemele mici să folosească un nod mai mare decât au nevoie.
Poți baza dimensiunile pe factorii care determină utilizarea memoriei și a CPU de către workflow-ul tău, cum ar fi dimensiunea subspațiului, numărul de batch-uri sau numărul de qubiți.
Definește dimensiunile
Poți asocia până la patru dimensiuni, pentru probleme mici (S), medii (M), mari (L) și foarte mari (XL). De exemplu, următorul cod definește un workflow cu trei dimensiuni:
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",
)
)
Reguli pentru dimensiuni
Etichetele de dimensiune trebuie să fie S, M, L sau XL, deci un workflow poate defini până la patru dimensiuni. Un workflow gestionat potrivește etichetele indiferent dacă sunt cu majuscule sau minuscule și le stochează cu majuscule. Două dimensiuni pot fi asociate cu același profil.
Un workflow respinge prima încărcare în următoarele cazuri:
-
O etichetă nu este
S,M,LsauXL. -
Setezi
sizes_mapfărădefault_sizesaudefault_sizefărăsizes_map. -
default_sizenu este una dintre etichetele dinsizes_map. -
O valoare din
sizes_mapnu este un profil de calcul disponibil.
Schimbă dimensiunile la reîncărcare
Când încarci din nou workflow-ul cu același title, workflow-ul gestionat tratează dimensiunile astfel:
-
Dacă setezi
sizes_map, dimensiunile noi le înlocuiesc pe toate cele stocate. -
Dacă omiți
sizes_map, workflow-ul păstrează dimensiunile stocate și pe cea implicită. -
Pentru a schimba doar dimensiunea implicită, setează
default_sizefărăsizes_map. Valoarea luidefault_sizetrebuie să fie una dintre dimensiunile stocate.
Setează default_size de fiecare dată când setezi sizes_map. O reîncărcare nu necesită default_size. Dacă dimensiunile noi nu includ vechea dimensiune implicită, workflow-ul nu are nicio dimensiune implicită, iar fiecare rulare fără function_size eșuează.
Alege o dimensiune pentru fiecare rulare
Transmite function_size către run() pentru a alege una dintre dimensiunile workflow-ului pentru acel job. Dacă îl omiți, jobul folosește dimensiunea implicită a workflow-ului:
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() și get_default_size() returnează dimensiunile care au fost stocate când ai încărcat workflow-ul. Pentru a vedea dimensiunile modificate după ce ai încărcat workflow-ul, încarcă-l din nou.
Pentru a citi dimensiunea și profilul de calcul ale jobului, apelează get_function_size() și get_compute_profile() în codul workflow-ului tău:
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'
Depanează dimensiunile
| Problemă | Cauză |
|---|---|
Încărcarea eșuează cu Invalid size '...'. Valid sizes are: S, M, L, XL. | O etichetă din sizes_map nu este una dintre cele patru etichete acceptate. |
Încărcarea eșuează cu Unknown compute profile '...' for size '...'. | O valoare din sizes_map nu este un profil disponibil. Verifică ID-ul cu compute_profiles() sau folosește compute_profile() pentru a-l căuta. |
compute_profile() eșuează cu No compute profile matches ... | Niciun profil nu are exact acele resurse. Pentru un profil cu GPU, transmite și gpu. Alege un profil din lista din eroare. |
Încărcarea eșuează cu 'default_size' is required when 'sizes' is provided. | Prima încărcare setează sizes_map fără default_size. |
run() eșuează cu Unknown function size '...' for this function. Available sizes: ... | Workflow-ul nu definește dimensiunea pe care ai transmis-o în function_size. |
run() eșuează cu This function has no size. | O reîncărcare a înlocuit dimensiunile și a eliminat dimensiunea implicită. Încarcă din nou cu default_size sau transmite function_size. |