Configurar la gestión de ruido con Estimator
Versiones de paquetes
El código de esta página fue desarrollado con los siguientes requisitos. Recomendamos usar estas versiones o más recientes.
qiskit-ibm-runtime~=0.47.0
Hay varias formas de gestionar el ruido, generalmente usando diversas técnicas de mitigación y supresión de errores para evitar errores antes de que ocurran. Estas técnicas suelen generar una sobrecarga de preprocesamiento. Por ello, es importante lograr un equilibrio entre perfeccionar los resultados y garantizar que el trabajo se complete en un tiempo razonable.
Estimator admite las siguientes técnicas de gestión de ruido. Consulta Técnicas de mitigación y supresión de errores para ver una explicación de cada una. Consulta la sección Configuración personalizada de gestión de ruido para ver un ejemplo de cómo habilitar estas técnicas.
Desacoplamiento dinámico
Cómo habilitarlo: options.dynamical_decoupling.enable = True
Referencia de la API: DynamicalDecouplingOptions
Opciones destacadas: sequence_type
Pauli twirling
Cómo habilitarlo: options.twirling.enable_gates = True
Referencia de la API: TwirlingOptions
Opciones destacadas: num_randomizations, shots_per_randomization
TREX
Cómo habilitarlo: options.resilience.measure_mitigation = True
Referencia de la API: MeasureNoiseLearningOptions
Opciones destacadas:
ZNE
Cómo habilitarlo: options.resilience.zne_mitigation = True
Referencia de la API: ZneOptions
Opciones destacadas: noise_factors, extrapolator
PEA
Cómo habilitarlo: (también debes habilitar ZNE) options.resilience.zne_mitigation = True y options.resilience.zne.amplifier = "pea"
Referencia de la API: ZneOptions
Opciones destacadas: noise_factors, extrapolator
PEC
Cómo habilitarlo: options.resilience.pec_mitigation = True
Referencia de la API: PecOptions
Opciones destacadas: max_overhead
Nivel de resiliencia
El resilience_level especifica cuánta resiliencia se debe construir frente a los errores. Los niveles más altos generan resultados más precisos, a costa de tiempos de procesamiento más largos. Los niveles de resiliencia se pueden usar para configurar el equilibrio costo/precisión al aplicar la gestión de ruido a tu consulta primitiva. La gestión de ruido reduce los errores (sesgo) en los resultados procesando las salidas de una colección, o conjunto, de circuits relacionados. El grado de reducción de errores depende del método aplicado. El nivel de resiliencia abstrae la elección detallada del método de gestión de ruido para permitir a los usuarios razonar sobre el equilibrio costo/precisión que es apropiado para su aplicación.
Dado esto, cada nivel corresponde a un método o métodos con nivel creciente de sobrecarga de muestreo cuántico para permitirte experimentar con diferentes compensaciones tiempo-precisión. La siguiente tabla muestra qué niveles y métodos correspondientes están disponibles para cada uno de los primitivos.
| Nivel de resiliencia | Descripción | Técnica |
|---|---|---|
| 0 | Sin mitigación | Ninguna |
| 1 [Predeterminado] | Costos mínimos de mitigación: Mitiga el error asociado con errores de lectura | Twirling de medición Twirled Readout Error eXtinction (TREX) |
| 2 | Costos de mitigación medios. Típicamente reduce el sesgo en los estimadores, pero no está garantizado que sea de sesgo cero. | Nivel 1 + Zero Noise Extrapolation (ZNE) y gate twirling |
Los niveles de resiliencia se encuentran actualmente en beta, por lo que la sobrecarga de muestreo y la calidad de la solución variarán de circuit a circuit. Las nuevas funciones, opciones avanzadas y herramientas de gestión se lanzarán de forma continua. No se garantiza que se apliquen métodos específicos de gestión de ruido en cada nivel de resiliencia.
Configurar Estimator con niveles de resiliencia
Puedes usar los niveles de resiliencia para especificar técnicas de gestión de ruido, o puedes establecer técnicas personalizadas individualmente como se describe en Configuración de gestión de ruido personalizada.
Cualquier opción que especifiques manualmente además del nivel de resiliencia se aplica en adición al conjunto base de opciones definido por el nivel de resiliencia. Por lo tanto, en principio, podrías establecer el nivel de resiliencia en 1, pero luego desactivar la mitigación de medición, aunque esto no es aconsejable.
Por ejemplo, establecer el nivel de resiliencia en 0 desactiva zne_mitigation, pero estimator.options.resilience.zne_mitigation = True anula ese valor.
Ejemplo
El siguiente código habilita ZNE, TREX y gate twirling estableciendo resilience_level 2.
# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util
_needed = {"qiskit_ibm_runtime": "qiskit-ibm-runtime"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
from qiskit_ibm_runtime import QiskitRuntimeService
# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator
# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import Estimator
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
# Setting options during primitive initialization
estimator = Estimator(backend, options={"resilience_level": 2})
Configuración personalizada de gestión de ruido
Puedes activar y desactivar métodos individuales de gestión de ruido usando las opciones de Estimator.
- No todas las opciones funcionan juntas en todos los tipos de circuitos. Consulta la tabla de compatibilidad de funciones para más detalles.
- Si usas el nuevo Estimator del lado del cliente introducido en
qiskit-ibm-runtimev0.50.0, se requiere un trabajo de aprendizaje de ruido por separado para usar PEA y PEC. Consulta Migrar de Sampler y Estimator del lado del servidor a los del lado del cliente para más información.
Ejemplo completo con varias opciones
from qiskit_ibm_runtime import QiskitRuntimeService
# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator
# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import Estimator
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
estimator = Estimator(backend)
options = estimator.options
# Turn on gate twirling.
options.twirling.enable_gates = True
# Turn on measurement error mitigation.
options.resilience.measure_mitigation = True
print(
f">>> gate twirling is turned on: {estimator.options.twirling.enable_gates}"
)
print(
f">>> measurement error mitigation is turned on: "
f"{estimator.options.twirling.enable_gates}"
)
>>> gate twirling is turned on: True
>>> measurement error mitigation is turned on: True
Desactivar toda la mitigación de errores
Para ver instrucciones sobre cómo desactivar toda la mitigación de errores, consulta la sección Desactivar toda la supresión y mitigación de errores en la guía de opciones de Estimator.
Próximos pasos
- Trabaja con un ejemplo que usa mitigación de errores en la lección de función de costo en IBM Quantum Learning.
- Aprende más sobre técnicas de mitigación y supresión de errores.
- Explora las opciones de Estimator.
- Decide en qué modo de ejecución ejecutar tu trabajo.