Saltar al contenido principal

Introducción a la transpilación

Una visión general de la transpilación y las herramientas relevantes para utilizarla, ya sea localmente o en la nube.

La transpilación es el proceso de reescribir un circuito de entrada dado para que coincida con la topología de un dispositivo cuántico específico, y optimizar las instrucciones del circuito para su ejecución en computadoras cuánticas con ruido. Esta documentación cubre las herramientas y los flujos de trabajo para la transpilación local disponibles para todos los usuarios de Qiskit, así como para el Servicio de Transpilación de Qiskit basado en la nube, disponible para los usuarios de los planes Premium, Flex y On-Prem (a través de la API de IBM Quantum Platform). Si estás usando primitivas y solo te interesan las opciones de transpilación predeterminadas del servicio Qiskit Runtime, lee el tema Configurar la compilación en tiempo de ejecución para Qiskit Runtime.

El proceso de transpilación toma un circuito que contiene tus instrucciones:

Un circuito cuántico de dos qubits que contiene una puerta Hadamard y dos puertas CNOT.

La transpilación lo transforma para que solo se utilicen las instrucciones disponibles en un backend elegido, y optimiza esas instrucciones para minimizar los efectos del ruido:

El mismo circuito cuántico de dos qubits después de la transpilación. Contiene puertas RZ, X, SX y ECR.


El transpilador es un componente central del SDK de Qiskit, diseñado para ser modular y extensible. Su uso principal es escribir nuevas transformaciones de circuitos (conocidas como passes del transpilador), y combinarlas con otros passes existentes, reduciendo considerablemente la profundidad y la complejidad de los circuitos cuánticos. Los passes que se encadenan y el orden en que se ejecutan tienen un efecto importante en el resultado final. Esta canalización está determinada por los objetos PassManager y StagedPassManager. El StagedPassManager orquesta la ejecución de uno o más PassManagers y determina el orden en que se ejecutan, mientras que el objeto PassManager es simplemente una colección de uno o más passes. Piensa en el StagedPassManager como el director de una orquesta, en los PassManagers como las distintas secciones de instrumentos y en los objetos Pass como los músicos individuales. De esta forma, puedes componer circuitos cuánticos eficientes en hardware que te permitan ejecutar trabajos a escala utilitaria manteniendo el ruido bajo control.

Encuentra más información sobre las etapas del pass manager en el tema Etapas del transpilador.

Arquitectura del conjunto de instrucciones

Además de reducir la profundidad y la complejidad de los circuitos cuánticos, el transpilador está diseñado para transformar las instrucciones contenidas en un QuantumCircuit dado para que obedezcan la Arquitectura del Conjunto de Instrucciones (ISA) de un backend particular. Los circuitos que obedecen la ISA consisten únicamente en instrucciones compatibles con el Target del backend, como las puertas base disponibles del hardware, las mediciones, los reinicios y las operaciones de flujo de control, y cumplen con las restricciones especificadas por la conectividad del hardware, es decir, el CouplingMap del target. Al enviar un trabajo a un backend de IBM Quantum®, los circuitos deben adherirse a la ISA del backend.

Etapas del transpilador

La canalización de transpilación preintegrada de Qiskit consta de seis etapas fundamentales:

  1. init - Este pass ejecuta cualquier pass inicial requerido antes de que el circuito pueda ser embebido. Esto normalmente implica desarrollar instrucciones personalizadas y convertir el circuito a puertas de uno y dos qubits. De forma predeterminada, valida las instrucciones del circuito y traduce las puertas de múltiples qubits a puertas de uno y dos qubits.
  2. layout - Este pass aplica un layout, mapeando los qubits virtuales de tu circuito a los qubits físicos de la QPU.
  3. routing - Este pass se ejecuta después de aplicar un layout e inyectará puertas (es decir, SWAPs) en el circuito original para hacerlo compatible con la conectividad de la QPU (mapa de acoplamiento).
  4. translation - Este pass traduce las puertas del circuito al conjunto base de instrucciones de la QPU.
  5. optimization - Este pass ejecuta un bucle de optimización para encontrar descomposiciones más eficientes del circuito cuántico hasta que se cumpla una condición (como una profundidad fija).
  6. scheduling - Esta etapa es para cualquier pass de planificación con conciencia del hardware. Si el usuario especifica un método de planificación, esta etapa tiene en cuenta todo el tiempo de inactividad del circuito.

Si personalizas un flujo de transpilación, usa estas etapas como guía durante el desarrollo.

Transpilar con pass managers

La forma recomendada de transpilar un circuito es crear un staged pass manager y luego ejecutar su método run con tu circuito como entrada. Puedes usar la función generate_preset_pass_manager para generar un staged pass manager con valores predeterminados razonables.

Los usuarios más avanzados pueden personalizar un conjunto de objetos PassManager y StagedPassManager y determinar el orden en que se ejecuta cada etapa. Esto puede cambiar drásticamente el circuito de salida final. De hecho, un enfoque personalizado para transpilar un algoritmo cuántico a menudo produce una supresión de errores más eficiente que el enfoque predeterminado. Un enfoque personalizado implica reescribir circuitos cuánticos para que se ajusten a las restricciones del hardware y suprimir los efectos del ruido. El flujo de lógica de esta cadena de herramientas es personalizable y no necesita ser lineal. El proceso de transpilación puede preparar bucles iterativos, ramas condicionales y otros comportamientos complejos. Un buen punto de partida al desarrollar un conjunto de passes personalizados es examinar la secuencia predeterminada de transformaciones.

Para obtener una descripción general de la transpilación con pass managers, consulta Transpilar con pass managers.

Transpilación predeterminada

Para una forma más sencilla, aunque menos personalizable, de usar el transpilador «de serie», utiliza la función qiskit.compiler.transpile. Esta genera y ejecuta uno de los objetos StagedPassManager preestablecidos basándose, entre otras opciones, en un indicador optimization_level que puede establecerse en 0, 1, 2 o 3. Los niveles más altos generan circuitos más optimizados a costa de tiempos de transpilación más largos.

Próximos pasos

Recomendaciones