Introducción a las opciones
Puedes usar opciones para personalizar las primitivas de Qiskit Runtime según tus necesidades.
Estructura
Al llamar a las primitivas, puedes pasar opciones usando una clase de opciones o un diccionario. Las opciones de uso común, como resilience_level, se encuentran en el primer nivel. Otras opciones se agrupan en categorías, como execution. Especifica las opciones en este formato: options.option.sub-option.sub-sub-option = choice. Por ejemplo: options.dynamical_decoupling.enable = True.
Valores predeterminados
Si no especificas un valor para una opción, se le asigna el valor especial Unset y se utilizan los valores predeterminados del servidor. Por lo tanto, el valor predeterminado será el mismo independientemente de la versión de tu código.
Las tablas de la sección "Resumen de clases de opciones" en la guía de "opciones" de cada primitiva listan los valores predeterminados.
Establecer opciones
Las opciones pueden definirse antes de construir una primitiva y pasarse a ella como una instancia de la clase de opciones o un diccionario. La primitiva hace una copia de ellas, lo que significa que modificar el diccionario u la instancia de opciones original no afecta a las opciones que posee la primitiva.
Además, puedes cambiar las opciones después de construir la primitiva. Usa el flujo de trabajo que mejor se adapte a tu aplicación.
- Puedes ver las opciones disponibles durante o después de la inicialización de la primitiva.
- Si no especificas un valor para una opción, se le asigna el valor especial
Unsety se usan los valores predeterminados del servidor. - El atributo
optionses del tipo Pythondataclass. Puedes usar el método integradoasdictpara convertirlo en un diccionario.
Clase options
Al crear una instancia de la clase primitiva, puedes pasar una instancia de la clase options. Esas opciones se aplican cuando usas run() para realizar el cálculo. Especifica las opciones en este formato: options.option.sub-option.sub-sub-option = choice. Por ejemplo: options.dynamical_decoupling.enable = True.
Consulta SamplerOptions o EstimatorOptions para ver todos los detalles de la clase.
El siguiente ejemplo usa la primitiva Estimator, pero la sintaxis para otras primitivas es similar.
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 opciones como un diccionario al inicializar una primitiva.
El siguiente ejemplo usa la primitiva Estimator, pero la sintaxis para otras primitivas es similar.
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]},
},
},
)
Actualizar opciones después de la inicialización
Puedes especificar las opciones en este formato: _primitive_.options.option.sub-option.sub-sub-option = choice para aprovechar el autocompletado, o usar el método update() para realizar actualizaciones en bloque.
No es necesario instanciar la clase de opciones de la primitiva (EstimatorOptions o SamplerOptions) si estás estableciendo opciones después de inicializar la primitiva.
El siguiente ejemplo usa la primitiva Estimator, pero la sintaxis para otras primitivas es similar.
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}
)
Próximos pasos
- Consulta los detalles sobre cómo configurar la supresión de errores y la mitigación de errores.
- Aprende más sobre las opciones de Estimator.
- Aprende más sobre las opciones de Sampler.
- Aprende más sobre las opciones de Executor.