Přeskočit na hlavní obsah

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, optimization a scheduling.
  • 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

Doporučení