Lewati ke konten utama
Proyek ini masih dalam tahap beta. Menemukan bug? Buat isu GitHub. Punya pertanyaan atau ide? Tanya di Discussions — kami sangat menghargai masukan kamu!
Bagaimana kualitas terjemahan di halaman ini?

Instal dan gunakan plugin transpiler

Versi paket

Kode di halaman ini dikembangkan menggunakan persyaratan berikut. Kami menyarankan untuk menggunakan versi ini atau yang lebih baru.

qiskit[all]~=2.5.2
qiskit-ibm-runtime~=0.49.0

Untuk memudahkan pengembangan dan penggunaan kembali kode transpilasi kustom oleh komunitas pengguna Qiskit yang lebih luas, Qiskit SDK mendukung antarmuka plugin yang memungkinkan paket Python pihak ketiga untuk mendeklarasikan bahwa mereka menyediakan fungsionalitas transpilasi yang diperluas dan dapat diakses melalui Qiskit.

Saat ini, plugin pihak ketiga dapat menyediakan fungsionalitas transpilasi yang diperluas dengan tiga cara:

  • Plugin tahap transpiler menyediakan pass manager yang dapat digunakan sebagai pengganti salah satu dari 6 tahap staged pass manager preset: init, layout, routing, translation, optimization, dan scheduling.

  • Plugin sintesis uniter menyediakan fungsionalitas yang diperluas untuk sintesis gate uniter.

  • Plugin sintesis tingkat tinggi menyediakan fungsionalitas yang diperluas untuk mensintesis "objek tingkat tinggi" seperti fungsi linear atau operator Clifford. Objek tingkat tinggi direpresentasikan oleh subkelas dari kelas Operation.

Sisa halaman ini menjelaskan cara membuat daftar plugin yang tersedia, menginstal yang baru, dan menggunakannya.

Daftar plugin yang tersedia dan instal yang baru​

Qiskit sudah menyertakan beberapa plugin bawaan untuk transpilasi. Untuk menginstal lebih banyak, kamu bisa menggunakan package manager Python-mu. Misalnya, kamu bisa menjalankan pip install qiskit-toqm untuk menginstal plugin tahap routing Qiskit TOQM. Sejumlah plugin pihak ketiga merupakan bagian dari ekosistem Qiskit.

Daftar plugin tahap transpiler yang tersedia​

Gunakan fungsi list_stage_plugins, dengan memberikan nama tahap yang daftar plugin-nya ingin kamu tampilkan.

# 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 sudah terinstal, maka toqm akan muncul dalam daftar plugin routing.

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

Daftar plugin sintesis tingkat tinggi yang tersedia​

Gunakan fungsi high_level_synthesis_plugin_names, dengan memberikan nama jenis "objek tingkat tinggi" yang akan disintesis. Nama tersebut sesuai dengan atribut name dari kelas Operation yang merepresentasikan jenis objek yang sedang disintesis.

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

Kamu bisa menggunakan kelas HighLevelSynthesisPluginManager untuk membuat daftar nama semua plugin sintesis tingkat 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​

Di bagian ini, kita akan menunjukkan cara menggunakan plugin transpiler. Dalam contoh kode, kita menggunakan plugin yang sudah disertakan bersama Qiskit, tapi plugin yang diinstal dari paket pihak ketiga digunakan dengan cara yang sama.

Gunakan plugin tahap transpiler​

Untuk menggunakan plugin tahap transpiler, tentukan namanya dengan argumen yang sesuai pada generate_preset_pass_manager atau transpile. Argumen tersebut dibentuk dengan menambahkan _method pada nama tahap transpilasi. Misalnya, untuk menggunakan plugin routing lookahead, kita akan menetapkan lookahead untuk argumen routing_method.

catatan

Backend tiruan FakeSherbrooke dari qiskit_ibm_runtime digunakan dalam contoh-contoh ini, tetapi kamu bisa mencobanya pada backend mana pun yang kompatibel dengan Qiskit, baik yang asli maupun tiruan. Hasilmu mungkin berbeda.

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 pada 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 tahap init, translation, dan optimization dari staged pass manager yang dikembalikan oleh generate_preset_pass_manager atau yang digunakan dalam transpile. Lihat Tahap Transpiler untuk deskripsi tahap-tahap ini.

Gunakan argumen unitary_synthesis_plugin_config, sebuah dictionary bebas, untuk meneruskan opsi pada metode sintesis uniter. Dokumentasi metode sintesis seharusnya menjelaskan opsi yang didukungnya. Lihat daftar ini untuk tautan ke dokumentasi plugin sintesis uniter bawaan.

Gunakan plugin sintesis tingkat tinggi​

Pertama, buat HLSConfig untuk menyimpan nama plugin yang akan digunakan untuk berbagai objek tingkat tinggi. Misalnya:

from qiskit.transpiler.passes import HLSConfig

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

Sel kode ini membuat konfigurasi sintesis tingkat tinggi yang menggunakan plugin layers untuk mensintesis objek Clifford dan plugin pmh untuk mensintesis objek LinearFunction. Nama argumen kata kunci sesuai dengan atribut name dari kelas Operation yang merepresentasikan jenis objek yang sedang disintesis. Untuk setiap objek tingkat tinggi, daftar plugin yang diberikan dicoba secara berurutan hingga salah satunya berhasil (dalam contoh di atas, setiap daftar hanya berisi satu plugin).

Selain menentukan sebuah plugin berdasarkan namanya, kamu juga bisa memberikan tuple (name, options), di mana elemen kedua dari tuple tersebut adalah dictionary yang berisi opsi untuk plugin tersebut. Dokumentasi metode sintesis seharusnya menjelaskan opsi-opsi yang didukungnya. Lihat daftar ini untuk tautan ke dokumentasi plugin sintesis tingkat tinggi bawaan.

Setelah kamu membuat objek HLSConfig, berikan sebagai argumen hls_config pada generate_preset_pass_manager atau transpile:

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

Sintesis tingkat tinggi digunakan dalam tahap init, translation, dan optimization dari staged pass manager yang dikembalikan oleh generate_preset_pass_manager atau yang digunakan dalam transpile. Lihat Tahap Transpiler untuk deskripsi tahap-tahap ini.

Langkah selanjutnya​

Rekomendasi