Especificar opciones del estimador
El código de esta página se ha desarrollado teniendo en cuenta los siguientes requisitos. Recomendamos utilizar estas versiones o posteriores.
qiskit[all]~=2.5.0 qiskit-ibm-runtime~=0.47.0
Puedes utilizar las opciones para personalizar la primitiva «Estimator». Aunque la interfaz del método run() de las primitivas es común a todas las implementaciones, sus opciones no lo son. Consulte las referencias de la API para obtener información sobre las opciones qiskit.primitives.BaseEstimatorV2 qiskit_aer.BaseEstimatorV2 y.
Notas:
- Puedes consultar las opciones disponibles y actualizar los valores de las opciones durante o después de la inicialización del Estimador.
- Utiliza el
update()método para aplicar los cambios aloptionsatributo. - Si no se especifica un valor para una opción, se le asigna un valor especial de
Unsety se utilizan los valores predeterminados del servidor. - El
optionsatributo es dedataclasstipo « Python ». Puedes utilizar el método integradoasdictpara convertirlo en un diccionario.
Configurar las opciones del estimador
Puedes configurar las opciones al inicializar Estimator, después de inicializar Estimator o (solo en precision este caso) en el run() método.
Inicialización primitiva
Al inicializar Estimator, puedes pasar una instancia de la clase de opciones o un diccionario, y el programa creará una copia de esas opciones. Por lo tanto, modificar el diccionario original o la instancia de opciones no afecta a las opciones asociadas a la primitiva.
Clase de opciones
Al crear una instancia de la EstimatorV2 clase, puedes pasarle una instancia de la clase de opciones. Esas opciones se aplicarán cuando utilices run() para realizar el cálculo. Especifica las opciones con este formato: options.option.sub-option.sub-sub-option = choice. Por ejemplo: options.dynamical_decoupling.enable = True
Ejemplo:
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit_ibm_runtime.options import EstimatorOptions
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
options = EstimatorOptions(
resilience_level=2,
resilience={"zne_mitigation": True, "zne": {"noise_factors": [1, 3, 5]}},
)
# or...
options = EstimatorOptions()
options.resilience_level = 2
options.resilience.zne_mitigation = True
options.resilience.zne.noise_factors = [1, 3, 5]
estimator = Estimator(mode=backend, options=options)Diccionario
Puedes especificar las opciones en forma de diccionario al inicializar Estimator.
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
# Setting options during initialization
estimator = Estimator(
backend,
options={
"resilience_level": 2,
"resilience": {
"zne_mitigation": True,
"zne": {"noise_factors": [1, 3, 5]},
},
},
)Opciones de actualización tras la inicialización
Puedes especificar las opciones en este formato: estimator.options.option.sub-option.sub-sub-option = choice para aprovechar la función de autocompletado, o utilizar el update() método para realizar actualizaciones masivas.
No es necesario instanciar la clase de EstimatorV2 opciones (EstimatorOptions) si se configuran las opciones tras inicializar el objeto primitivo.
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
estimator = Estimator(mode=backend)
# Setting options after initialization
# This uses auto-complete.
estimator.options.default_precision = 0.01
# This does bulk update.
estimator.options.update(
default_precision=0.02, resilience={"zne_mitigation": True}
)Método Run()
Los únicos valores que se run() pueden pasar son los definidos en la interfaz. Es decir, precision para Estimator. Esto sobrescribe cualquier valor establecido para default_precision en la ejecución actual.
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.quantum_info import SparsePauliOp
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()
observable = SparsePauliOp("Z" * 3)
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)
transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)
isa_observable1 = observable.apply_layout(transpiled1.layout)
isa_observable2 = observable.apply_layout(transpiled2.layout)
estimator = Estimator(mode=backend)
# Default precision to use if not specified in run()
estimator.options.default_precision = 0.01
# Run two circuits, requiring a precision of .02 for both.
estimator.run(
[(transpiled1, isa_observable1), (transpiled2, isa_observable2)],
precision=0.02,
)Output:
<RuntimeJobV2('d9bjitvu62qs738pbiig', 'estimator')>
Caso especial: precisión
El EstimatorV2.run método admite dos argumentos: una lista de PUB, cada uno de los cuales puede especificar un valor de precisión específico de « PUB », y un argumento de palabra clave de precisión. Estos valores de precisión forman parte de la interfaz de ejecución del Estimador y son independientes de las opciones del Estimador en tiempo de ejecución. Tienen prioridad sobre cualquier valor especificado como opción para cumplir con la abstracción del Estimador.
Sin embargo, si no precision se especifica mediante ninguna opción de PUB ni en el argumento de la palabra clave run (o si todos son 0 None), se utiliza el valor de precisión de las opciones, en particular 0.0001 default_precision``.
Estos parámetros de precisión sirven únicamente para especificar la precisión deseada, y no se garantiza que los resultados alcancen la precisión especificada.
Ten en cuenta que las opciones de Estimator incluyen tanto default_shots como default_precision. Sin embargo, dado que la función «gate-twirling» está activada por defecto, el producto de num_randomizations y shots_per_randomization tiene prioridad sobre esas dos opciones.
En concreto, para cualquier Estimator PUB :
- Si el archivo « PUB » especifica la precisión, utilice ese valor.
- Si se especifica el argumento de palabra clave «precision» en
run, utilice ese valor. - Si
twirlingestá habilitado (True por defecto), se utiliza el producto denum_randomizationsyshots_per_randomization, tal y como se especifica en lastwirlingopciones. - Si
estimator.options.default_shotsse especifica, utilice ese valor para controlar la cantidad de datos. - Si
estimator.options.default_precisionse especifica, utilice ese valor.
Por ejemplo, si se especifica la precisión en los cuatro lugares, se utiliza la que tiene mayor prioridad (la precisión especificada en el PUB).
Aunque la precisión especificada en el archivo « PUB » y en run tiene mayor prioridad, el trabajo falla si twirling está activado y el producto de num_randomizations y shots_per_randomization es menor que el número de disparos necesarios para alcanzar dicha precisión. num_randomizationsEn este caso, EstimatorV2 no es posible distribuir los disparos entre los especificados.
La precisión es inversamente proporcional al uso. Es decir, cuanto menor sea la precisión, más tiempo de procesamiento de la QPU se necesitará para ejecutarlo.
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.quantum_info import SparsePauliOp
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
observable = SparsePauliOp("Z" * 3)
circuit = random_iqp(3)
circuit.measure_all()
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)
isa_circuit = pass_manager.run(circuit)
isa_observable = observable.apply_layout(isa_circuit.layout)
# Setting precision during primitive initialization
estimator = Estimator(mode=backend, options={"default_precision": 0.05})
# Run with precision=0.02, overwriting the default.
estimator.run(
[(isa_circuit, isa_observable1)],
precision=0.02,
)Output:
<RuntimeJobV2('d9bjj03v6alc73ct56lg', 'estimator')>
Desactiva todas las funciones de mitigación y supresión de errores
Puedes desactivar todas las funciones de mitigación y supresión de errores si, por ejemplo, estás investigando tus propias técnicas de mitigación. Para ello, configura resilience_level = 0.
Ejemplo:
from qiskit_ibm_runtime import EstimatorV2 as Estimator, QiskitRuntimeService
# Define the service. This allows you to access an IBM QPU.
service = QiskitRuntimeService()
# Get a backend
backend = service.least_busy(operational=True, simulator=False)
# Define Estimator
estimator = Estimator(backend)
options = estimator.options
# Turn off all error mitigation and suppression
options.resilience_level = 0Opciones disponibles
La siguiente tabla recoge las opciones de la última versión de qiskit-ibm-runtime. Para ver versiones anteriores de las opciones, visita la qiskit-ibm-runtime referencia de la API y selecciona una versión anterior.
El número total de disparos que se utilizarán por circuito y por configuración.
Opciones : número entero >= 0
Valor predeterminado : Ninguno
La precisión predeterminada que se utilizará en cualquier llamada a
PUBrun()que no especifique una.Opciones : Float > 0
Valor predeterminado : 0.015625 (1 / √4096)
Controlar los ajustes de mitigación de errores de desacoplamiento dinámico.
dynamical_decouplingDocumentación de la APIOpciones :
True,FalsePor defecto :
FalseOpciones :
middle,edgesPor defecto :
middleOpciones:
asap,alapPredeterminado:alapOpciones:
XX,XpXm,XY4Predeterminado:XXOpciones:
True,FalsePredeterminado:False
environmentDocumentación de la APIFunción invocable que recibe
Job IDyJob result.Opciones : Ninguna
Valor predeterminado : Ninguno
Lista de etiquetas.
Opciones : Ninguna
Valor predeterminado : Ninguno
Opciones : DEBUG, INFO, WARNING, ERROR, CRITICAL
Por defecto : ADVERTENCIA
Opciones :
True,FalsePor defecto :
False
executionDocumentación de la APISi se deben restablecer los qubits al estado fundamental en cada disparo.
Opciones :
True,FalsePor defecto :
TrueEl intervalo de tiempo entre una medición y el circuito cuántico posterior.
Opciones : Valor dentro del rango proporcionado por
backend.rep_delay_rangePor defecto : lo establece
backend.default_rep_delay
Limita la duración de un trabajo, en segundos. Consulte la guía sobre el tiempo máximo de ejecución para obtener más información.
Opciones : número entero de segundos comprendido entre [1 y 10 800]
Valor predeterminado : 10800 (3 horas)
Opciones avanzadas de resiliencia para ajustar con precisión la estrategia de resiliencia.
resilienceDocumentación de la APIOpciones para el aprendizaje del ruido de capa.
Opciones : [lista] de entre 2 y 10 valores comprendidos entre [0 y 200]
Por defecto :
(0, 1, 2, 4, 16, 32)Opciones : Ninguna, número entero >= 1
Por defecto :
4Opciones : número entero >= 1
Por defecto :
32Opciones : número entero >= 1
Por defecto :
128Opciones :
NoiseLearnerResult,Sequence[LayerError]Valor predeterminado : Ninguno
Opciones :
True,FalsePor defecto :
TrueOpciones para el aprendizaje del ruido de medición.
Opciones : número entero >= 1
Por defecto :
32Opciones : Entero,
autoPor defecto :
autoOpciones :
True,FalsePor defecto :
FalseOpciones de mitigación de la cancelación probabilística de errores.
Opciones :
None, número entero >= 1Por defecto :
100Opciones :
auto, número real comprendido entre [0 y 1]Por defecto :
autoOpciones :
True,FalsePor defecto :
FalseOpciones :
gate_folding,gate_folding_front,gate_folding_back,peaPor defecto :
gate_foldingOpciones : Lista de flotadores
Por defecto :
[0, *noise_factors]Opciones : Una o varias de las siguientes:
exponential,linear,double_exponential,polynomial_degree_(1 <= k <= 7),fallbackPor defecto :
(exponential, linear)Opciones : Lista de números flotantes; cada número flotante es mayor o igual a 1
Por defecto :
(1, 1.5, 2)paraPEA, y(1, 3, 5)en los demás casos
¿Qué grado de resiliencia hay que desarrollar frente a los errores? Los niveles más altos generan resultados más precisos, aunque a costa de tiempos de procesamiento más largos. Consulte la sección sobre niveles de resiliencia en el tema «Gestión del ruido» para obtener más información.
Opciones :
0,1,2Por defecto :
1Opciones que se deben pasar al simular un backend
simulatorDocumentación de la APIOpciones : Lista de nombres de puertas básicas a las que se va a desarrollar
Por defecto : el conjunto de todas las puertas básicas compatibles con el simulador Qiskit Aer
Opciones : Lista de interacciones dirigidas entre dos qubits
Valor predeterminado : Ninguno, lo que implica que no hay restricciones de conectividad (conectividad total).
Opciones : Qiskit Aer NoiseModel o su representación
Valor predeterminado : Ninguno
Opciones : Número entero
Valor predeterminado : Ninguno
Opciones de giro
twirlingDocumentación de la APIOpciones : Verdadero, Falso
Valor predeterminado : False
Opciones : Verdadero, Falso
Valor predeterminado : True
Opciones :
auto, número entero >= 1Por defecto :
autoOpciones :
auto, número entero >= 1Por defecto :
autoOpciones :
active,active-circuit,active-accum,allPor defecto :
active-accum
Opciones experimentales, cuando estén disponibles.
Compatibilidad de características
Algunas funciones de tiempo de ejecución no se pueden utilizar conjuntamente en un mismo trabajo. Haga clic en la pestaña correspondiente para ver una lista de las funciones que son incompatibles con la función seleccionada:
Incompatible con:
- Giro de la puerta
- PEA
- Pec
Es posible que no funcione si se utilizan puertas personalizadas. Incompatible con:
- PEA
- Pec
Incompatible con:
- Puertas fraccionarias
- Estiramientos
Otras observaciones:
- La rotación de mediciones solo se puede aplicar a las mediciones de terminales.
- No funciona con enredadores que no sean Clifford.
Incompatible con:
- Puertas fraccionarias
- ZNE con pliegue en forma de puerta
- Pec
Incompatible con:
- Puertas fraccionarias
- ZNE con pliegue en forma de puerta
- PEA
Próximos pasos
- Encontrarás más detalles sobre los
EstimatorV2métodos en la referencia de la API de Estimator. - Decide en qué modo de ejecución quieres ejecutar tu tarea.
- Descubre cómo gestionar el ruido con Estimator.