Instalează și folosește plugin-uri pentru Transpiler
Package versions
Codul de pe această pagină a fost dezvoltat folosind următoarele cerințe. Recomandăm să folosești aceste versiuni sau mai noi.
qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1
Pentru a facilita dezvoltarea și reutilizarea codului de transpilare personalizat de către comunitatea mai largă de utilizatori Qiskit, Qiskit SDK suportă o interfață de plugin care permite pachetelor Python terțe să declare că oferă funcționalitate extinsă de transpilare accesibilă prin Qiskit.
În prezent, plugin-urile terțe pot oferi funcționalitate extinsă de transpilare în trei moduri:
- Un plugin de etapă pentru Transpiler oferă un manager de pași care poate fi folosit în locul uneia dintre cele 6 etape ale unui manager de pași prestabilit pe etape:
init,layout,routing,translation,optimizationșischeduling. - Un plugin de sinteză unitară oferă funcționalitate extinsă pentru sinteza Gate-urilor unitare.
- Un plugin de sinteză la nivel înalt oferă funcționalitate extinsă pentru sinteza „obiectelor de nivel înalt", cum ar fi funcțiile liniare sau operatorii Clifford. Obiectele de nivel înalt sunt reprezentate de subclase ale clasei Operation.
Restul paginii descrie cum să listezi plugin-urile disponibile, să instalezi altele noi și să le folosești.
Listează plugin-urile disponibile și instalează altele noi
Qiskit include deja câteva plugin-uri built-in pentru transpilare. Pentru a instala mai multe, poți folosi managerul tău de pachete Python. De exemplu, ai putea rula pip install qiskit-toqm pentru a instala plugin-ul de etapă de routing Qiskit TOQM. O serie de plugin-uri terțe fac parte din ecosistemul Qiskit.
Listează plugin-urile de etapă pentru Transpiler disponibile
Folosește funcția list_stage_plugins, transmițând numele etapei ale cărei plugin-uri vrei să le listezi.
# 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']
Dacă qiskit-toqm ar fi instalat, atunci toqm ar apărea în lista de plugin-uri routing.
Listează plugin-urile de sinteză unitară disponibile
Folosește funcția unitary_synthesis_plugin_names.
from qiskit.transpiler.passes.synthesis import unitary_synthesis_plugin_names
unitary_synthesis_plugin_names()
['aqc', 'clifford', 'default', 'gridsynth', 'sk']
Listează plugin-urile de sinteză la nivel înalt disponibile
Folosește funcția high_level_synthesis_plugin_names, transmițând numele tipului de „obiect de nivel înalt" care urmează să fie sintetizat. Numele corespunde atributului name al clasei Operation care reprezintă tipul de obiect sintetizat.
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']
Poți folosi clasa HighLevelSynthesisPluginManager pentru a lista numele tuturor plugin-urilor de sinteză la nivel înalt:
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']
Folosește un plugin
În această secțiune, arătăm cum să folosești plugin-urile pentru Transpiler. În exemplele de cod, folosim plugin-uri care vin împreună cu Qiskit, dar plugin-urile instalate din pachete terțe se utilizează în același mod.
Folosește un plugin de etapă pentru Transpiler
Pentru a folosi un plugin de etapă pentru Transpiler, specifică numele acestuia cu argumentul corespunzător pentru generate_preset_pass_manager sau transpile. Argumentul se formează adăugând _method la numele etapei de transpilare. De exemplu, pentru a folosi plugin-ul de routing lookahead, am specifica lookahead pentru argumentul routing_method.
Backend-ul mock FakeSherbrooke din qiskit_ibm_runtime este folosit în aceste exemple, dar îl poți încerca pe orice backend real sau fake compatibil cu Qiskit. Rezultatele tale ar putea fi diferite.
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"
)
Folosește un plugin de sinteză unitară
Pentru a folosi un plugin de sinteză unitară, specifică numele acestuia ca argument unitary_synthesis_method pentru generate_preset_pass_manager sau 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"]
),
)
Sinteza unitară este folosită în etapele init, translation și optimization ale managerului de pași pe etape returnat de generate_preset_pass_manager sau folosit în transpile. Consultă Etapele Transpiler pentru o descriere a acestor etape.
Folosește argumentul unitary_synthesis_plugin_config, un dicționar liber, pentru a transmite opțiuni pentru metoda de sinteză unitară. Documentația metodei de sinteză ar trebui să explice opțiunile pe care le suportă. Consultă această listă pentru linkuri către documentația plugin-urilor built-in de sinteză unitară.
Folosește un plugin de sinteză la nivel înalt
Mai întâi, creează un obiect HLSConfig pentru a stoca numele plugin-urilor de folosit pentru diverse obiecte de nivel înalt. De exemplu:
from qiskit.transpiler.passes import HLSConfig
hls_config = HLSConfig(clifford=["layers"], linear_function=["pmh"])
Această celulă de cod creează o configurație de sinteză la nivel înalt care folosește plugin-ul layers
pentru sintetizarea obiectelor Clifford și plugin-ul pmh pentru sintetizarea
obiectelor LinearFunction. Numele argumentelor cuvânt cheie corespund atributului
name al clasei Operation care reprezintă tipul de obiect sintetizat.
Pentru fiecare obiect de nivel înalt, lista de plugin-uri specificată este încercată în ordine până când unul dintre ele
reușește (în exemplul de mai sus, fiecare listă conține doar un singur plugin).
Pe lângă specificarea
unui plugin prin numele său, poți transmite în schimb un tuplu (name, options), unde al doilea element al tuplului este un dicționar care conține opțiuni pentru plugin. Documentația metodei de sinteză ar trebui să explice opțiunile pe care le suportă. Consultă această listă pentru linkuri către documentația plugin-urilor built-in de sinteză la nivel înalt.
După ce ai creat obiectul HLSConfig, transmite-l ca argument
hls_config pentru generate_preset_pass_manager sau transpile:
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend, hls_config=hls_config
)
Sinteza la nivel înalt este folosită în etapele init, translation și optimization ale managerului de pași pe etape returnat de generate_preset_pass_manager sau folosit în transpile. Consultă Etapele Transpiler pentru o descriere a acestor etape.
Pași următori
- Creează un plugin pentru Transpiler.
- Create a transpiler plugin.
- Consultă tutorialele pentru exemple de transpilare și rulare a Circuit-urilor cuantice.