Skip to main content
IBM Quantum Platform

Configuración predeterminada y opciones de configuración de Transpilation

  • El código de esta página se ha desarrollado teniendo en cuenta los siguientes requisitos. Recomendamos utilizar estas versiones o versiones más recientes.

    qiskit[all]~=2.5.0
    qiskit-ibm-runtime~=0.47.0
    

Los circuitos abstractos deben transpilarse porque las QPU tienen un conjunto limitado de puertas base y no pueden ejecutar operaciones arbitrarias. La función del transpilador es cambiar circuitos arbitrarios para que puedan ejecutarse en una QPU especificada. Para ello, se traducen los circuitos a las puertas base compatibles y se introducen las puertas SWAP necesarias para que la conectividad del circuito coincida con la de la QPU.

Como se explica en Transpile con administradores de pases, puede crear un administrador de pases usando el generate_preset_pass_manager función y pasa un circuito o lista de circuitos a su método de ejecución para transpilarlos. Puede llamar a generate_preset_pass_manager pasando sólo el nivel de optimización y el backend, eligiendo utilizar los valores por defecto para el resto de opciones, o puede pasar argumentos adicionales a la función para afinar la transpilación.


Uso básico sin parámetros

En este ejemplo, pasamos un circuito y una QPU de destino al transpilador sin especificar más parámetros.

Crea un circuito y visualiza el resultado:

from qiskit import QuantumCircuit
from qiskit.circuit.library import grover_operator, DiagonalGate
from qiskit_ibm_runtime.fake_provider import FakeSherbrooke

# Create circuit to test transpiler on
oracle = DiagonalGate([1] * 7 + [-1])
qc = QuantumCircuit(3)
qc.h([0, 1, 2])
qc = qc.compose(grover_operator(oracle))

# Add measurements to the circuit
qc.measure_all()

# View the circuit
qc.draw(output="mpl")

Output:

Output of the previous code cell

Transpila el circuito y visualiza el resultado:

from qiskit.transpiler import generate_preset_pass_manager

# Specify the QPU to target
backend = FakeSherbrooke()

# Transpile the circuit
pass_manager = generate_preset_pass_manager(
    optimization_level=1, backend=backend
)
transpiled_circ = pass_manager.run(qc)

# View the transpiled circuit
transpiled_circ.draw(output="mpl", idle_wires=False)

Output:

Output of the previous code cell

Todos los parámetros disponibles

A continuación se indican todos los parámetros disponibles para la función generate_preset_pass_manager función. Hay dos clases de argumentos: los que describen el objetivo de la compilación y los que influyen en el funcionamiento del transpilador.

Todos los parámetros, excepto optimization_level , son opcionales. Para más información, consulte la documentación de la API Transpiler.

  • optimization_level (int) - Cuánta optimización realizar en los circuitos. Número entero en el rango (0 - 3). Los niveles más altos generan circuitos más optimizados, a costa de un mayor tiempo de transpilación. Consulte Establecer el nivel de optimización del transpilador para obtener más detalles.

Parámetros utilizados para describir el objetivo de compilación:

Estos argumentos describen la QPU de destino para la ejecución del circuito, incluyendo información como el mapa de acoplamiento de la QPU (que describe la conectividad de los qubits), las puertas base soportadas por la QPU y las tasas de error de las puertas.

