Lumaktaw sa pangunahing nilalaman

I-install at gamitin ang mga transpiler plugin

Mga bersyon ng package

Ang code sa pahinang ito ay ginawa gamit ang mga sumusunod na kinakailangan. Inirerekomenda naming gamitin ang mga bersyong ito o mas bago.

qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1

Para mapadali ang pagbuo at muling paggamit ng custom na transpilation code ng mas malawak na komunidad ng mga gumagamit ng Qiskit, sinusuportahan ng Qiskit SDK ang isang plugin interface na nagbibigay-daan sa mga third-party na Python package na ideklara na nagbibigay sila ng pinahabang transpilation functionality na naa-access sa pamamagitan ng Qiskit.

Sa kasalukuyan, ang mga third-party na plugin ay maaaring magbigay ng pinahabang transpilation functionality sa tatlong paraan:

  • Ang isang transpiler stage plugin ay nagbibigay ng pass manager na maaaring gamitin kapalit ng isa sa 6 na yugto ng preset staged pass manager: init, layout, routing, translation, optimization, at scheduling.
  • Ang isang unitary synthesis plugin ay nagbibigay ng pinahabang functionality para sa unitary gate synthesis.
  • Ang isang high-level synthesis plugin ay nagbibigay ng pinahabang functionality para sa pag-synthesize ng mga "high-level object" tulad ng mga linear function o Clifford operator. Ang mga high-level object ay kinakatawan ng mga subclass ng klase na Operation.

Inilalarawan ng natitirang bahagi ng pahina kung paano ilista ang mga available na plugin, mag-install ng mga bago, at gamitin ang mga ito.

Ilista ang mga available na plugin at mag-install ng mga bago​

Kasama na sa Qiskit ang ilang built-in na plugin para sa transpilation. Para mag-install ng higit pa, maaari mong gamitin ang iyong Python package manager. Halimbawa, maaari kang magpatakbo ng pip install qiskit-toqm para i-install ang Qiskit TOQM routing stage plugin. Ang ilang third-party na plugin ay bahagi ng Qiskit ecosystem.

Ilista ang mga available na transpiler stage plugin​

Gamitin ang function na list_stage_plugins, na ipinapasa ang pangalan ng yugto na gusto mong ilista ang mga plugin.

# 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']

Kung naka-install ang qiskit-toqm, lilitaw ang toqm sa listahan ng mga routing plugin.

Ilista ang mga available na unitary synthesis plugin​

Gamitin ang function na unitary_synthesis_plugin_names.

from qiskit.transpiler.passes.synthesis import unitary_synthesis_plugin_names

unitary_synthesis_plugin_names()
['aqc', 'clifford', 'default', 'gridsynth', 'sk']

Ilista ang mga available na high-level synthesis plugin​

Gamitin ang function na high_level_synthesis_plugin_names, na ipinapasa ang pangalan ng uri ng "high-level object" na isi-synthesize. Ang pangalan ay tumutugma sa attribute na name ng klase na Operation na kumakatawan sa uri ng object na isi-synthesize.

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']

Maaari mong gamitin ang klase na HighLevelSynthesisPluginManager para ilista ang mga pangalan ng lahat ng high-level synthesis plugin:

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']

Gumamit ng plugin​

Sa seksyong ito, ipinapakita namin kung paano gamitin ang mga transpiler plugin. Sa mga halimbawa ng code, gumagamit kami ng mga plugin na kasama ng Qiskit, ngunit ang mga plugin na naka-install mula sa mga third-party na package ay ginagamit sa parehong paraan.

Gumamit ng transpiler stage plugin​

Para gumamit ng transpiler stage plugin, tukuyin ang pangalan nito gamit ang naaangkop na argument sa generate_preset_pass_manager o transpile. Ang argument ay nabubuo sa pamamagitan ng pagdaragdag ng _method sa pangalan ng transpilation stage. Halimbawa, para gamitin ang lookahead routing plugin, titukuyin natin ang lookahead para sa argument na 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"
)

Gumamit ng unitary synthesis plugin​

Para gumamit ng unitary synthesis plugin, tukuyin ang pangalan nito bilang argument na unitary_synthesis_method sa 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"]
),
)

Ginagamit ang unitary synthesis sa mga yugtong init, translation, at optimization ng staged pass manager na ibinalik ng generate_preset_pass_manager o ginagamit sa transpile. Tingnan ang Mga yugto ng Transpiler para sa paglalarawan ng mga yugtong ito.

Gamitin ang argument na unitary_synthesis_plugin_config, isang free-form na dictionary, para ipasa ang mga opsyon para sa unitary synthesis method. Dapat ipaliwanag ng dokumentasyon ng synthesis method ang mga opsyong sinusuportahan nito. Tingnan ang listahang ito para sa mga link sa dokumentasyon ng mga built-in na unitary synthesis plugin.

Gumamit ng high-level synthesis plugin​

Una, gumawa ng HLSConfig para iimbak ang mga pangalan ng mga plugin na gagamitin para sa iba't ibang high-level object. Halimbawa:

from qiskit.transpiler.passes import HLSConfig

hls_config = HLSConfig(clifford=["layers"], linear_function=["pmh"])

Ang code cell na ito ay gumagawa ng high-level synthesis configuration na gumagamit ng layers plugin para sa pag-synthesize ng mga object na Clifford at ng pmh plugin para sa pag-synthesize ng mga object na LinearFunction. Ang mga pangalan ng keyword argument ay tumutugma sa attribute na name ng klase na Operation na kumakatawan sa uri ng object na isi-synthesize. Para sa bawat high-level object, ang listahan ng mga ibinigay na plugin ay sinusubukan nang sunud-sunod hanggang sa magtagumpay ang isa sa kanila (sa halimbawa sa itaas, ang bawat listahan ay naglalaman lamang ng isang plugin).

Bukod sa pagtukoy ng plugin sa pamamagitan ng pangalan nito, maaari ka ring magpasa ng tuple na (name, options), kung saan ang pangalawang elemento ng tuple ay isang dictionary na naglalaman ng mga opsyon para sa plugin. Dapat ipaliwanag ng dokumentasyon ng synthesis method ang mga opsyong sinusuportahan nito. Tingnan ang listahang ito para sa mga link sa dokumentasyon ng mga built-in na high-level synthesis plugin.

Kapag nagawa mo na ang object na HLSConfig, ipasa ito bilang argument na hls_config sa generate_preset_pass_manager o transpile:

pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend, hls_config=hls_config
)

Ginagamit ang high-level synthesis sa mga yugtong init, translation, at optimization ng staged pass manager na ibinalik ng generate_preset_pass_manager o ginagamit sa transpile. Tingnan ang Mga yugto ng Transpiler para sa paglalarawan ng mga yugtong ito.

Mga susunod na hakbang​

Rekomendasyon