Especificar opciones del Sampler
Versiones de paquetes
El código de esta página fue desarrollado con los siguientes requisitos. Recomendamos usar estas versiones o versiones más recientes.
qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1
Puedes usar opciones para personalizar la primitiva Sampler. Esta sección se centra en cómo especificar las opciones de la primitiva Qiskit Runtime. Aunque la interfaz del método run() de las primitivas es común a todas las implementaciones, sus opciones no lo son. Consulta las referencias de API correspondientes para obtener información sobre las opciones de qiskit.primitives.BackendSamplerV2 y qiskit_aer.primitives.SamplerV2.
Establecer opciones del Sampler
Puedes establecer opciones al inicializar el Sampler, después de inicializarlo, o actualizar las opciones una vez que el Sampler ha sido inicializado. Para instrucciones sobre cómo usar estas técnicas, consulta el tema Introducción a las opciones.
Además, puedes establecer el valor shots en el método run(), como se describe en la siguiente sección.
Método Run()
Los únicos valores que puedes pasar a run() son los definidos en la interfaz, es decir, shots. Esto sobrescribe cualquier valor establecido para default_shots para la ejecución actual.
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)
transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)
sampler = Sampler(mode=backend)
# Default shots to use if not specified in run()
sampler.options.default_shots = 500
# Sample two circuits at 128 shots each.
sampler.run([transpiled1, transpiled2], shots=128)
<RuntimeJobV2('d8286680bvlc73d1vmu0', 'sampler')>
Casos especiales
Shots
El método SamplerV2.run acepta dos argumentos: una lista de PUBs, cada uno de los cuales puede especificar un valor de shots específico del PUB, y un argumento de palabra clave shots. Estos valores de shots forman parte de la interfaz de ejecución del Sampler y son independientes de las opciones del Sampler Runtime. Tienen prioridad sobre cualquier valor especificado como opción para cumplir con la abstracción del Sampler.
Sin embargo, si shots no está especificado por ningún PUB ni en el argumento de palabra clave run (o si todos son None), entonces se usa el valor de shots de las opciones, especialmente default_shots.
En resumen, este es el orden de precedencia para especificar shots en el Sampler, para cualquier PUB particular:
- Si el PUB especifica shots, usar ese valor.
- Si el argumento de palabra clave
shotsestá especificado enrun, usar ese valor. - Si
twirlingestá habilitado (True por defecto), entonces se usa el producto denum_randomizationsyshots_per_randomization, tal como se especifica en las opciones detwirling. - Si
sampler.options.default_shotsestá especificado, usar ese valor.
Por lo tanto, si los shots están especificados en todos los lugares posibles, se usa el de mayor precedencia (shots especificados en el PUB).
Aunque los shots especificados en el PUB y en run tienen mayor precedencia, el trabajo falla si twirling está habilitado y el producto de num_randomizations y shots_per_randomization es menor que el valor de shots. En este escenario, SamplerV2 no puede distribuir los shots entre los num_randomizations especificados.
Ejemplo:
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)
transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)
# Setting shots during primitive initialization
sampler = Sampler(mode=backend, options={"default_shots": 4096})
# Setting options after primitive initialization
# This uses auto-complete.
sampler.options.default_shots = 2000
# This does bulk update. The value for default_shots is overridden
# if you specify shots with run() or in the PUB.
sampler.options.update(
default_shots=1024, dynamical_decoupling={"sequence_type": "XpXm"}
)
# Sample two circuits at 128 shots each.
sampler.run([transpiled1, transpiled2], shots=128)
<RuntimeJobV2('d82868ugbeec73alfa80', 'sampler')>
Opciones disponibles
La siguiente tabla documenta las opciones de la versión más reciente de qiskit-ibm-runtime. Para ver versiones de opciones anteriores, visita la referencia de API de qiskit-ibm-runtime y selecciona una versión anterior.
default_shots
El número total de shots a usar por circuito por configuración.
Opciones: Entero >= 0
Predeterminado: None
dynamical_decoupling
Controla los ajustes de mitigación de errores por desacoplamiento dinámico.
Documentación de API de dynamical_decoupling
dynamical_decoupling.enable
Opciones: True, False
Predeterminado: False
dynamical_decoupling.extra_slack_distribution
Opciones: middle, edges
Predeterminado: middle
dynamical_decoupling.scheduling_method
Opciones: asap, alap
Predeterminado: alap
dynamical_decoupling.sequence_type
Opciones: XX, XpXm, XY4
Predeterminado: XX
dynamical_decoupling.skip_reset_qubits
Opciones: True, False
Predeterminado: False
environment
Documentación de API de environment
environment.job_tags
Lista de etiquetas.
Opciones: None
Predeterminado: None
environment.log_level
Opciones: DEBUG, INFO, WARNING, ERROR, CRITICAL
Predeterminado: WARNING
environment.private
Opciones: True, False
Predeterminado: False
execution
Documentación de API de execution
execution.init_qubits
Si se deben restablecer los qubits al estado base para cada shot.
Opciones: True, False
Predeterminado: True
execution.rep_delay
El retraso entre una medición y el circuito cuántico subsiguiente.
Opciones: Valor en el rango proporcionado por backend.rep_delay_range
Predeterminado: Dado por backend.default_rep_delay
execution.meas_type
Opciones: classified, kerneled, avg_kerneled
Predeterminado: classified
max_execution_time
Limita cuánto tiempo puede ejecutarse un trabajo, en segundos. Consulta la guía de tiempo máximo de ejecución para más detalles.
Opciones: Número entero de segundos en el rango [1, 10800]
Predeterminado: 10800 (3 horas)
simulator
Opciones para pasar al simular un Backend
Documentación de API de simulator
simulator.basis_gates
Opciones: Lista de nombres de puertas base a desplegar
Predeterminado: El conjunto de todas las puertas base admitidas por el simulador Qiskit Aer
simulator.coupling_map
Opciones: Lista de interacciones de dos qubits dirigidas
Predeterminado: None, lo que implica que no hay restricciones de conectividad (conectividad completa).
simulator.noise_model
Opciones: Qiskit Aer NoiseModel, o su representación
Predeterminado: None
simulator.seed_simulator
Opciones: Entero
Predeterminado: None
twirling
Opciones de twirling
Documentación de API de twirling
twirling.enable_gates
Opciones: True, False
Predeterminado: False
twirling.enable_measure
Opciones: True, False
Predeterminado: False
twirling.num_randomizations
Opciones: auto, Entero >= 1
Predeterminado: auto
twirling.shots_per_randomization
Opciones: auto, Entero >= 1
Predeterminado: auto
twirling.strategy
Opciones: active, active-circuit, active-accum, all
Predeterminado: active-accum
experimental
Opciones experimentales, cuando estén disponibles.
Compatibilidad de funciones
Ciertas funciones de runtime no pueden usarse juntas en un mismo trabajo. Haz clic en la pestaña correspondiente para obtener una lista de funciones incompatibles con la función seleccionada:
Circuitos dinámicos
Incompatible con:
- Desacoplamiento dinámico
Otras notas:
- El twirling de puertas puede aplicarse a circuitos dinámicos, pero solo a puertas que no estén dentro de bloques condicionales. El twirling de medición solo puede aplicarse a mediciones terminales.
- Compatible con puertas fraccionarias cuando se usa
qiskit-ibm-runtimev0.42.0 o posterior.
Desacoplamiento dinámico
Incompatible con:
- Circuitos dinámicos
Puertas fraccionarias
Incompatible con:
- Twirling de puertas
Compatible con circuitos dinámicos cuando se usa qiskit-ibm-runtime v0.42.0 o posterior.
Twirling de puertas
Incompatible con:
- Puertas fraccionarias
- Estiramientos
Otras notas:
- El twirling de puertas puede aplicarse a circuitos dinámicos, pero solo a puertas que no estén dentro de bloques condicionales.
- El twirling de medición solo puede aplicarse a mediciones terminales.
- El twirling de medición es incompatible con la instrucción
store. - No funciona con entrelazadores no-Clifford.
Próximos pasos
- Revisa la guía Introducción a las opciones.
- Encuentra más detalles sobre los métodos de
SamplerV2en la referencia de API de Sampler. - Decide en qué modo de ejecución ejecutar tu trabajo.
- Aprende sobre la gestión del ruido con Sampler.