Langkau ke kandungan utama
Projek ini dalam fasa beta. Jumpa pepijat? Buat isu GitHub. Ada soalan atau idea? Tanya dalam Discussions — kami suka dengar maklum balas anda!
Bagaimana kualiti terjemahan pada halaman ini?

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.5.2
qiskit-ibm-runtime~=0.49.0

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 pas yang boleh digunakan sebagai ganti salah satu daripada 6 peringkat pengurus pas berperingkat pratetap: init, layout, routing, translation, optimization, dan scheduling.

  • 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 dengan menghantar nama peringkat yang pluginnya ingin anda senaraikan.

# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util

_needed = {"qiskit": "qiskit", "qiskit_ibm_runtime": "qiskit-ibm-runtime"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
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.

nota

Backend tiruan FakeSherbrooke daripada qiskit_ibm_runtime digunakan dalam contoh-contoh ini, tetapi anda boleh mencubanya pada mana-mana Backend sebenar atau palsu yang serasi dengan Qiskit. Keputusan anda mungkin berbeza.

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"
)

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 pas 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) yang elemen keduanya 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 pas berperingkat yang dikembalikan oleh generate_preset_pass_manager atau digunakan dalam transpile. Lihat Peringkat Transpiler untuk penerangan peringkat-peringkat ini.

Langkah seterusnya​

Cadangan