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

Introducere în workflow-urile gestionate

Disponibilitatea planului

Qiskit Functions și workflow-urile gestionate sunt funcții beta disponibile doar utilizatorilor planurilor Premium, Flex și On-Prem (prin API-ul IBM Quantum® Platform).

Workflow-urile gestionate rulează codul tău Python personalizat pe resurse de calcul clasic pe care IBM Quantum Platform le gestionează pentru tine. Folosește workflow-urile gestionate pentru a rula workflow-uri hibride cuantic-clasice, diagonalizări la scară mare și sarcini paralele de lungă durată, fără a gestiona infrastructura de calcul sau stocarea.

Când să folosești un workflow gestionat​

Folosește un workflow gestionat când nicio Catalog Function predefinită nu acoperă sarcina ta sau când vrei să împachetezi propria metodă ca o funcție reutilizabilă. Workflow-urile gestionate sunt potrivite când vrei să faci următoarele:

  • Rulează job-uri lungi în cloud. Un workflow gestionat continuă să ruleze după ce închizi laptopul și te poți reconecta la job mai târziu.

  • Folosește noduri cu memorie mare și GPU. Alege resursele de memorie, CPU și GPU de care are nevoie sarcina de lucru.

  • Rulează sarcini în paralel. Pornește simultan multe job-uri pe un singur nod.

Tu furnizezi codul workflow-ului, dependențele lui și dimensiunile de calcul pe care le suportă. Workflow-urile gestionate rulează workflow-ul pe resurse de calcul gestionate de IBM®, într-un mediu predefinit cu pachetele tale instalate, și oferă stocare în cloud pentru fișierele pe care workflow-ul le citește și le scrie.

Cum funcționează workflow-urile gestionate​

Încarci un workflow o singură dată și rulezi câte job-uri ai nevoie. Fiecare job funcționează astfel:

  • Job-ul pornește într-un mediu nou, cu un disc local gol. Workflow-urile gestionate opresc mediul după ce job-ul se încheie.

  • Job-ul rulează pe una dintre dimensiunile de calcul pe care le definești când încarci workflow-ul. Poți alege o dimensiune diferită pentru fiecare rulare.

  • Job-ul poate citi și scrie în stocarea de fișiere a workflow-ului. Fișierele din stocarea de fișiere rămân după ce job-ul se încheie.

Deoarece fiecare job pornește cu un disc local gol, un job ulterior poate găsi doar fișierele pe care un job anterior le-a salvat în stocarea de fișiere.

Ciclul de viață al unei rulări​

Fiecare job rulează asincron timp de până la 24 de ore. Poți avea până la 50 de job-uri active simultan, dacă instanța ta are suficientă alocare.

From your Python session, you call upload() one time to upload the workflow's code, packages, and compute profiles. No job exists yet. Each call to run(args) creates a job that moves through these stages: Queue, where it waits for allocation with status QUEUED; Start, where the managed workflow creates the environment with status INITIALIZING; Running, where your code can optionally set stages with update_status(): Mapping (RUNNING: MAPPING), Optimizing (RUNNING: OPTIMIZING_FOR_HARDWARE), Waiting for QPU (RUNNING: WAITING_FOR_QPU), Executing QPU (RUNNING: EXECUTING_QPU), and Post-processing (RUNNING: POST_PROCESSING); and Result, where the environment shuts down with status DONE, ERROR, or CANCELED. While running, the job reads and writes workflow file storage, which exists outside the job, is shared by all runs, and persists before and after each job. From your session, you can read status() from Queue onward, logs() from Running onward, and result() after the job reaches Result. All three remain available after the job ends.

Tabelul următor descrie fiecare etapă din diagramă și starea job-ului pe care o vezi în timpul acelei etape:

EtapăCe se întâmplăStarea job-ului
ÎncărcareÎncarci codul workflow-ului, dependențele și dimensiunile. Workflow-ul respinge o încărcare invalidă înainte de a rula orice job.Niciuna (încă nu există job)
CoadăApelezi run(). Workflow-ul verifică dacă instanța ta are suficientă alocare și programează job-ul când resursele de calcul sunt disponibile.QUEUED
PornireWorkflow-ul creează un mediu cu profilul de calcul pe care l-ai selectat.INITIALIZING
RulareRulează entrypoint-ul workflow-ului tău. Entrypoint-ul își poate raporta progresul cu update_status(), iar jurnalele le poți citi cu logs() cât timp rulează.RUNNING sau o etapă pe care o setezi, cum ar fi RUNNING: WAITING_FOR_QPU
RezultatJob-ul se încheie, iar workflow-ul își oprește mediul, păstrând rezultatul și jurnalele.DONE, ERROR sau CANCELED

La ce poate accesa un job în execuție​

