Qiskit Runtime
qiskit_ibm_runtime
Módulos relacionados con Qiskit Runtime IBM Client.
Qiskit Runtime es una nueva arquitectura que agiliza los cálculos que requieren muchas iteraciones. Estos experimentos se ejecutarán mucho más rápido dentro de su proceso híbrido cuántico/clásico mejorado.
Primitivas y sesiones
Qiskit Runtime tiene dos primitivas predefinidas: Sampler y Estimator. Estas primitivas proporcionan una interfaz simplificada para realizar tareas básicas de computación cuántica, al tiempo que tienen en cuenta los últimos avances en hardware y software cuánticos.
Qiskit Runtime también tiene el concepto de sesión. Los trabajos enviados dentro de una sesión son priorizados por el planificador. Una sesión permite realizar llamadas iterativas al ordenador cuántico de forma más eficiente.
A continuación se muestra un ejemplo de uso de primitivas dentro de una sesión:
from qiskit_ibm_runtime import QiskitRuntimeService, Session
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.circuit.library import real_amplitudes
from qiskit.circuit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit.quantum_info import SparsePauliOp
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
# Initialize account.
service = QiskitRuntimeService()
# Prepare inputs.
psi = real_amplitudes(num_qubits=2, reps=2)
H1 = SparsePauliOp.from_list([("II", 1), ("IZ", 2), ("XI", 3)])
theta = [0, 1, 1, 2, 3, 5]
# Bell Circuit
qr = QuantumRegister(2, name="qr")
cr = ClassicalRegister(2, name="cr")
qc = QuantumCircuit(qr, cr, name="bell")
qc.h(qr[0])
qc.cx(qr[0], qr[1])
qc.measure(qr, cr)
backend = service.least_busy(operational=True, simulator=False)
pm = generate_preset_pass_manager(target=backend.target, optimization_level=1)
bell_isa_circuit = pm.run(qc)
psi_isa_circuit = pm.run(psi)
isa_observables = H1.apply_layout(psi_isa_circuit.layout)
with Session(backend=backend) as session:
# Submit a request to the Sampler primitive within the session.
sampler = Sampler(mode=session)
job = sampler.run([bell_isa_circuit])
pub_result = job.result()[0]
print(f"Counts: {pub_result.data.cr.get_counts()}")
# Submit a request to the Estimator primitive within the session.
estimator = Estimator(mode=session)
estimator.options.resilience_level = 1 # Set options.
job = estimator.run(
[(psi_isa_circuit, isa_observables, theta)]
)
pub_result = job.result()[0]
print(f"Expectation values: {pub_result.data.evs}")Modo de prueba local
Puede validar sus programas cuánticos antes de enviarlos a un sistema físico utilizando el modo de prueba local. El modo de prueba local se activa si se utiliza uno de los backends falsos de qiskit_ibm_runtime.fake_provider o una instancia de backend Qiskit Aer al instanciar una primitiva o una sesión. Por ejemplo:
from qiskit_aer import AerSimulator
from qiskit.circuit.library import real_amplitudes
from qiskit.circuit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit.quantum_info import SparsePauliOp
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime import Session
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit_ibm_runtime.fake_provider import FakeManilaV2
# Bell Circuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
# Run the sampler job locally using FakeManilaV2
fake_manila = FakeManilaV2()
pm = generate_preset_pass_manager(backend=fake_manila, optimization_level=1)
isa_qc = pm.run(qc)
sampler = Sampler(backend=fake_manila)
result = sampler.run([isa_qc]).result()
# Run the sampler job locally using AerSimulator.
# Session syntax is supported but ignored.
aer_sim = AerSimulator()
pm = generate_preset_pass_manager(backend=aer_sim, optimization_level=1)
isa_qc = pm.run(qc)
with Session(backend=aer_sim) as session:
sampler = Sampler(mode=session)
result = sampler.run([isa_qc]).result()Datos del backend
QiskitRuntimeService También dispone de métodos, como backend(), backends(), y least_busy(), que te permiten buscar un backend de destino que se vaya a utilizar. Estos métodos devuelven una o varias IBMBackend instancias que contienen métodos y atributos que describen el backend.
Información complementaria
Inicialización de la cuenta
Debes inicializar tu cuenta antes de poder empezar a utilizar el servicio Qiskit Runtime. Para ello, hay que inicializar una QiskitRuntimeService instancia con las credenciales de tu cuenta. Si no quieres introducir las credenciales cada vez, puedes utilizar el QiskitRuntimeService.save_account() método para guardarlas en el disco.
Qiskit Runtime está disponible en IBM Cloud, y puede especificar el canal con channel="ibm_cloud" o channel="ibm_quantum_platform".
Trabajos en tiempo de ejecución
Cuando se utiliza el run() método de o Estimator para invocar la primitiva, se devuelve una RuntimeJobV2 instancia de Sampler . Esta clase cuenta con todos los métodos básicos de trabajo, como RuntimeJobV2.status(), RuntimeJobV2.result(), y RuntimeJobV2.cancel().
Registro
qiskit-ibm-runtime utiliza el registrador qiskit_ibm_runtime .
Se pueden utilizar dos variables de entorno para controlar el registro:
QISKIT_IBM_RUNTIME_LOG_LEVEL: Especifica el nivel de registro a utilizar.Si se establece un nivel no válido, el nivel de registro por defecto es
WARNING. Los niveles de registro válidos sonDEBUG,INFO,WARNING,ERRORyCRITICAL(sin distinción entre mayúsculas y minúsculas). Si no se establece la variable de entorno, se utiliza el nivel del registrador principal, que también es por defectoWARNING.
QISKIT_IBM_RUNTIME_LOG_FILE: Especifica el nombre del archivo de registro a utilizar. Si se especifica,los mensajes sólo se registrarán en el archivo. De lo contrario, los mensajes se registrarán en el error estándar (normalmente la pantalla).
Para un uso más avanzado, puedes modificar el propio registrador. Por ejemplo, para ajustar manualmente el nivel a WARNING:
import logging
logging.getLogger('qiskit_ibm_runtime').setLevel(logging.WARNING)Clases
QiskitRuntimeService | Clase para interactuar con el servicio Qiskit Runtime. |
Estimator | alias de EstimatorV2 |
EstimatorV2 | Clase para interactuar con el servicio primitivo Qiskit Runtime Estimator. |
Sampler | alias de SamplerV2 |
SamplerV2 | Clase para interactuar con el servicio primitivo Qiskit Runtime Sampler. |
Executor | Clase para correr QuantumProgram\s. |
Session | Clase para crear una sesión Qiskit Runtime. |
Batch | Clase para ejecutar trabajos en modo de ejecución por lotes. |
IBMBackend | Clase de backend que interactúa con un backend de IBM Quantum. |
RuntimeJobV2 | Representación de un tiempo de ejecución V2 ejecución primitiva. |
RuntimeEncoder | Codificador JSON utilizado por el servicio en tiempo de ejecución. |
RuntimeDecoder | Decodificador JSON utilizado por el servicio en tiempo de ejecución. |