Instalace a použití pluginů pro Transpiler
Verze balíčků
Kód na této stránce byl vyvinut s použitím následujících požadavků. Doporučujeme používat tyto verze nebo novější.
qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1
Aby bylo usnadněno vývoj a opakované použití vlastního transpilačního kódu širší komunitou uživatelů Qiskitu, podporuje Qiskit SDK rozhraní pro pluginy, které umožňuje balíčkům třetích stran deklarovat, že poskytují rozšířenou transpilační funkcionalitu přístupnou přes Qiskit.
V současné době mohou pluginy třetích stran poskytovat rozšířenou transpilační funkcionalitu třemi způsoby:
- Plugin transpilační fáze poskytuje pass manager, který lze použít místo jedné ze 6 fází přednastavené staged pass manager:
init,layout,routing,translation,optimizationascheduling. - Plugin unitární syntézy poskytuje rozšířenou funkcionalitu pro syntézu unitárních Gate.
- Plugin syntézy vysoké úrovně poskytuje rozšířenou funkcionalitu pro syntézu „objektů vysoké úrovně", jako jsou lineární funkce nebo Cliffordovy operátory. Objekty vysoké úrovně jsou reprezentovány podtřídami třídy Operation.
Zbytek stránky popisuje, jak zobrazit dostupné pluginy, instalovat nové a jak je používat.
Zobrazení dostupných pluginů a instalace nových
Qiskit již obsahuje několik vestavěných pluginů pro transpilaci. Pro instalaci dalších můžeš použít svůj správce balíčků Python. Například spuštěním pip install qiskit-toqm nainstaluješ plugin pro fázi routování Qiskit TOQM. Řada pluginů třetích stran je součástí ekosystému Qiskit.
Zobrazení dostupných pluginů transpilačních fází
Použij funkci list_stage_plugins a předej jí název fáze, jejíž pluginy chceš zobrazit.
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
from qiskit.transpiler.preset_passmanagers.plugin import list_stage_plugins
list_stage_plugins("layout")
['default', 'dense', 'sabre', 'trivial']
list_stage_plugins("routing")
['basic', 'default', 'lookahead', 'none', 'sabre']
Pokud by byl nainstalován qiskit-toqm, pak by se toqm zobrazil v seznamu pluginů pro routing.
Zobrazení dostupných pluginů unitární syntézy
Použij funkci unitary_synthesis_plugin_names.
from qiskit.transpiler.passes.synthesis import unitary_synthesis_plugin_names
unitary_synthesis_plugin_names()
['aqc', 'clifford', 'default', 'gridsynth', 'sk']
Zobrazení dostupných pluginů syntézy vysoké úrovně
Použij funkci high_level_synthesis_plugin_names a předej jí název typu „objektu vysoké úrovně", který má být syntetizován. Název odpovídá atributu name třídy Operation reprezentující typ syntetizovaného objektu.
from qiskit.transpiler.passes.synthesis import (
high_level_synthesis_plugin_names,
)
high_level_synthesis_plugin_names("clifford")
['ag', 'bm', 'default', 'greedy', 'layers', 'lnn', 'rb_default']
Pro zobrazení názvů všech pluginů syntézy vysoké úrovně můžeš použít třídu HighLevelSynthesisPluginManager:
from qiskit.transpiler.passes.synthesis.plugin import (
HighLevelSynthesisPluginManager,
)
HighLevelSynthesisPluginManager().plugins.names()
['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']
Použití pluginu
V této části ukážeme, jak používat pluginy pro Transpiler. V ukázkách kódu používáme pluginy, které jsou součástí Qiskitu, ale pluginy nainstalované z balíčků třetích stran se používají stejným způsobem.
Použití pluginu transpilační fáze
Pro použití pluginu transpilační fáze zadej jeho název pomocí příslušného argumentu funkce generate_preset_pass_manager nebo transpile. Argument se tvoří přidáním _method k názvu transpilační fáze. Například pro použití pluginu routování lookahead zadáme lookahead jako hodnotu argumentu routing_method:
from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.backend("ibm_fez")
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend, routing_method="lookahead"
)
Použití pluginu unitární syntézy
Pro použití pluginu unitární syntézy zadej jeho název jako argument unitary_synthesis_method funkce generate_preset_pass_manager nebo 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"]
),
)
Unitární syntéza se používá ve fázích init, translation a optimization staged pass manager vráceného funkcí generate_preset_pass_manager nebo použitého ve transpile. Popis těchto fází najdeš v části Fáze Transpiléru.
Pro předání možností metody unitární syntézy použij argument unitary_synthesis_plugin_config, což je volně formátovaný slovník. Dokumentace syntetizační metody by měla vysvětlovat podporované možnosti. Viz tento seznam s odkazy na dokumentaci vestavěných pluginů unitární syntézy.
Použití pluginu syntézy vysoké úrovně
Nejprve vytvoř objekt HLSConfig pro uložení názvů pluginů, které se mají použít pro různé objekty vysoké úrovně. Například:
from qiskit.transpiler.passes import HLSConfig
hls_config = HLSConfig(clifford=["layers"], linear_function=["pmh"])
Tento blok kódu vytváří konfiguraci syntézy vysoké úrovně, která používá plugin layers
pro syntézu objektů Clifford a plugin pmh pro syntézu
objektů LinearFunction. Názvy klíčových argumentů odpovídají
atributu name třídy Operation reprezentující typ syntetizovaného objektu.
Pro každý objekt vysoké úrovně jsou uvedené pluginy zkoušeny postupně, dokud jeden z nich
neuspěje (v příkladu výše každý seznam obsahuje pouze jeden plugin).
Kromě zadání pluginu jeho názvem můžeš také předat dvojici (name, options), kde druhý prvek je slovník obsahující možnosti pro plugin. Dokumentace syntetizační metody by měla vysvětlovat podporované možnosti. Viz tento seznam s odkazy na dokumentaci vestavěných pluginů syntézy vysoké úrovně.
Jakmile vytvoříš objekt HLSConfig, předej ho jako argument
hls_config funkci generate_preset_pass_manager nebo transpile:
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend, hls_config=hls_config
)
Syntéza vysoké úrovně se používá ve fázích init, translation a optimization staged pass manager vráceného funkcí generate_preset_pass_manager nebo použitého ve transpile. Popis těchto fází najdeš v části Fáze Transpiléru.
Další kroky
- Vytvoř plugin pro Transpiler.
- Prohlédni si tutoriály s příklady transpilace a spouštění kvantových Circuit.