Utilizzo del carico di lavoro
L'utilizzo indica il consumo del servizio di elaborazione " IBM Quantum " ed è determinato dal tempo durante il quale una QPU è occupata nell'esecuzione dei carichi di lavoro.
- L'utilizzo della sessione viene misurato in base al tempo trascorso mentre la sessione rimane attiva, poiché la capacità della QPU viene riservata per tutta la durata della sessione, indipendentemente dal fatto che i carichi di lavoro siano effettivamente in esecuzione. Per ulteriori informazioni sulle transizioni di stato delle sessioni, consultare la sezione "Durata della sessione".
- L'utilizzo del batch è misurato come il tempo cumulativo durante il quale la QPU rimane bloccata per l'esecuzione di tutti i lavori del batch.
- L'utilizzo per singolo processo viene misurato in base al tempo durante il quale la QPU è occupata nell'esecuzione del processo.
Si noti che i lavori non riusciti o annullati vengono conteggiati nell'utilizzo in determinate circostanze: per ulteriori dettagli, consultare la sezione Lavori non riusciti e annullati.
Per gli utenti del piano a consumo, consultare la sezione "Gestisci i costi" per ulteriori dettagli su come impostare un limite di spesa.
Utilizzo per lavori non riusciti e annullati
Quando un lavoro è fallito o annullato, l'utilizzo riportato è il seguente:
-
Modalità "job" o "batch": se l'errore o l'annullamento sono dovuti a un errore di sistema, l'utilizzo riportato è pari a zero. Per i lavori che non sono andati a buon fine a causa di un errore dell'utente o che sono stati annullati dall'utente, l'utilizzo riportato corrisponde a qualsiasi consumo verificatosi fino a quel momento, compreso il sovraccarico sostenuto per preparare la QPU all'esecuzione del lavoro.
-
Modalità sessione: l'utilizzo riportato è il tempo effettivo in cui la sessione è attiva, indipendentemente dal numero di lavori che falliscono o vengono annullati.
Richiesta dell'utilizzo effettivo di un carico di lavoro
Al termine di un carico di lavoro, esistono diversi modi per visualizzare il suo utilizzo effettivo:
- In v0.30
qiskit-ibm-runtimeo versioni successive, eseguirejob.usage()per un singolo processo, oppurebatch.usage()osession.usage()quando si utilizza la modalità batch o di sessione. Se si utilizza una versione precedente diqiskit-ibm-runtime(>= 0.23 e < 0.30 ), le istruzioni per l'uso sono ancora disponibili in esession.details()["usage_time"]batch.details()["usage_time"]. - Utilizza
GET /sessions/{id}per visualizzare i dettagli relativi a un batch o a una sessione specifici (l'endpoint è lo stesso per entrambe le modalità di esecuzione). - Utilizza
GET /jobs/{id}per visualizzare le informazioni sull'utilizzo relative a un singolo lavoro.
Visualizza utilizzo istanza
È possibile visualizzare l'utilizzo di un'istanza nella pagina Istanze o, per chi ha l'autorità necessaria, nella pagina Analytics. Si noti che le pagine potrebbero mostrare numeri di utilizzo diversi perché calcolano l'utilizzo in modo diverso.
La pagina delle istanze mostra l'utilizzo in tempo reale per gli ultimi 28 giorni (rolling), fino all'ora del giorno corrente. L'utilizzo della pagina di Analytics viene ricalcolato ogni ora e comprende gli ultimi 28 giorni completi; in altre parole, mostra l'utilizzo dalle 00:00 di 28 giorni fa a oggi, allo scoccare dell'ora.
Stima dell'utilizzo prima di inviare un lavoro
Sebbene ottenere una stima locale accurata sia complicato dalle operazioni aggiuntive eseguite per la soppressione e la riduzione degli errori, è possibile utilizzare questa formula di base per ottenere un'approssimazione dell'utilizzo stimato:
<per sub-job overhead> + (rep_delay + <circuit length>) * <num executions>
<per sub-job overhead>è un overhead di circa 2s per ogni sotto-lavoro. Questo include operazioni come il caricamento del carico utile nell'elettronica di controllo. Il lavoro primitivo può essere suddiviso in più sotto-lavori se è troppo grande perché il motore di esecuzione possa elaborarlo tutto in una volta.rep_delayè un'opzione personalizzabile dall'utente; il valore predefinito è dato dabackend.default_rep_delay, che corrisponde a 250 microsecondi sulla maggior parte dei backend IBM Quantum. Si noti che abbassando si riducerep_delayil tempo totale di esecuzione della QPU, ma a scapito di un aumento del tasso di errore nella preparazione dello stato; per ulteriori informazioni, consultare la guida all’esecuzione con tasso di ripetizione dinamico.<circuit length>è la lunghezza totale dell'istruzione. Ogni istruzione richiede una quantità di tempo diversa sulla QPU, quindi la lunghezza totale varia da circuito a circuito. Una misura, ad esempio, può richiedere 56 volte più tempo di un gatex.backend.target[<instruction>][<qubit>].durationpuò essere utilizzato per trovare la durata esatta di ogni istruzione. La lunghezza tipica di un circuito è probabilmente compresa tra 50 e 100 microsecondi. Se si utilizzano tecniche di soppressione o attenuazione degli errori con le primitive, è possibile che nel circuito vengano inserite istruzioni aggiuntive, con conseguente aumento della lunghezza totale del circuito.NoteL' opzione sperimentale
scheduler_timingrestituisce il tempo totale del circuito, ma questo NON è il tempo utilizzato per la fatturazione.<num executions>è il numero totale di circuiti moltiplicato per il numero di colpi, dove i circuiti sono quelli generati dopo la trasmissione degli elementi dell' PUB.- Se si utilizzano tecniche di mitigazione degli errori con le primitive, potrebbero essere eseguiti circuiti aggiuntivi come parte del processo di mitigazione, il che aumenterebbe il numero totale di esecuzioni. Inoltre, tecniche avanzate di mitigazione degli errori come PEA e PEC comportano un overhead molto più elevato perché richiedono circuiti funzionanti per l'apprendimento del rumore.
- L'estimatore raggruppa gli osservabili che si commutano a livello di qubit, riducendo così il numero di esecuzioni.
Se non si utilizzano tecniche avanzate di mitigazione degli errori o personalizzate rep_delay, è possibile utilizzare 2+0.00035*<num executions> come formula rapida.
Stima l'utilizzo a livello locale con Qiskit
Questo esempio di codice mostra come utilizzare Qiskit per calcolare il tempo di esecuzione del circuito:
# Schedule the circuit to get more accurate timing
pm = generate_preset_pass_manager(
target=backend.target,
optimization_level=0,
scheduling_method="alap"
)
scheduled_circuits = pm.run(isa_circuits)
init_duration = backend.target["reset"][(0,)].duration
rep_delay = sampler.options.execution.rep_delay or backend.default_rep_delay
circuit_duration = 0
for circuit in scheduled_circuits:
# Estimate circuit length
circuit_duration += circuit.estimate_duration(backend.target)
# Add INIT time
if sampler.options.execution.init_qubits:
circuit_duration += init_duration
# Add rep_delay
circuit_duration += rep_delay
total_time = 2 + (circuit_duration*shots)
print(f"Total estimated usage is {math.ceil(total_time)} seconds")Passi successivi
- Esaminate questi suggerimenti: Ridurre al minimo il tempo di esecuzione del lavoro.
- Impostare il tempo massimo di esecuzione.
- Scopri come eseguire la transpilazione in locale nella sezione " Transpilazione ".
- Prova la guida Confronta le impostazioni del transpiler.