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:
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:
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 especificartargetni ninguna otra opción de backend. Del mismo modo, si especificatarget, no necesita especificarbackendni 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, comocoupling_map, anula los ajustes debackend.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 debackend.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 ejecutandobackend.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_constraintsesNoney 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']. SiNone, 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. SiNone, se utiliza elinstruction_schedule_mapde 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 opcionalHLSConfigque se pasa directamente a la pasada de transformaciónHighLevelSynthesis. 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 ejecutandolist_stage_plugins()coninitcomo argumento.unitary_synthesis_method(str) - El nombre del método de síntesis unitaria a utilizar. Por defecto, se utilizadefault. Puede ver una lista de los plugins instalados ejecutandounitary_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 argumentounitary_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 lascoupling_maprestricciones, 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, ytrivial). 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 ejecutandolist_stage_plugins()conlayoutcomo argumentostage_name. El valor por defecto essabre.
routing_method(str) - Nombre del pase de enrutamiento (basic,lookahead,default,sabre, onone). También puede ser el nombre del plugin externo a utilizar para la etapa de enrutamiento. Puede ver una lista de los plugins instalados ejecutandolist_stage_plugins()conroutingcomo argumentostage_name. El valor por defecto essabre.
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 ejecutandolist_stage_plugins()contranslationcomo argumentostage_name. El valor predeterminado estranslator.
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. EspecificandoNonese 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 ejecutandolist_stage_plugins()conoptimizationcomo argumentostage_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 ejecutandolist_stage_plugins()conschedulingcomo argumentostage_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.
- 'as_soon_as\possible': Programa instrucciones con avidez, lo antes posible en un recurso qubit (alias:
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
- Aprende a establecer el nivel de optimización.
- Revisar más Parámetros de uso común.
- Descubre cómo configurar el nivel de optimización al utilizar Qiskit Runtime.
- Consulte el tema «Transpile con gestores de pases ».
- Para ver ejemplos, consulte Representación de ordenadores cuánticos.
- Aprenda a transpilear circuitos como parte del flujo de trabajo de patrones de Qiskit utilizando Qiskit Runtime.
- Revise la documentación de la API de Transpile.