Pasang dan gunakan plugin Transpiler
Versi pakej
Kod pada halaman ini dibangunkan menggunakan keperluan berikut. Kami mengesyorkan penggunaan versi ini atau yang lebih baharu.
qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1
Untuk memudahkan pembangunan dan penggunaan semula kod transpilasi tersuai oleh komuniti pengguna Qiskit yang lebih luas, Qiskit SDK menyokong antara muka plugin yang membolehkan pakej Python pihak ketiga mengisytiharkan bahawa mereka menyediakan fungsi transpilasi lanjutan yang boleh diakses melalui Qiskit.
Pada masa ini, plugin pihak ketiga boleh menyediakan fungsi transpilasi lanjutan dalam tiga cara:
- Plugin peringkat Transpiler menyediakan pengurus laluan yang boleh digunakan sebagai ganti salah satu daripada 6 peringkat pengurus laluan berperingkat pratetap:
init,layout,routing,translation,optimization, danscheduling. - Plugin sintesis uniter menyediakan fungsi lanjutan untuk sintesis Gate uniter.
- Plugin sintesis peringkat tinggi menyediakan fungsi lanjutan untuk mensintesiskan "objek peringkat tinggi" seperti fungsi linear atau operator Clifford. Objek peringkat tinggi diwakili oleh subkelas kelas Operation.
Selebihnya halaman ini menerangkan cara menyenaraikan plugin yang tersedia, memasang yang baharu, dan menggunakannya.
Senaraikan plugin yang tersedia dan pasang yang baharuβ
Qiskit sudah menyertakan beberapa plugin prabina untuk transpilasi. Untuk memasang lebih banyak, anda boleh menggunakan pengurus pakej Python anda. Sebagai contoh, anda mungkin menjalankan pip install qiskit-toqm untuk memasang plugin peringkat penghalaan Qiskit TOQM. Sebilangan plugin pihak ketiga adalah sebahagian daripada ekosistem Qiskit.
Senaraikan plugin peringkat Transpiler yang tersediaβ
Gunakan fungsi list_stage_plugins, hantar nama peringkat yang plugin-nya ingin anda senaraikan.
# 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']
Jika qiskit-toqm dipasang, maka toqm akan muncul dalam senarai plugin routing.
Senaraikan plugin sintesis uniter yang tersediaβ
Gunakan fungsi unitary_synthesis_plugin_names.
from qiskit.transpiler.passes.synthesis import unitary_synthesis_plugin_names
unitary_synthesis_plugin_names()
['aqc', 'clifford', 'default', 'gridsynth', 'sk']
Senaraikan plugin sintesis peringkat tinggi yang tersediaβ
Gunakan fungsi high_level_synthesis_plugin_names, hantar nama jenis "objek peringkat tinggi" yang hendak disintesiskan. Nama tersebut sepadan dengan atribut name kelas Operation yang mewakili jenis objek yang disintesiskan.
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']
Anda boleh menggunakan kelas HighLevelSynthesisPluginManager untuk menyenaraikan nama semua plugin sintesis peringkat tinggi:
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']
Gunakan pluginβ
Dalam bahagian ini, kami menunjukkan cara menggunakan plugin Transpiler. Dalam contoh kod, kami menggunakan plugin yang disertakan dengan Qiskit, tetapi plugin yang dipasang daripada pakej pihak ketiga digunakan dengan cara yang sama.
Gunakan plugin peringkat Transpilerβ
Untuk menggunakan plugin peringkat Transpiler, tentukan namanya dengan argumen yang sesuai kepada generate_preset_pass_manager atau transpile. Argumen dibentuk dengan menambahkan _method pada nama peringkat transpilasi. Sebagai contoh, untuk menggunakan plugin penghalaan lookahead, kami akan menentukan lookahead untuk argumen 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"
)
Gunakan plugin sintesis uniterβ
Untuk menggunakan plugin sintesis uniter, tentukan namanya sebagai argumen unitary_synthesis_method kepada generate_preset_pass_manager atau 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"]
),
)
Sintesis uniter digunakan dalam peringkat init, translation, dan optimization pengurus laluan berperingkat yang dikembalikan oleh generate_preset_pass_manager atau digunakan dalam transpile. Lihat Peringkat Transpiler untuk penerangan peringkat-peringkat ini.
Gunakan argumen unitary_synthesis_plugin_config, kamus bentuk bebas, untuk menghantar pilihan bagi kaedah sintesis uniter. Dokumentasi kaedah sintesis harus menerangkan pilihan yang disokongnya. Lihat senarai ini untuk pautan ke dokumentasi plugin sintesis uniter prabina.
Gunakan plugin sintesis peringkat tinggiβ
Pertama, cipta HLSConfig untuk menyimpan nama plugin yang hendak digunakan untuk pelbagai objek peringkat tinggi. Sebagai contoh:
from qiskit.transpiler.passes import HLSConfig
hls_config = HLSConfig(clifford=["layers"], linear_function=["pmh"])
Sel kod ini mencipta konfigurasi sintesis peringkat tinggi yang menggunakan plugin layers
untuk mensintesiskan objek Clifford dan plugin pmh untuk mensintesiskan
objek LinearFunction. Nama argumen kata kunci sepadan dengan
atribut name kelas Operation yang mewakili jenis objek yang disintesiskan.
Untuk setiap objek peringkat tinggi, senarai plugin yang diberikan dicuba secara berurutan sehingga salah satunya
berjaya (dalam contoh di atas, setiap senarai hanya mengandungi satu plugin).
Selain menentukan
plugin mengikut namanya, anda boleh menghantar tuple (name, options), di mana elemen kedua tuple ialah kamus yang mengandungi pilihan untuk plugin. Dokumentasi kaedah sintesis harus menerangkan pilihan yang disokongnya. Lihat senarai ini untuk pautan ke dokumentasi plugin sintesis peringkat tinggi prabina.
Setelah anda mencipta objek HLSConfig, hantarnya sebagai
argumen hls_config kepada generate_preset_pass_manager atau transpile:
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend, hls_config=hls_config
)
Sintesis peringkat tinggi digunakan dalam peringkat init, translation, dan optimization pengurus laluan berperingkat yang dikembalikan oleh generate_preset_pass_manager atau digunakan dalam transpile. Lihat Peringkat Transpiler untuk penerangan peringkat-peringkat ini.
Langkah seterusnyaβ
- Cipta plugin Transpiler.
- Lihat tutorial untuk contoh transpilasi dan menjalankan Circuit kuantum.