Skip to main content
IBM Quantum Platform

Introducción a la transpilación

Una visión general de la transpilación y las herramientas pertinentes que se pueden utilizar, ya sea localmente o en la nube.

La transpilación es el proceso de reescribir un circuito de entrada determinado para adaptarlo a la topología de un dispositivo cuántico específico y optimizar las instrucciones del circuito para su ejecución en ordenadores cuánticos con ruido. Esta documentación describe las herramientas y los flujos de trabajo para la transpilación local a disposición de todos los usuarios de Qiskit. Si utilizas primitivas y solo te interesan las opciones de transpilación predeterminadas que ofrece el servicio Qiskit Runtime, consulta el tema «Configurar la compilación en tiempo de ejecución para Qiskit Runtime ».

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

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

A continuación, la transpilación la transforma de modo que sólo 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.
Circuito cuántico después de la transpilación

Componente central del SDK de Qiskit, el transpilador está diseñado para ser modular y extensible. Su principal utilidad es escribir nuevas transformaciones de circuitos (conocidas como pases transpiladores) y combinarlas con otros pases ya existentes, lo que reduce enormemente la profundidad y complejidad de los circuitos cuánticos. Qué pases se encadenan y en qué orden tiene un efecto importante en el resultado final. Esta tubería está determinada por el PassManager y StagedPassManager objetos. 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 pases. Piense en StagedPassManager como el director de una orquesta, en PassManagers como las distintas secciones de instrumentos y en los objetos de Pass como cada uno de los músicos. De este modo, se pueden componer circuitos cuánticos eficientes desde el punto de vista del hardware que permitan ejecutar trabajos a gran escala manteniendo un ruido manejable.

Encontrará más información sobre las etapas del gestor de pases en el tema Etapas del transpilador.


Arquitectura del conjunto de instrucciones

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


Etapas del transpilador

El transpilador de Qiskit consta de seis etapas fundamentales:

  1. init - En este paso se ejecutan los pases iniciales que sean necesarios antes de poder incrustar el circuito. Esto suele implicar desenrollar instrucciones personalizadas y convertir el circuito a todas las puertas de uno y dos qubits. Por defecto, valida las instrucciones del circuito y traduce las puertas multi-qubit en puertas de uno y dos qubits.
  2. layout - Este paso aplica un diseño, mapeando los qubits virtuales de tu circuito a los qubits físicos de la QPU.
  3. routing - Este paso se ejecuta después de que se haya aplicado un diseño 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 paso traduce las puertas del circuito al conjunto básico de instrucciones de la QPU.
  5. optimization - Este paso 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 pase de programación consciente del hardware. Si el usuario especifica un método de programación, esta etapa contabiliza todos los tiempos muertos del circuito.

Si personaliza un flujo de trabajo de transpilación, utilice estas etapas como guía durante el desarrollo.


Transpilar con gestores de pasos

La forma recomendada de transpilar un circuito es crear un gestor de pasadas por etapas y luego ejecutar su método run con tu circuito como entrada. Puede utilizar la función generate_preset_pass_manager para generar un gestor de pases por etapas con valores predeterminados razonables.

Los usuarios más avanzados pueden personalizar un conjunto de objetos de PassManager y StagedPassManager y determinar el orden de ejecución de 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 por defecto. Un enfoque personalizado consiste en reescribir los circuitos cuánticos para adaptarlos a las limitaciones del hardware y suprimir los efectos del ruido. El flujo lógico de esta cadena de herramientas es personalizable y no tiene por qué ser lineal. El proceso de transpilación puede preparar bucles iterativos, ramas condicionales y otros comportamientos complejos. Un buen punto de partida para desarrollar un conjunto de pases personalizados es examinar la secuencia predeterminada de transformaciones.

Para obtener una descripción general de la transpilación mediante administradores de pases, consulte Transpilación con administradores de pases.


Transpilación predeterminada

Para utilizar el transpilador de una forma más sencilla, pero menos personalizable, utilice la qiskit.compiler.transpile función. Esto genera y ejecuta uno de los objetos StagedPassManager preestablecidos basándose, entre otras opciones, en un optimization_level indicador 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
¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.