Batch
class Batch(backend, max_time=None, *, create_new=True)
Basi: Session
Classe per l'esecuzione di lavori in modalità batch.
La modalità batch è progettata per eseguire in modo efficiente esperimenti che comprendono più lavori indipendenti.
L'utilizzo della modalità batch offre i seguenti vantaggi:
- I calcoli classici dei lavori, come la compilazione, vengono eseguiti in parallelo. Pertanto, l'esecuzione di più lavori in batch è significativamente più veloce rispetto all'esecuzione in serie.
- Di solito il ritardo tra un lavoro e l'altro è minimo, il che può aiutare a evitare la deriva.
- Se si suddivide il carico di lavoro in più lavori e li si esegue in modalità
batch, è possibile ottenere i risultati dei singoli lavori, rendendoli più flessibili. Ad esempio, se i risultati di un lavoro non soddisfano le aspettative, è possibile annullare i lavori rimanenti o semplicemente inviare nuovamente quel singolo lavoro, evitando di rieseguire l'intero carico di lavoro.
La modalità batch può ridurre i tempi di elaborazione se tutti i lavori vengono forniti all'inizio. Se si desidera inviare lavori iterativi, utilizzare invece la modalità session .
È possibile aprire un batch " IBM Quantum Compute " (precedentemente denominato " Qiskit Runtime ") utilizzando questa classe Batch , per poi inviare i lavori a una o più primitive.
Ad esempio:
import numpy as np
from qiskit.circuit.library import IQP
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit.quantum_info import random_hermitian
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2 as Sampler, Batch
n_qubits = 127
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False, min_num_qubits=n_qubits)
rng = np.random.default_rng()
mats = [np.real(random_hermitian(n_qubits, seed=rng)) for _ in range(30)]
circuits = [IQP(mat) for mat in mats]
for circuit in circuits:
circuit.measure_all()
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_circuits = pm.run(circuits)
max_circuits = 10
all_partitioned_circuits = []
for i in range(0, len(isa_circuits), max_circuits):
all_partitioned_circuits.append(isa_circuits[i : i + max_circuits])
jobs = []
start_idx = 0
with Batch(backend=backend):
sampler = Sampler()
for partitioned_circuits in all_partitioned_circuits:
job = sampler.run(partitioned_circuits)
jobs.append(job)Per maggiori dettagli, consultare la pagina " Esecuzione di lavori in batch ".
Parametri
- backend (BackendV2) – Istanza della
Backendclasse. - max_time (int | str | None) – Tempo massimo durante il quale una sessione di IBM Quantum Compute può rimanere aperta prima di essere chiusa forzatamente. Può essere specificato come numero di secondi (int) o come stringa del tipo “2h, 30m, 40s”. Questo valore deve essere inferiore al limite massimo imposto dal sistema.
- create_new (bool | None) – Se True, verrà richiamato l'endpoint POST dell'API di sessione per creare una nuova sessione. Impedisce la creazione di una nuova sessione quando viene chiamato
from_id().
Aumenti
ValueError - Se un valore di ingresso non è valido.
Attributi
service
Restituisce il servizio associato a questa sessione.
Risultati
qiskit_ibm_runtime.QiskitRuntimeService associato a questa sessione.
session_id
Restituisce l'ID della sessione.
Risultati
ID sessione. Nessuno se il backend è un simulatore.
Metodi
backend
backend()
Restituisce il backend per questa sessione.
Risultati
Backend per questa sessione. Nessuno se sconosciuto.
Tipo di restituzione
str | Nessuno
cancel
close
close()
Chiudi la sessione in modo che non vengano più accettati nuovi lavori.
Chiudere la sessione, in modo che non vengano più accettati nuovi lavori, ma i lavori esistenti in coda o in esecuzione vengano eseguiti fino al completamento. La sessione verrà terminata quando non ci saranno più lavori in sospeso.
Tipo di restituzione
Nessuna
details
details()
Restituire i dettagli della sessione.
Risultati
Un dizionario con i dettagli delle sessioni.
id: id della sessione.backend_name: backend utilizzato per la sessione.interactive_timeout: Il tempo massimo di inattività (in secondi) tra un lavoro e l'altro consentito prima che la sessione venga disattivata.max_time: Tempo massimo consentito (in secondi) per la sessione, soggetto ai limiti del piano.active_timeout: Il tempo massimo (in secondi) in cui una sessione può rimanere attiva.state: Stato della sessione: aperta, attiva, inattiva o chiusa.accepting_jobs: Se la sessione sta accettando o meno lavori.last_job_started: Timestamp dell'inizio dell'ultimo lavoro della sessione.last_job_completed: Timestamp del completamento dell'ultimo lavoro della sessione.started_at: Timestamp di quando è stata avviata la sessione.closed_at: Timestamp di quando la sessione è stata chiusa.activated_at: Timestamp di quando lo stato della sessione è stato cambiato in attivo.mode: Modalità di esecuzione della sessione.usage_time: Il tempo di utilizzo, in secondi, di questa sessione o batch. L'utilizzo è definito come il tempo in cui un sistema quantistico è impegnato a completare un lavoro.
Tipo di restituzione
dict [str, Qualsiasi] | Nessuno
from_id
classmethod from_id(session_id, service, use_fractional_gates=False, calibration_id=None)
Crea un oggetto Session con un dato session_id.
Ad esempio:
from qiskit_ibm_runtime import QiskitRuntimeService, Session
service = QiskitRuntimeService()
job = service.job(<job_id>)
existing_session_id = job.session_id
new_session = Session.from_id(existing_session_id, service)Parametri
- session_id (str) – L'ID della sessione da creare. Questo deve essere un ID di sessione già esistente.
QiskitRuntimeServiceservice (QiskitRuntimeService) – Istanza della classe. Se si utilizzano più istanze, tenere presente che l'istanza cloud attiva nelserviceverrà sostituita con quella che ha accesso a quelsession_id. Si prega di consultare laQiskitRuntimeServicedocumentazione sull'uso di più istanze e ilactive_instance()metodo per verificare quale sia l'istanza attiva.- use_fractional_gates (bool) – Se consentire o meno i gate frazionari per il backend utilizzato per creare la sessione.
- calibration_id (str | None) – L'ID di calibrazione del backend utilizzato per creare la sessione.
Aumenti
- IBMInputValueError – Se l'ID della sessione specificato non esiste.
- IBMRuntimeError – Se il backend della sessione è sconosciuto.
Risultati
Una nuova sessione con i dati session_id
Tipo di restituzione
status
status()
Restituisce lo stato attuale della sessione.
Risultati
Stato della sessione come stringa.
Pending: La sessione è stata creata ma non è attiva. Diventerà attivo quando il lavoro successivo di questa sessione verrà eliminato.In progress, accepting new jobs: la sessione è attiva e accetta nuovi lavori.In progress, not accepting new jobs: la sessione è attiva e non accetta nuovi lavori.Closed: il tempo massimo è scaduto o la sessione è stata chiusa esplicitamente.None: i dettagli sullo stato non sono disponibili.
Tipo di restituzione
str | Nessuno
usage
usage()
Restituisce l'utilizzo della sessione in secondi.
L'utilizzo della sessione è il tempo che intercorre tra l'avvio del primo lavoro e l'inattività della sessione, la sua chiusura o il completamento dell'ultimo lavoro, a seconda dell'ultimo caso.
L'utilizzo dei batch è la quantità di tempo che tutti i lavori trascorrono sulla QPU.
Tipo di restituzione
galleggiante | Nessuno