Muchos de estos parámetros se describen detalladamente en Parámetros de uso común para la transpilación.

  • Parámetros de backend - Si especifica backend, no necesita especificar target ni ninguna otra opción de backend. Del mismo modo, si especifica target, no necesita especificar backend ni ninguna otra opción de backend.

    • backend (Backend) - Si se establece, el transpilador compila el circuito de entrada a este dispositivo. Si se establece cualquier otra opción que afecte a estos ajustes, como coupling_map, anula los ajustes de backend.
    • target (Objetivo) - Un objetivo de transpilador backend. Normalmente se especifica como parte del argumento backend, pero si ha construido manualmente un objeto Target, puede especificarlo aquí. Esto anula el objetivo de backend.
    • backend_properties ( BackendProperties ) - Propiedades devueltas por una QPU, incluyendo información sobre errores de puerta, errores de lectura, tiempos de coherencia de qubits, etc. Encuentra una QPU que proporcione esta información ejecutando backend.properties().
    • timing_constraints (Dictstr[, int] | None) - Una restricción opcional de hardware de control en la resolución de tiempo de instrucción. Esta información la proporciona la configuración de la QPU. Si la QPU no tiene ninguna restricción en la asignación del tiempo de instrucción, timing_constraints es None y no se realiza ningún ajuste. Una QPU podría informar de un conjunto de restricciones, a saber:
      • granularity: Un valor entero que representa la resolución mínima de la puerta de impulsos en unidades de dt. Una puerta de impulsos definida por el usuario debe tener una duración que sea múltiplo de este valor de granularidad.
      • min_length: Un valor entero que representa la longitud mínima de la puerta de impulsos en unidades de dt. Una puerta de impulsos definida por el usuario debe ser más larga que esta longitud.
      • pulse_alignment: Un valor entero que representa una resolución temporal del tiempo de inicio de la instrucción de puerta. Las instrucciones de puerta deben comenzar a una hora que sea múltiplo de este valor.
      • acquire_alignment: Un valor entero que representa una resolución temporal de la hora de inicio de la instrucción de medida. La instrucción de medida debe comenzar a una hora que sea múltiplo de este valor.
    • basis_gates ( [Liststr] | None) - Lista de nombres de puertas base a las que desenrollar. Por ejemplo [, ' u1 ', ' u2 ', ' u3 ', 'cx']. Si None, no desenrolle.
    • coupling_map ( CouplingMap | List[ [Listint] ]) - Mapa de acoplamiento dirigido (posiblemente personalizado) al objetivo en el mapeo. Si el mapa de acoplamiento es simétrico, es necesario especificar ambas direcciones. Estos formatos son compatibles:
      • CouplingMap instancia
      • Lista - debe darse como una matriz de adyacencia, donde cada entrada especifica todas las interacciones dirigidas de dos qubits soportadas por la QPU. Por ejemplo: [[0, 1], [0, 3], [1, 2], [1, 5], [2, 5], [4, 1], [5, 3] ]
    • inst_map ( [ListInstructionScheduleMap] | None) - Asignación de operaciones de circuito a programas de pulsos. Si None, se utiliza el instruction_schedule_map de la QPU.

Parámetros utilizados para influir en el funcionamiento del transpilador