Fiecare job rulează într-un mediu izolat. Diagrama și tabelul următoare arată resursele pe care le poate folosi un job în execuție.

You call run() with arguments from your Python session and receive status, logs, and the result. Inside the managed workflow, each run executes in an isolated job environment with access to its compute (CPU, RAM, and optionally GPU), your code and packages, and its arguments. The job produces outputs with save_result(), logs, and update_status(), and submits QPU jobs that run on your instance. File storage and your instance, which provides access and cost management, are shared across all managed workflow jobs and persist after the job ends. The job has no internet access.

ResursăCe poate folosi job-ul
CalculCPU-ul, memoria și GPU-urile profilului de calcul pe care l-ai selectat pentru job.
Cod și pacheteFișierele pe care le-ai încărcat împreună cu workflow-ul și pachetele suportate care sunt instalate în mediu.
ArgumenteArgumentele pe care le-ai transmis lui run(). Citește-le cu get_arguments().
Acces QPUCredențialele și instanța pe care le-ai folosit pentru a apela run(). Job-urile QPU pe care workflow-ul le trimite rulează pe instanța ta și se contorizează în consumul tău.
IeșiriUn rezultat pe care job-ul îl salvează cu save_result(), jurnalele pe care job-ul le afișează și actualizările de stare pe care job-ul le setează cu update_status().
Stocare de fișiereFișiere pe care toate rulările tale ale workflow-ului le partajează. Fișierele rămân în stocare după ce job-ul se încheie.
InternetFără acces. Un job nu poate face conexiuni de ieșire. Declară pachetele când încarci workflow-ul și furnizează datele ca argumente sau fișiere.

Securitate și izolare​

Workflow-urile gestionate izolează fiecare job de celelalte job-uri și limitează privilegiile codului care rulează în el. Limitele de acces din tabelul anterior fac parte din această izolare. Workflow-urile gestionate aplică, de asemenea, următoarele protecții:

  • Izolarea job-urilor. Niciun alt job nu rulează în mediul job-ului tău. Aceasta include job-urile altor utilizatori și propriile tale job-uri care rulează simultan.

  • Rezultate, jurnale și stocare. Doar utilizatorul care a rulat un job îi poate citi rezultatele și jurnalele.

  • Credențiale. Workflow-urile gestionate criptează credențialele pe care le folosește un job, inclusiv tokenul tău API, atunci când le stochează. Codul workflow-ului tău poate citi aceste credențiale cât timp job-ul rulează.

  • Privilegii. Workflow-urile gestionate elimină privilegiile de nivel administrator din mediu înainte ca entrypoint-ul tău să pornească.

Comparație cu HPC local​

Workflow-urile gestionate diferă de un cluster HPC local prin modul în care obții timp de calcul, configurezi software-ul și trimiți job-uri. Tabelul următor compară sarcinile obișnuite.

SarcinăCluster HPC localWorkflow-uri gestionate
Obținerea timpului de calculSoliciți o alocare sau o rezervare de la administratorul clusterului.Folosești alocarea instanței tale IBM Quantum. Workflow-ul pune fiecare job în coadă când apelezi run().
Accesarea sistemuluiTe conectezi la un nod de autentificare prin SSH.Folosești clientul Python de pe computerul tău local. Workflow-urile gestionate nu oferă un nod de autentificare.
Instalarea software-uluiCompilezi software, încarci module sau ceri unui administrator să instaleze pachete.Folosești pachetele suportate care sunt instalate în fiecare mediu sau încarci wheel-uri pentru alte pachete.
Trimiterea unui jobScrii un script batch și îl trimiți planificatorului.Apelezi run() cu argumentele job-ului.
Solicitarea resurselorSoliciți noduri, CPU-uri, memorie și GPU-uri.Selectezi una dintre dimensiunile de calcul definite pentru workflow. Fiecare job rulează pe un singur nod.
Rularea unui parameter sweepTrimiți un job array.Apelezi run() o singură dată pentru fiecare set de argumente.
Stocarea fișierelor partajateScrii într-un sistem de fișiere scratch partajat.Scrii în stocarea de fișiere a workflow-ului.
Limitarea timpului de rulareSetezi o limită de timp real.Workflow-ul anulează un job după 24 de ore.
Puncte de control pentru job-urile lungiScrii puncte de control în stocarea scratch.Salvezi rezultatele intermediare în stocarea de fișiere.
Reluarea unui job eșuatRetrimiți job-ul.Apelezi din nou run(). Workflow-ul nu reîncearcă automat job-urile eșuate.
Monitorizarea job-urilorVerifici coada și fișierele de jurnal din nodul de autentificare.Verifici starea, jurnalele și rezultatul fiecărui job din sesiunea ta Python locală.

Pașii următori​

Recomandări