Lot
class Batch(backend, max_time=None, *, create_new=True)
Bases : Session
Classe permettant d'exécuter des travaux en mode batch.
Le mode batch est conçu pour réaliser efficacement des expériences comprenant plusieurs tâches indépendantes.
L'utilisation du mode batch offre les avantages suivants :
- Les calculs classiques des tâches, tels que la compilation, sont exécutés en parallèle. Ainsi, l'exécution de plusieurs travaux par lots est nettement plus rapide que l'exécution en série.
- Il y a généralement un délai minimal entre les travaux, ce qui permet d'éviter les dérives.
- Si vous divisez votre charge de travail en plusieurs tâches et que vous les exécutez en mode
batch, vous pouvez obtenir des résultats à partir de tâches individuelles, ce qui les rend plus flexibles. Par exemple, si les résultats d'un travail ne répondent pas à vos attentes, vous pouvez annuler les autres travaux ou simplement soumettre à nouveau ce travail individuel et éviter de réexécuter l'ensemble de la charge de travail.
Le mode batch peut raccourcir le temps de traitement si tous les travaux sont fournis dès le départ. Si vous souhaitez soumettre des travaux itératifs, utilisez plutôt le mode session .
Vous pouvez ouvrir un lot « IBM Quantum Compute » (anciennement « Qiskit Runtime ») à l'aide de cette classe Batch , puis soumettre des tâches à une ou plusieurs primitives.
Par exemple :
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)Pour plus de détails, consultez la page " Exécuter des travaux par lots ".
Paramètres
- backend (BackendV2) – Instance de
Backendla classe. - max_time (int | str | None) – Durée maximale pendant laquelle une session d' IBM Quantum Compute s peut rester ouverte avant d'être fermée de force. Peut être spécifié en secondes (entier) ou sous forme de chaîne de caractères, par exemple : “2h, 30m, 40s”. Cette valeur doit être inférieure à la limite maximale imposée par le système.
- create_new (bool | None) – Si True, le point de terminaison POST session API sera appelé pour créer une nouvelle session. Empêche la création d'une nouvelle session lorsque
from_id()est appelé.
Augmentations
ValueError - Si une valeur d'entrée n'est pas valide.
Attributs
service
Service de retour associé à cette session.
Retours
qiskit_ibm_runtime.QiskitRuntimeService associée à cette session.
session_id
Renvoie l'identifiant de la session.
Retours
ID de session. Aucune si le backend est un simulateur.
Méthodes
backend
backend()
Retourner le backend pour cette session.
Retours
Backend pour cette session. Aucune si elle est inconnue.
Type de retour
str | Aucun
cancel
close
close()
Fermez la session afin que les nouvelles tâches ne soient plus acceptées.
Fermez la session afin que les nouveaux travaux ne soient plus acceptés, mais que les travaux en cours ou en file d'attente soient exécutés jusqu'à leur terme. La session sera clôturée lorsqu'il n'y aura plus de travaux en attente.
Type de retour
Aucun
details
details()
Renvoyer les détails de la session.
Retours
Un dictionnaire avec les détails des sessions.
id: identifiant de la session.backend_name: backend utilisé pour la session.interactive_timeout: Le temps d'inactivité maximal (en secondes) entre deux tâches avant que la session ne soit désactivée.max_time: Durée maximale autorisée (en secondes) pour la session, sous réserve des limites du plan.active_timeout: La durée maximale (en secondes) pendant laquelle une session peut rester active.state: État de la session - ouverte, active, inactive ou fermée.accepting_jobs: Indique si la session accepte ou non des travaux.last_job_started: Horodatage du démarrage du dernier travail de la session.last_job_completed: Date à laquelle le dernier travail de la session s'est achevé.started_at: Horodatage du début de la session.closed_at: Horodatage de la fermeture de la session.activated_at: Date à laquelle l'état de la session est devenu actif.mode: Mode d'exécution de la session.usage_time: La durée d'utilisation, en secondes, de cette session ou de ce lot. L'utilisation est définie comme le temps pendant lequel un système quantique est engagé pour effectuer un travail.
Type de retour
dict [str, Any] | None
from_id
classmethod from_id(session_id, service, use_fractional_gates=False, calibration_id=None)
session_idCréer un objet Session à partir d'un fichier donné.
Par exemple :
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)Paramètres
- session_id (str) – L'identifiant de la session à créer. Il doit s'agir d'un identifiant de session déjà existant.
- service (QiskitRuntimeService) – Exemplaire de la
QiskitRuntimeServiceclasse. Si vous utilisez plusieurs instances, notez que l'instance cloud active dans leservicesera remplacée par celle qui a accès à cesession_id. Veuillez consulter laQiskitRuntimeServicedocumentation relative à l'utilisation de plusieurs instances ainsi que laactive_instance()méthode permettant de déterminer quelle est l'instance active. - use_fractional_gates (bool) – Autoriser ou non les portes fractionnaires pour le backend utilisé pour créer la session.
- calibration_id (str | None) – L'identifiant de calibrage du backend utilisé pour créer la session.
Augmentations
- IBMInputValueError – Si l'identifiant de session fourni n'existe pas.
- IBMRuntimeError – Si le backend de la session est inconnu.
Retours
Une nouvelle session avec la valeur session_id
Type de retour
status
status()
Renvoie l'état actuel de la session.
Retours
Statut de la session sous forme de chaîne de caractères.
Pending: La session est créée mais n'est pas active. Il deviendra actif lorsque le prochain travail de cette session sera mis en file d'attente.In progress, accepting new jobsla session est active et accepte de nouveaux emplois.In progress, not accepting new jobsla session est active et n'accepte pas de nouveaux emplois.Closed: max_time a expiré ou la session a été explicitement fermée.Noneles détails de l'état ne sont pas disponibles.
Type de retour
str | Aucun
usage
usage()
Renvoie l'utilisation de la session en secondes.
L'utilisation d'une session est le temps qui s'écoule entre le moment où le premier travail commence et le moment où la session devient inactive, est fermée ou lorsque son dernier travail se termine, selon ce qui se produit en dernier.
L'utilisation des lots est le temps que tous les travaux passent sur la QPU.
Type de retour
float | None