Estos parámetros influyen en etapas específicas de la transpilación. Algunas de ellas pueden afectar a varias etapas, pero sólo se han incluido en una etapa para simplificar. Si especifica un argumento, como initial_layout para los qubits que desea utilizar, ese valor anula todos los pases que podrían cambiarlo. En otras palabras, el transpilador no cambiará nada de lo que especifiques manualmente. Para obtener más información sobre etapas concretas, consulte Etapas del transpilador.

    • hls_config (HLSConfig) - Una clase de configuración opcional HLSConfig que se pasa directamente a la pasada de transformación HighLevelSynthesis . Esta clase de configuración permite especificar las listas de algoritmos de síntesis y sus parámetros para varios objetos de alto nivel.
    • init_method (str) - El nombre del plugin a utilizar para la etapa de inicialización. Por defecto, no se utiliza un plugin externo. Puede ver una lista de los plugins instalados ejecutando list_stage_plugins() con init como argumento.
    • unitary_synthesis_method (str) - El nombre del método de síntesis unitaria a utilizar. Por defecto, se utiliza default . Puede ver una lista de los plugins instalados ejecutando unitary_synthesis_plugin_names().
    • unitary_synthesis_plugin_config (dict) - Un diccionario de configuración opcional que se pasa directamente al plugin de síntesis unitaria. Por defecto, este ajuste no tiene ningún efecto porque el método de síntesis unitaria por defecto no toma configuración personalizada. La aplicación de una configuración personalizada sólo debería ser necesaria cuando se especifica un plugin de síntesis unitaria con el argumento unitary_synthesis . Como esto es algo personalizado para cada plugin de síntesis unitaria, consulte la documentación del plugin para saber cómo utilizar esta opción.
    • initial_layout (Diseño | Diccionario | Lista) - Posición inicial de los qubits virtuales en los qubits físicos. Si este diseño hace que el circuito sea compatible con las coupling_map restricciones, se utilizará. No se garantiza que el diseño final sea el mismo, ya que el transpilador podría permutar los qubits mediante intercambios u otros medios. Para obtener más información, consulte la sección Diseño inicial.
    • layout_method (str) - Nombre del pase de selección de diseño (default, dense, sabre, y trivial). Este también puede ser el nombre del plugin externo a utilizar para la etapa de diseño. Puede ver una lista de los plugins instalados ejecutando list_stage_plugins() con layout como argumento stage_name . El valor por defecto es sabre.
    • routing_method (str) - Nombre del pase de enrutamiento (basic, lookahead, default, sabre, o none). También puede ser el nombre del plugin externo a utilizar para la etapa de enrutamiento. Puede ver una lista de los plugins instalados ejecutando list_stage_plugins() con routing como argumento stage_name . El valor por defecto es sabre.
    • translation_method (str) - Nombre del paso de traducción (default, synthesis, translator, ibm_backend, ibm_dynamic_circuits, ibm_fractional) También puede ser el nombre del plugin externo a utilizar para la etapa de traducción. Puede ver una lista de los plugins instalados ejecutando list_stage_plugins() con translation como argumento stage_name . El valor predeterminado es translator.
    • approximation_degree (float, en el rango 0-1 | Ninguno) - Dial heurístico utilizado para la aproximación del circuito ( 1.0 = ninguna aproximación, 0.0 = máxima aproximación). El valor por defecto es 1.0. Especificando None se establece el grado de aproximación a la tasa de error informada. Consulte la sección Grado de aproximación para obtener más detalles.
    • optimization_method (str) - El nombre del plugin a utilizar para la etapa de optimización. Por defecto no se utiliza un plugin externo. Puede ver una lista de los plugins instalados ejecutando list_stage_plugins() con optimization como argumento stage_name .
    • scheduling_method (str) - Nombre del pase de programación. También puede ser el nombre del plugin externo que se utilizará para la fase de programación. Puede ver una lista de los plugins instalados ejecutando list_stage_plugins() con scheduling como argumento stage_name .
      • 'as_soon_as\possible': Programa instrucciones con avidez, lo antes posible en un recurso qubit (alias: asap).
      • as_late_as_possible': Programar las instrucciones tarde, es decir, manteniendo los qubits en el estado de tierra cuando sea posible (alias: alap). Este es el valor por defecto.
    • seed_transpiler (int) - Establece semillas aleatorias para las partes estocásticas del transpilador.

Si no especifica ninguno de los parámetros anteriores, se utilizarán los siguientes valores por defecto. Consulte la página de referencia de la API del método para obtener más información:

generate_preset_pass_manager(
    optimization_level=1,
    backend=None,
    target=None,
    basis_gates=None,
    coupling_map=None,
    initial_layout=None,
    layout_method=None,
    routing_method=None,
    translation_method=None,
    scheduling_method=None,
    approximation_degree=1.0,
    seed_transpiler=None,
    unitary_synthesis_method="default",
    unitary_synthesis_plugin_config=None,
    hls_config=None,
    init_method=None,
    optimization_method=None,
)

Output:

<qiskit.transpiler.passmanager.StagedPassManager at 0x7f0bfe29df90>

Próximos pasos

Recomendaciones
¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.