Introduzione ai workflow gestiti
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.
La tabella seguente descrive ogni fase del diagramma e lo stato del job che vedi durante quella fase:
| Fase | Cosa succede | Stato del job |
|---|---|---|
| Caricamento | Carichi 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) |
| Coda | Chiami run(). Il workflow verifica se la tua istanza ha un'allocazione sufficiente e pianifica il job quando le risorse di calcolo sono disponibili. | QUEUED |
| Avvio | Il workflow crea un ambiente con il profilo di calcolo che hai selezionato. | INITIALIZING |
| Esecuzione | Viene 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 |
| Risultato | Il 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.
| Risorsa | Cosa può usare il job |
|---|---|
| Calcolo | La CPU, la memoria e le GPU del profilo di calcolo che hai selezionato per il job. |
| Codice e pacchetti | I file che hai caricato con il workflow e i pacchetti supportati installati nell'ambiente. |
| Argomenti | Gli argomenti che hai passato a run(). Leggili con get_arguments(). |
| Accesso alla QPU | Le 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. |
| Output | Un 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 file | File condivisi da tutte le tue esecuzioni del workflow. I file rimangono nello storage dopo la fine del job. |
| Internet | Nessun 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-premises | Workflow gestiti |
|---|---|---|
| Ottenere tempo di calcolo | Richiedi 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 sistema | Connettiti 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 software | Compila 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 job | Scrivi uno script batch e invialo allo scheduler. | Chiama run() con gli argomenti del job. |
| Richiedere risorse | Richiedi 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 parametri | Invia un job array. | Chiama run() una volta per ogni insieme di argomenti. |
| Memorizzare file condivisi | Scrivi in un file system scratch condiviso. | Scrivi nello storage di file del workflow. |
| Limitare il tempo di esecuzione | Imposta un limite di wall-time. | Il workflow annulla un job dopo 24 ore. |
| Eseguire il checkpoint dei job lunghi | Scrivi i checkpoint nello storage scratch. | Salva i risultati intermedi nello storage di file. |
| Rieseguire un job fallito | Reinvia il job. | Chiama di nuovo run(). Il workflow non riprova automaticamente i job falliti. |
| Monitorare i job | Controlla 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
- Installa i pacchetti client e autenticati.
- Distribuisci il tuo primo workflow gestito per caricare un workflow, eseguirlo e ottenerne il risultato.