Vai al contenuto principale

Scegli la modalità di esecuzione giusta

I carichi di lavoro su scala utility possono richiedere molte ore per essere completati, quindi è importante che le risorse sia classiche che quantistiche siano pianificate in modo efficiente per ottimizzare l'esecuzione. Le modalità di esecuzione offrono flessibilità nel bilanciare il compromesso tra costo e tempo, consentendo di utilizzare le risorse in modo ottimale per i propri carichi di lavoro. Ci sono diversi aspetti da considerare quando si sceglie quale modalità di esecuzione utilizzare, come il tempo di esecuzione complessivo (tempo massimo di vita, o TTL) e il tempo tra i job (TTL interattivo).

I vantaggi di ciascuna modalità sono riassunti di seguito:

  • Batch
    • L'intero batch di job viene pianificato insieme e non c'è tempo di attesa in coda aggiuntivo per ciascuno.
    • Il calcolo classico dei job, come la compilazione, viene eseguito in parallelo. Pertanto, eseguire più job in un batch è significativamente più veloce che eseguirli in serie.
    • Di solito c'è un ritardo minimo tra i job, il che può aiutare a evitare il drift.
    • Se suddividi il carico di lavoro in più job e li esegui in modalità batch, puoi ottenere i risultati dai singoli job, il che li rende più flessibili da gestire. Ad esempio, se i risultati di un job non soddisfano le tue aspettative, puoi annullare i job rimanenti. Inoltre, se un job fallisce, puoi inviarlo nuovamente invece di rieseguire l'intero carico di lavoro.
    • È generalmente meno costosa delle sessioni.
  • Session
    • Tutte le funzionalità della modalità batch (ma con un utilizzo maggiore; consulta Utilizzo del carico di lavoro per maggiori dettagli su come viene calcolato l'utilizzo).
    • Accesso dedicato ed esclusivo alla QPU durante la finestra attiva della sessione.
    • Utile per carichi di lavoro che non hanno tutti gli input disponibili fin dall'inizio, per carichi di lavoro iterativi che richiedono post-elaborazione classica prima che il successivo possa essere eseguito, e per esperimenti che devono essere eseguiti il più vicino possibile l'uno all'altro.
  • Job
    • Il più semplice da usare per esperimenti di piccole dimensioni.
    • Potrebbe essere eseguito prima della modalità batch.

Raccomandazioni e buone pratiche

In generale, utilizza la modalità batch a meno che tu non abbia carichi di lavoro che non dispongono di tutti gli input fin dall'inizio.

  • Usa la modalità batch per inviare più job primitivi contemporaneamente e ridurre i tempi di elaborazione.

  • Usa la modalità session per carichi di lavoro iterativi, o se hai bisogno di accesso dedicato alla QPU.

  • Usa sempre la modalità job per inviare una singola richiesta primitiva.

  • Poiché le sessioni sono generalmente più costose, si raccomanda di utilizzare il batch ogni volta che non hai bisogno dei vantaggi aggiuntivi offerti dalle sessioni.

  • Gli utenti del piano Open non possono inviare job in modalità session.

Per garantire l'utilizzo più efficiente delle modalità di esecuzione, si raccomandano le seguenti pratiche:

  • Esiste un overhead fisso associato all'esecuzione di un job. In generale, se ciascuno dei tuoi job utilizza meno di un minuto di tempo QPU, considera di combinarne più di uno in un job più grande (questo vale per tutte le modalità di esecuzione). Con "tempo QPU" si intende il tempo impiegato dal complesso QPU per elaborare il tuo job.

  • Se ciascuno dei tuoi job consuma più di un minuto di tempo QPU, o se combinare i job non è pratico, puoi comunque eseguire più job in parallelo. Ogni job passa attraverso l'elaborazione sia classica che quantistica. Mentre una QPU può elaborare un solo job alla volta, fino a cinque job classici possono essere elaborati in parallelo. Puoi sfruttare questo aspetto inviando più job in modalità di esecuzione batch o session.

Le precedenti sono linee guida generali e dovresti ottimizzare il tuo carico di lavoro per trovare il rapporto ottimale, specialmente quando utilizzi le sessioni. Ad esempio, se stai usando una sessione per ottenere accesso esclusivo a un backend, considera di suddividere i job di grandi dimensioni in job più piccoli ed eseguirli in parallelo. Questo potrebbe essere più conveniente in termini di costi perché può ridurre il tempo complessivo (wall-clock time).

Esempi

Eseguire un algoritmo quantistico variazionale

L'esecuzione di un algoritmo quantistico variazionale segue tipicamente questo flusso:

  1. Preparare l'ansatz.
  2. Valutare la funzione di costo su una QPU.
  3. Prendere il risultato del passaggio precedente ed elaborarlo con un ottimizzatore classico.
  4. Regolare i parametri in base all'output del punto (3), poi tornare al passaggio (2).

In questo caso, se si utilizzasse la modalità job o batch, ogni job generato dal passaggio (2) dovrebbe rientrare in coda. Questo aumenta drasticamente la durata dell'esperimento (wall-clock time) a causa del tempo di attesa in coda. Potrebbe anche richiedere più iterazioni per convergere a causa del drift del dispositivo. Ovvero, ogni iterazione dovrebbe darti un risultato migliore, ma il drift del dispositivo potrebbe peggiorare i risultati successivi.

Inoltre, se utilizzi PEA o PEC, puoi apprendere il modello di rumore una volta sola e applicarlo ai job successivi quando esegui in una sessione dedicata. Di solito questo non funziona con la modalità batch o job perché il modello di rumore potrebbe diventare obsoleto nel momento in cui il job successivo esce dalla coda.

Confrontare le impostazioni di mitigazione degli errori

Per confrontare gli effetti dei metodi di mitigazione degli errori disponibili, potresti seguire questo flusso:

  1. Costruire un circuito e un osservabile.
  2. Inviare job primitivi che utilizzano diverse combinazioni di impostazioni di mitigazione degli errori.
  3. Tracciare i risultati per osservare gli effetti delle varie impostazioni.

In questo caso, tutti i job (che sono correlati ma indipendenti) sono disponibili fin dall'inizio. Se utilizzi la modalità batch, vengono pianificati collettivamente, quindi devi aspettare che passino attraverso la coda una sola volta. Inoltre, poiché l'obiettivo è confrontare gli effetti dei vari metodi di mitigazione degli errori, è vantaggioso che vengano eseguiti il più vicino possibile l'uno all'altro. Quindi, il batch sarebbe una buona scelta. Potresti eseguire questi job in una sessione, ma poiché le sessioni sono generalmente più costose, si raccomanda di utilizzare il batch ogni volta che non hai bisogno delle funzionalità aggiuntive offerte dalle sessioni.

Passi successivi