Saltar al contenido principal

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:

  1. Si el PUB especifica shots, usar ese valor.
  2. Si el argumento de palabra clave shots está especificado en run, usar ese valor.
  3. Si twirling está habilitado (True por defecto), entonces se usa el producto de num_randomizations y shots_per_randomization, tal como se especifica en las opciones de twirling.
  4. Si sampler.options.default_shots está 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).

nota

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

Documentación de API de default_shots

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)

Documentación de API de max_execution_time

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-runtime v0.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

Recomendaciones