Sari la conținutul principal
Acest proiect este în versiune beta. Ai găsit o eroare? Deschide un issue pe GitHub. Ai o întrebare sau o idee? Întreabă în Discussions — ne-ar plăcea să aflăm părerea ta!
Cum este calitatea traducerii pe această pagină?

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ă.

ProfilvCPU-uriMemorie (GB)GPU-uri
8x32832Niciunul
16x12816128Niciunul
48x76848768Niciunul
128x15001281500Niciunul
24x120x1l40s241201 L40S
20x320x2a100203202 A100
80x1200x8a1008012008 A100
160x1792x8h10016017928 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, L sau XL.

  • Setezi sizes_map fără default_size sau default_size fără sizes_map.

  • default_size nu este una dintre etichetele din sizes_map.

  • O valoare din sizes_map nu 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_size fără sizes_map. Valoarea lui default_size trebuie 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.