Instalar y utilizar complementos de transpilador
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
Para facilitar el desarrollo y la reutilización de código de transpilación personalizado por parte de la amplia comunidad de usuarios de Qiskit, el SDK de Qiskit admite una interfaz de plugin que permite a los paquetes Python de terceros declarar que proporcionan una funcionalidad de transpilación ampliada accesible a través de Qiskit.
Actualmente, los plugins de terceros pueden ofrecer funciones de transpilación ampliadas de tres maneras:
- Un plugin de etapa de transpilador proporciona un gestor de pases que puede utilizarse en lugar de una de las 6 etapas de un gestor de pases por etapas preestablecido:
init,layout,routing,translation,optimization, yscheduling. - Un complemento de síntesis un itaria proporciona funciones ampliadas para la síntesis de puertas unitarias.
- Un complemento de síntesis de alto nivel ofrece funciones ampliadas para sintetizar "objetos de alto nivel", como funciones lineales u operadores Clifford. Los objetos de alto nivel están representados por subclases de la clase Operación.
El resto de la página describe cómo listar los plugins disponibles, instalar nuevos y utilizarlos.
Enumera los complementos disponibles e instala otros nuevos
Qiskit ya incluye algunos plugins integrados para la transpilación. Para instalar más, puede utilizar su gestor de paquetes Python. Por ejemplo, puede ejecutar pip install qiskit-toqm para instalar el plugin de etapa de enrutamiento Qiskit TOQM. Varios plugins de terceros forman parte del ecosistema Qiskit.
Lista de complementos de etapa de transpilador disponibles
Utilice la función list_stage_plugins, pasando el nombre de la etapa cuyos plugins desea listar.
from qiskit.transpiler.preset_passmanagers.plugin import list_stage_plugins
list_stage_plugins("layout")Output:
['default', 'dense', 'sabre', 'trivial']
list_stage_plugins("routing")Output:
['basic', 'default', 'lookahead', 'none', 'sabre']
Si qiskit-toqm estuviera instalado, entonces toqm aparecería en la lista de plugins routing .
Lista de plugins de síntesis unitarios disponibles
Utilice la función unitary_synthesis_plugin_names.
from qiskit.transpiler.passes.synthesis import unitary_synthesis_plugin_names
unitary_synthesis_plugin_names()Output:
['aqc', 'clifford', 'default', 'gridsynth', 'sk']
Lista de complementos de síntesis de alto nivel disponibles
Utilice la función high_level_synthesis_plugin_names, pasando el nombre del tipo de "objeto de alto nivel" a sintetizar. El nombre corresponde al atributo name de la clase Operación que representa el tipo de objeto que se está sintetizando.
from qiskit.transpiler.passes.synthesis import (
high_level_synthesis_plugin_names,
)
high_level_synthesis_plugin_names("clifford")Output:
['ag', 'bm', 'default', 'greedy', 'layers', 'lnn', 'rb_default']
Puede utilizar la clase HighLevelSynthesisPluginManager para listar los nombres de todos los plugins de síntesis de alto nivel:
from qiskit.transpiler.passes.synthesis.plugin import (
HighLevelSynthesisPluginManager,
)
HighLevelSynthesisPluginManager().plugins.names()Output:
['FullAdder.default',
'FullAdder.ripple_c04',
'FullAdder.ripple_v95',
'HalfAdder.default',
'HalfAdder.qft_d00',
'HalfAdder.ripple_c04',
'HalfAdder.ripple_r25',
'HalfAdder.ripple_v95',
'IntComp.default',
'IntComp.noaux',
'IntComp.twos',
'ModularAdder.default',
'ModularAdder.modular_v17',
'ModularAdder.qft_d00',
'ModularAdder.ripple_c04',
'ModularAdder.ripple_v95',
'Multiplier.cumulative_h18',
'Multiplier.default',
'Multiplier.qft_r17',
'PauliEvolution.default',
'PauliEvolution.rustiq',
'WeightedSum.default',
'annotated.default',
'clifford.ag',
'clifford.bm',
'clifford.default',
'clifford.greedy',
'clifford.layers',
'clifford.lnn',
'linear_function.default',
'linear_function.kms',
'linear_function.pmh',
'mcmt.default',
'mcmt.noaux',
'mcmt.vchain',
'mcmt.xgate',
'mcx.1_clean_b95',
'mcx.1_clean_kg24',
'mcx.1_dirty_kg24',
'mcx.2_clean_kg24',
'mcx.2_dirty_kg24',
'mcx.default',
'mcx.gray_code',
'mcx.n_clean_m15',
'mcx.n_dirty_i15',
'mcx.noaux_hp24',
'mcx.noaux_v24',
'permutation.acg',
'permutation.basic',
'permutation.default',
'permutation.kms',
'permutation.token_swapper',
'qft.default',
'qft.full',
'qft.line',
'clifford.rb_default']
Utiliza un complemento
En esta sección, mostramos cómo utilizar los plugins del transpilador. En los ejemplos de código, utilizamos plugins que vienen con Qiskit, pero los plugins instalados desde paquetes de terceros se utilizan de la misma manera.
Utiliza un complemento de etapa transpiladora
Para utilizar un complemento de etapa de transpilador, especifica su nombre con el argumento correspondiente en generate_preset_pass_manager o transpile. El argumento se forma añadiendo _method al nombre de la etapa de transpilación. Por ejemplo, para utilizar el complemento lookahead de enrutamiento, especificaríamos lookahead para el routing_method argumento.
En estos ejemplos se utiliza el backend FakeSherbrooke``qiskit_ibm_runtime simulado de, pero puedes probarlo con cualquier backend real o simulado compatible con Qiskit. Tus resultados pueden ser diferentes.
from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime.fake_provider import FakeSherbrooke
backend = FakeSherbrooke()
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend, routing_method="lookahead"
)Utiliza un complemento de síntesis unitaria
Para utilizar un plugin de síntesis unitaria, especifique su nombre como argumento unitary_synthesis_method a generate_preset_pass_manager o transpile:
pass_manager = generate_preset_pass_manager(
optimization_level=3,
backend=backend,
unitary_synthesis_method="sk",
unitary_synthesis_plugin_config=dict(
basis_gates=["cz", "id", "rz", "sx", "x"]
),
)La síntesis unitaria se utiliza en las etapas init, translation, y optimization del gestor de pases por etapas devuelto por generate_preset_pass_manager o se utiliza en transpile. Consulte Etapas del transpilador para obtener una descripción de estas etapas.
Utilice el argumento unitary_synthesis_plugin_config , un diccionario de forma libre, para pasar opciones para el método de síntesis unitaria. La documentación del método de síntesis debe explicar las opciones que admite. Consulte esta lista para obtener enlaces a la documentación de los plugins de síntesis unitaria incorporados.
Utiliza un complemento de síntesis de alto nivel
En primer lugar, cree un HLSConfig para almacenar los nombres de los plugins a utilizar para varios objetos de alto nivel. Por ejemplo:
from qiskit.transpiler.passes import HLSConfig
hls_config = HLSConfig(clifford=["layers"], linear_function=["pmh"])Esta celda de código crea una configuración de síntesis de alto nivel que utiliza el plugin layers para sintetizar objetos Clifford y el plugin pmh para sintetizar LinearFunction objetos. Los nombres de los argumentos de las palabras clave corresponden a las name de la clase Operación que representa el tipo de objeto que se está sintetizando.
Para cada objeto de alto nivel, la lista de plugins dados se prueba en secuencia hasta que uno de ellos (en el ejemplo anterior, cada lista contiene un único plugin).
Además de especificar un complemento por su nombre, puede pasar una tupla (name, options) , donde el segundo elemento de la tupla es un diccionario que contiene opciones para el complemento. La documentación del método de síntesis debe explicar las opciones que admite. En esta lista encontrará enlaces a la documentación de los plugins de síntesis de alto nivel incorporados.
Una vez creado el objeto HLSConfig , páselo como hls_config argumento a generate_preset_pass_manager o transpile:
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend, hls_config=hls_config
)La síntesis de alto nivel se utiliza en las etapas init, translation, y optimization del gestor de pases por etapas devuelto por generate_preset_pass_manager o se utiliza en transpile. Consulte Etapas del transpilador para obtener una descripción de estas etapas.
Próximos pasos
- Crea un complemento de transpilador.
- Consulta los tutoriales para ver ejemplos de transpilación y ejecución de circuitos cuánticos.