Lote
class Batch(backend, max_time=None, *, create_new=True)
Bases: Session
Clase para ejecutar trabajos en modo de ejecución por lotes.
El modo batch está diseñado para realizar de forma eficiente experimentos que comprenden múltiples trabajos independientes.
El uso del modo batch ofrece las siguientes ventajas:
- La computación clásica de los trabajos, como la compilación, se ejecuta en paralelo. Por lo tanto, ejecutar varios trabajos por lotes es mucho más rápido que ejecutarlos en serie.
- Suele haber un retraso mínimo entre un trabajo y otro, lo que puede ayudar a evitar la deriva.
- Si divide su carga de trabajo en varios trabajos y los ejecuta en modo
batch, puede obtener resultados de trabajos individuales, lo que hace que sea más flexible trabajar con ellos. Por ejemplo, si los resultados de un trabajo no cumplen sus expectativas, puede cancelar los trabajos restantes, o simplemente volver a enviar ese trabajo individual y evitar volver a ejecutar toda la carga de trabajo.
El modo por lotes puede acortar el tiempo de procesamiento si se proporcionan todos los trabajos al principio. Si desea enviar trabajos iterativos, utilice el modo session .
Puede abrir un lote Qiskit Runtime utilizando esta clase Batch , y luego enviar trabajos a una o más primitivas.
Por ejemplo:
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)Para más detalles, consulte la página " Ejecutar trabajos por lotes ".
Parámetros
- backend (BackendV2) – Instancia de
Backendla clase. - max_time (int | str | None) – Tiempo máximo que una sesión de ejecución puede estar abierta antes de ser cerrada forzosamente. Puede especificarse como segundos (int) o una cadena como “2h 30m 40s”. Este valor debe ser inferior al máximo impuesto por el sistema.
- create_new (bool | None) – Si es True, se llamará al punto final de la API de sesión POST para crear una nueva sesión. Evita la creación de una nueva sesión cuando se llama a
from_id().
Eleva
ValueError - Si un valor de entrada no es válido.
Atributos
service
Devuelve el servicio asociado a esta sesión.
Devuelve
qiskit_ibm_runtime.QiskitRuntimeService asociada a esta sesión.
session_id
Devuelve el ID de la sesión.
Devuelve
ID de sesión. Ninguno si el backend es un simulador.
Métodos
backend
backend()
Devuelve el backend de esta sesión.
Devuelve
Backend para esta sesión. Ninguna si es desconocida.
Tipo de retorno
str | Ninguno
cancel
close
close()
Cierra la sesión para que no se acepten más trabajos.
Cierra la sesión para que ya no se acepten nuevos trabajos, pero los trabajos existentes en cola o en ejecución se ejecutarán hasta su finalización. La sesión finalizará cuando no haya más trabajos pendientes.
Tipo de retorno
Ninguna
details
details()
Devuelve los detalles de la sesión.
Devuelve
Un diccionario con los detalles de las sesiones.
id: id de la sesión.backend_name: backend utilizado para la sesión.interactive_timeout: El tiempo máximo de inactividad (en segundos) entre trabajos que se permite que ocurra antes de que se desactive la sesión.max_time: Tiempo máximo permitido (en segundos) para la sesión, sujeto a los límites del plan.active_timeout: El tiempo máximo (en segundos) que una sesión puede permanecer activa.state: Estado de la sesión: abierta, activa, inactiva o cerrada.accepting_jobs: Si la sesión está aceptando trabajos o no.last_job_started: Fecha y hora de inicio del último trabajo de la sesión.last_job_completed: Fecha y hora de finalización del último trabajo de la sesión.started_at: Hora de inicio de la sesión.closed_at: Fecha y hora en que se cerró la sesión.activated_at: Marca de tiempo de cuando el estado de la sesión cambió a activo.mode: Modo de ejecución de la sesión.usage_time: El tiempo de uso, en segundos, de esta Sesión o Lote. El uso se define como el tiempo que un sistema cuántico está comprometido para completar un trabajo.
Tipo de retorno
dict [str, Cualquiera] | Ninguno
from_id
classmethod from_id(session_id, service, use_fractional_gates=False, calibration_id=None)
session_idCrea un objeto Session con un dato dado.
Por ejemplo:
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)Parámetros
- session_id (str) – El identificador de la sesión que se va a crear. Este debe ser un identificador de sesión ya existente.
- service (QiskitRuntimeService) – Instancia de la
QiskitRuntimeServiceclase. Si se utilizan varias instancias, ten en cuenta que la instancia en la nube activa en elserviceserá sustituida por aquella que tenga acceso a esesession_id. Consulte laQiskitRuntimeServicedocumentación sobre el uso de varias instancias y elactive_instance()método para comprobar cuál es la instancia activa. - use_fractional_gates (bool) – Si se permiten o no puertas fraccionarias para el backend que se utiliza para crear la sesión.
- calibration_id (str | None) – El identificador de calibración del backend que se utiliza para crear la sesión.
Eleva
- IBMInputValueError – Si el «session_id» proporcionado no existe.
- IBMRuntimeError – Si se desconoce el backend de la sesión.
Devuelve
Se creará una nueva sesión con el valor session_id
Tipo de retorno
status
status()
Devuelve el estado actual de la sesión.
Devuelve
Estado de la sesión en forma de cadena.
Pending: La sesión está creada pero no activa. Se activará cuando se ponga en cola el siguiente trabajo de esta sesión.In progress, accepting new jobs: la sesión está activa y acepta nuevos trabajos.In progress, not accepting new jobs: la sesión está activa y no acepta nuevos trabajos.Closed: max_time expiró o la sesión se cerró explícitamente.None: los detalles de estado no están disponibles.
Tipo de retorno
str | Ninguno
usage
usage()
Devuelve el uso de la sesión en segundos.
El uso de la sesión es el tiempo que transcurre desde que se inicia el primer trabajo hasta que la sesión se inactiva, se cierra o finaliza su último trabajo, lo que ocurra en último lugar.
El uso por lotes es la cantidad de tiempo que todos los trabajos pasan en la QPU.
Tipo de retorno
float | Ninguno