Saltar al contenido principal
Este proyecto está en fase beta. ¿Encontraste un error? Abre un issue en GitHub. ¿Tienes una pregunta o una idea? Pregunta en Discussions — ¡nos encantaría tu opinión!
¿Cómo es la calidad de la traducción en esta página?

Instrucciones con calibración especial

De forma predeterminada, las puertas cuánticas y las operaciones de lectura de los ordenadores cuánticos de IBM® están calibradas para ofrecer un rendimiento óptimo en casos de uso generales. Sin embargo, algunas cargas de trabajo se benefician de instrucciones cuyos parámetros están ajustados de otra manera. Por ejemplo, MidCircuitMeasure (measure_2) es una operación de lectura diseñada para mediciones en mitad de un circuito, y las puertas cz más lentas pueden mejorar los resultados de algunos flujos de trabajo de mitigación de errores.

Las instrucciones con calibración especial vienen en dos formas, y se accede a ellas de manera diferente:

  • Las instrucciones con firmas distintas se calibran junto con las instrucciones estándar en la calibración predeterminada, por lo que las añades a tus circuitos como cualquier otra instrucción. Normalmente se identifican por un sufijo, como measure_2.

  • Las calibraciones alternativas reemplazan partes de la calibración predeterminada con parámetros ajustados de otra manera. Seleccionas una pasando un calibration_id al obtener el backend.

Para saber cómo se calibran los ordenadores cuánticos de IBM, consulta Monitorizar, calibrar y evaluar el rendimiento.

Instrucciones con firmas distintas​

Estas instrucciones se calibran junto con el conjunto de instrucciones estándar, por lo que no necesitas hacer nada especial para obtener un backend que las admita. Para usar una, añade a tu circuito la instrucción correspondiente de qiskit-ibm-runtime.

InstrucciónDescripciónCaso de uso típicoUso en QiskitFamilia de procesadores
measure_2Pulso de medición más cortoMediciones a mitad de circuitoMidCircuitMeasure (v0.43.0 o posterior)Heron, Nighthawk r2
reset_2Pulso de reinicio condicional más corto que usa measure_2Reinicio de qubits a mitad de circuitoMidCircuitReset (v0.49.0 o posterior)Heron
measure_resetMedición como measure que además reinicia el qubit*Medir y reiniciar un qubitMeasureReset (v0.50.0 o posterior)Heron, Nighthawk r2
measure_reset_2Medición más corta como measure_2 que además reinicia el qubit*Medir y reiniciar un qubit a mitad de circuitoInicializa MeasureReset con name="measure_reset_2" (v0.50.0 o posterior)Heron, Nighthawk r2
xslowPuerta de inversión de bit (X) con una duración extendidaPostselección y mitigación de errores. Es el valor predeterminado de la opción x_pulse_type en los pases de postselecciónTodas

. | XSlowGate (v0.50.0 o posterior) | Todas |

* En los procesadores Heron, el reinicio depende del resultado de la medición. En los procesadores Nighthawk r2, el reinicio es incondicional.

Como estas instrucciones no son compatibles con todos los backends, comprueba las instrucciones admitidas por el backend antes de usarlas:

from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()
backend = service.backend("<backend_name>")

print(backend.supported_instructions)

Para encontrar todos los backends que admiten una instrucción, usa:

service = QiskitRuntimeService()
backends = service.backends(filters=lambda b: "<instruction>" in b.supported_instructions)

Usa instruction_signatures para ver las firmas de estas instrucciones con calibración especial:

print(backend.configuration().instruction_signatures)

Calibraciones alternativas​

Las calibraciones alternativas reemplazan partes de la calibración predeterminada con parámetros ajustados de otra manera. Cada calibración alternativa tiene un ID de calibración, y su disponibilidad depende de la QPU.

Para usar una calibración alternativa, pasa su calibration_id al obtener el backend. El target del backend y, por lo tanto, el transpilador, usan las propiedades de instrucción de esa calibración, y los jobs de primitivas que ejecutes en el backend se ejecutan con ella.

from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()
backend = service.backend("<backend_name>", calibration_id="<calibration_id>")

print(backend.calibration_id)
nota

Las calibraciones alternativas no están disponibles en todas las QPU.

Calibraciones de puertas lentas​

Las calibraciones de puertas lentas ajustan la puerta cz para que sea más lenta que en la calibración predeterminada. Las puertas cz más lentas pueden mejorar el rendimiento de los flujos de trabajo de estimación de observables a gran escala con mitigación de errores, pero también aumentan la duración total de tu circuito, lo que provoca algo de decoherencia adicional.

En los procesadores Heron, las calibraciones de puertas lentas también están disponibles con dos modos de control del sesgo de sistemas de dos niveles (TLS):

  • Sesgo TLS de DC está optimizado para obtener el mejor rendimiento instantáneo. La calibración predeterminada usa sesgo TLS de DC.

  • Sesgo TLS de AC modula el sesgo TLS para estabilizar los errores del dispositivo a lo largo del tiempo, lo que mantiene estable el modelo de ruido del dispositivo durante flujos de trabajo prolongados. Consulta "Noise stabilization" en Observable Estimation in the Absence of Classical Verification para más detalles.

Los procesadores Nighthawk no usan sesgo TLS, por lo que tienen una única calibración de puertas lentas.

ID de calibraciónFamilia de procesadoresSesgo TLSRecomendado para
Ninguno (calibración predeterminada)TodasDC (Heron)Uso general. Especialmente recomendado para cargas de trabajo cuyas cadenas de bits pueden destilarse de forma clásica, como los circuitos con picos y los flujos de trabajo de SQD o SKQD, y para cargas de trabajo con detección de errores.
slow_gates_dcHeronDCFlujos de trabajo de estimación de observables a gran escala, especialmente los que usan mitigación de errores heurística como la extrapolación a ruido cero (ZNE).
slow_gates_acHeronACFlujos de trabajo que requieren tasas de error estables durante sesiones largas. Muy recomendado para flujos de trabajo que implican aprendizaje de ruido, como la amplificación probabilística de errores (PEA) y la cancelación probabilística de errores (PEC).
slow_gatesNighthawkNo aplicableFlujos de trabajo de estimación de observables que usan mitigación de errores, como ZNE, PEA y PEC.

Por ejemplo:

from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()
# On a Heron QPU
backend = service.backend("ibm_kingston", calibration_id="slow_gates_ac")
# backend = service.backend("ibm_kingston", calibration_id="slow_gates_dc")

# On a Nighthawk QPU
backend = service.backend("ibm_phoenix", calibration_id="slow_gates")
consejo

Cuando uses slow_gates_ac, envía todos los jobs del flujo de trabajo a una única sesión para que se ejecuten mientras el ruido del dispositivo se mantiene estable.

Comprobar las duraciones de las puertas​

Como las calibraciones de puertas lentas aumentan las duraciones de la puerta cz, compara las duraciones con la calibración predeterminada para entender el efecto en tu circuito. Usa el target del backend para encontrar la duración, en segundos, de la puerta cz en un par específico de qubits:

default_backend = service.backend("<backend_name>")
slow_backend = service.backend(
"<backend_name>", calibration_id="slow_gates_ac"
) # Or slow_gates_dc, or slow_gates on Nighthawk

qubits = (0, 1) # Replace with a connected qubit pair on the backend
print(default_backend.target["cz"][qubits].duration)
print(slow_backend.target["cz"][qubits].duration)

Como el target refleja la calibración seleccionada, transpila tus circuitos con el backend que use el mismo calibration_id con el que planeas ejecutar.

Próximos pasos​

Recomendaciones