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.3.0
qiskit-ibm-runtime~=0.43.1
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, danscheduling. - 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 plugin-nya ingin kamu daftarkan.
# 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 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:
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 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"])
Baris 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
plugin berdasarkan namanya, kamu juga bisa meneruskan tuple (nama, opsi), di mana elemen kedua tuple adalah dictionary yang berisi opsi untuk plugin tersebut. Dokumentasi metode sintesis seharusnya menjelaskan 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β
- Buat plugin transpiler.
- Lihat tutorial untuk contoh transpilasi dan menjalankan Circuit kuantum.