Vai al contenuto principale
Questo progetto è in fase beta. Hai trovato un bug? Apri una issue su GitHub. Hai una domanda o un'idea? Chiedi su GitHub Discussions — apprezziamo il tuo feedback!
Com'è la qualità della traduzione su questa pagina?

Introduzione ai workflow gestiti

Disponibilità del piano

Qiskit Functions e i workflow gestiti sono funzionalità beta disponibili solo per gli utenti dei piani Premium, Flex e On-Prem (tramite l'API di IBM Quantum® Platform).

I workflow gestiti eseguono il tuo codice Python personalizzato su calcolo classico che IBM Quantum Platform gestisce per te. Usa i workflow gestiti per eseguire workflow ibridi quantistico-classici, diagonalizzazione su larga scala e attività parallele di lunga durata senza gestire infrastruttura di calcolo o storage.

Quando usare un workflow gestito​

Usa un workflow gestito quando nessuna Catalog Function predefinita copre la tua attività, o quando vuoi pacchettizzare il tuo metodo come funzione riutilizzabile. I workflow gestiti sono adatti quando vuoi fare quanto segue:

  • Eseguire job lunghi nel cloud. Un workflow gestito continua a essere eseguito quando chiudi il laptop e puoi riconnetterti al job più tardi.

  • Usare nodi con molta memoria e GPU. Scegli le risorse di memoria, CPU e GPU di cui il carico di lavoro ha bisogno.

  • Eseguire attività in parallelo. Avvia molti job a nodo singolo contemporaneamente.

Tu fornisci il codice del workflow, le sue dipendenze e le dimensioni di calcolo che supporta. I workflow gestiti eseguono il workflow su risorse di calcolo gestite da IBM® in un ambiente predefinito con i tuoi pacchetti installati e forniscono storage cloud per i file che il workflow legge e scrive.

Come funzionano i workflow gestiti​

Carichi un workflow una sola volta ed esegui tutti i job che ti servono. Ogni job funziona nei modi seguenti:

  • Il job parte in un nuovo ambiente con un disco locale vuoto. I workflow gestiti arrestano l'ambiente al termine del job.

  • Il job viene eseguito su una delle dimensioni di calcolo che definisci quando carichi il workflow. Puoi scegliere una dimensione diversa per ogni esecuzione.

  • Il job può leggere e scrivere nello storage di file del workflow. I file nello storage di file rimangono dopo la fine del job.

Poiché ogni job parte con un disco locale vuoto, un job successivo può trovare solo i file che un job precedente ha salvato nello storage di file.

Ciclo di vita di un'esecuzione​

Ogni job viene eseguito in modo asincrono per un massimo di 24 ore. Puoi avere fino a 50 job attivi contemporaneamente se la tua istanza ha un'allocazione sufficiente.

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.

La tabella seguente descrive ogni fase del diagramma e lo stato del job che vedi durante quella fase:

FaseCosa succedeStato del job
CaricamentoCarichi il codice del workflow, le dipendenze e le dimensioni. Il workflow rifiuta un caricamento non valido prima che venga eseguito qualsiasi job.Nessuno (ancora nessun job)
CodaChiami run(). Il workflow verifica se la tua istanza ha un'allocazione sufficiente e pianifica il job quando le risorse di calcolo sono disponibili.QUEUED
AvvioIl workflow crea un ambiente con il profilo di calcolo che hai selezionato.INITIALIZING
EsecuzioneViene eseguito l'entrypoint del tuo workflow. L'entrypoint può riportare i propri progressi con update_status() e puoi leggerne i log con logs() mentre è in esecuzione.RUNNING, o una fase che hai impostato, come RUNNING: WAITING_FOR_QPU
RisultatoIl job termina e il workflow arresta il proprio ambiente, conservando risultato e log.DONE, ERROR o CANCELED

A cosa può accedere un job in esecuzione​

Ogni job viene eseguito in un ambiente isolato. Il diagramma e la tabella seguenti mostrano le risorse che un job in esecuzione può usare.

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.

RisorsaCosa può usare il job
CalcoloLa CPU, la memoria e le GPU del profilo di calcolo che hai selezionato per il job.
Codice e pacchettiI file che hai caricato con il workflow e i pacchetti supportati installati nell'ambiente.
ArgomentiGli argomenti che hai passato a run(). Leggili con get_arguments().
Accesso alla QPULe credenziali e l'istanza che hai usato per chiamare run(). I job QPU che il workflow invia vengono eseguiti sulla tua istanza e vengono conteggiati nel tuo utilizzo.
OutputUn risultato che il job salva con save_result(), i log che il job stampa e gli aggiornamenti di stato che il job imposta con update_status().
Storage di fileFile condivisi da tutte le tue esecuzioni del workflow. I file rimangono nello storage dopo la fine del job.
InternetNessun accesso. Un job non può effettuare connessioni in uscita. Dichiara i pacchetti quando carichi il workflow e fornisci i dati come argomenti o file.

Sicurezza e isolamento​

I workflow gestiti isolano ogni job dagli altri job e limitano i privilegi del codice che vi viene eseguito. I confini di accesso nella tabella precedente fanno parte di questo isolamento. I workflow gestiti applicano inoltre le protezioni seguenti:

  • Isolamento dei job. Nessun altro job viene eseguito nell'ambiente del tuo job. Questo include i job di altri utenti e i tuoi job eseguiti contemporaneamente.

  • Risultati, log e storage. Solo l'utente che ha eseguito un job può leggerne risultati e log.

  • Credenziali. I workflow gestiti cifrano le credenziali che un job usa, incluso il tuo token API, quando le memorizzano. Il codice del tuo workflow può leggere queste credenziali mentre il job è in esecuzione.

  • Privilegi. I workflow gestiti rimuovono i privilegi di livello amministratore dall'ambiente prima che il tuo entrypoint si avvii.

Confronto con l'HPC on-premises​

I workflow gestiti differiscono da un cluster HPC on-premises per il modo in cui ottieni tempo di calcolo, configuri il software e invii i job. La tabella seguente confronta le attività comuni.

AttivitàCluster HPC on-premisesWorkflow gestiti
Ottenere tempo di calcoloRichiedi un'allocazione o una prenotazione all'amministratore del cluster.Usa l'allocazione della tua istanza IBM Quantum. Il workflow mette in coda ogni job quando chiami run().
Accedere al sistemaConnettiti a un nodo di login con SSH.Usa il client Python sul tuo computer locale. I workflow gestiti non forniscono un nodo di login.
Installare il softwareCompila il software, carica moduli o chiedi a un amministratore di installare i pacchetti.Usa i pacchetti supportati installati in ogni ambiente, oppure carica wheel per altri pacchetti.
Inviare un jobScrivi uno script batch e invialo allo scheduler.Chiama run() con gli argomenti del job.
Richiedere risorseRichiedi nodi, CPU, memoria e GPU.Seleziona una delle dimensioni di calcolo definite per il workflow. Ogni job viene eseguito su un singolo nodo.
Eseguire una scansione dei parametriInvia un job array.Chiama run() una volta per ogni insieme di argomenti.
Memorizzare file condivisiScrivi in un file system scratch condiviso.Scrivi nello storage di file del workflow.
Limitare il tempo di esecuzioneImposta un limite di wall-time.Il workflow annulla un job dopo 24 ore.
Eseguire il checkpoint dei job lunghiScrivi i checkpoint nello storage scratch.Salva i risultati intermedi nello storage di file.
Rieseguire un job fallitoReinvia il job.Chiama di nuovo run(). Il workflow non riprova automaticamente i job falliti.
Monitorare i jobControlla la coda e i file di log dal nodo di login.Controlla stato, log e risultato di ogni job dalla tua sessione Python locale.

Passaggi successivi​

Raccomandazioni