Pengaturan default dan opsi konfigurasi transpilasi
Versi paket
Kode di halaman ini dikembangkan menggunakan persyaratan berikut. Kami sarankan menggunakan versi ini atau yang lebih baru.
qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1
Circuit abstrak perlu ditranspilasi karena QPU hanya mendukung sekumpulan gate basis tertentu dan tidak bisa menjalankan operasi sembarang. Fungsi Transpiler adalah mengubah circuit sembarang agar bisa berjalan di QPU tertentu. Ini dilakukan dengan menerjemahkan circuit ke gate basis yang didukung, dan menambahkan gate SWAP sesuai kebutuhan agar konektivitas circuit sesuai dengan QPU.
Seperti yang dijelaskan di Transpile dengan pass manager, kamu bisa membuat pass manager menggunakan fungsi generate_preset_pass_manager dan mengoper circuit atau daftar circuit ke metode run-nya untuk mentranspilasi. Kamu bisa memanggil generate_preset_pass_manager hanya dengan optimization level dan Backend, menggunakan nilai default untuk semua opsi lainnya, atau mengoper argumen tambahan ke fungsi tersebut untuk menyetel transpilasi secara lebih detail.
Penggunaan dasar tanpa parameterβ
Pada contoh ini, kita mengoper circuit dan QPU target ke Transpiler tanpa menentukan parameter tambahan apa pun.
Buat circuit dan lihat hasilnya:
# Added by doQumentation β required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
from qiskit import QuantumCircuit
from qiskit.circuit.library import grover_operator, DiagonalGate
from qiskit_ibm_runtime.fake_provider import FakeSherbrooke
# Create circuit to test transpiler on
oracle = DiagonalGate([1] * 7 + [-1])
qc = QuantumCircuit(3)
qc.h([0, 1, 2])
qc = qc.compose(grover_operator(oracle))
# Add measurements to the circuit
qc.measure_all()
# View the circuit
qc.draw(output="mpl")
Transpilasi circuit dan lihat hasilnya:
from qiskit.transpiler import generate_preset_pass_manager
# Specify the QPU to target
backend = FakeSherbrooke()
# Transpile the circuit
pass_manager = generate_preset_pass_manager(
optimization_level=1, backend=backend
)
transpiled_circ = pass_manager.run(qc)
# View the transpiled circuit
transpiled_circ.draw(output="mpl", idle_wires=False)
Semua parameter yang tersediaβ
Berikut adalah semua parameter yang tersedia untuk fungsi generate_preset_pass_manager. Ada dua kelompok argumen: yang mendeskripsikan target kompilasi, dan yang memengaruhi cara kerja Transpiler.
Semua parameter kecuali optimization_level bersifat opsional. Untuk detail lengkapnya, lihat dokumentasi API Transpiler.
optimization_level(int) - Seberapa banyak optimasi yang dilakukan pada circuit. Integer dalam rentang (0 - 3). Level yang lebih tinggi menghasilkan circuit yang lebih optimal, dengan imbalan waktu transpilasi yang lebih lama. Lihat Atur level optimasi Transpiler untuk detail lebih lanjut.
Parameter untuk mendeskripsikan target kompilasi:β
Argumen-argumen ini mendeskripsikan QPU target untuk eksekusi circuit, termasuk informasi seperti coupling map QPU (yang menggambarkan konektivitas Qubit), gate basis yang didukung QPU, dan tingkat error gate.
Banyak dari parameter ini dijelaskan secara detail di Parameter yang umum digunakan untuk transpilasi.
Parameter QPU (Backend)
Backend)Parameter Backend - Jika kamu menentukan backend, kamu tidak perlu menentukan target atau opsi Backend lainnya. Begitu pula, jika kamu menentukan target, kamu tidak perlu menentukan backend atau opsi Backend lainnya.
backend(Backend) - Jika ini diatur, Transpiler mengompilasi circuit input ke perangkat ini. Jika ada opsi lain yang memengaruhi pengaturan ini, seperticoupling_map, maka opsi tersebut menggantikan pengaturan daribackend.target(Target) - Target Transpiler Backend. Biasanya ini ditentukan sebagai bagian dari argumen Backend, tapi jika kamu membuat objek Target secara manual, kamu bisa menentukannya di sini. Ini menggantikan target daribackend.backend_properties(BackendProperties) - Properti yang dikembalikan oleh QPU, termasuk informasi tentang error gate, error readout, waktu koherensi Qubit, dan sebagainya. Temukan QPU yang menyediakan informasi ini dengan menjalankanbackend.properties().timing_constraints(Dict[str, int] | None) - Batasan opsional pada resolusi waktu instruksi dari hardware kontrol. Informasi ini disediakan oleh konfigurasi QPU. Jika QPU tidak memiliki batasan pada alokasi waktu instruksi,timing_constraintsbernilaiNonedan tidak ada penyesuaian yang dilakukan. Sebuah QPU bisa melaporkan sekumpulan batasan, yaitu:granularity: Nilai integer yang mewakili resolusi minimum gate pulsa dalam satuan dt. Gate pulsa yang ditentukan pengguna harus memiliki durasi yang merupakan kelipatan dari nilai granularitas ini.min_length: Nilai integer yang mewakili panjang minimum gate pulsa dalam satuan dt. Gate pulsa yang ditentukan pengguna harus lebih panjang dari nilai ini.pulse_alignment: Nilai integer yang mewakili resolusi waktu dari waktu mulai instruksi gate. Instruksi gate harus dimulai pada waktu yang merupakan kelipatan dari nilai ini.acquire_alignment: Nilai integer yang mewakili resolusi waktu dari waktu mulai instruksi measure. Instruksi measure harus dimulai pada waktu yang merupakan kelipatan dari nilai ini.
Parameter layout dan topologi
basis_gates(List[str] | None) - Daftar nama gate basis untuk di-unroll. Misalnya ['u1', 'u2', 'u3', 'cx']. JikaNone, tidak dilakukan unroll.coupling_map(CouplingMap | List[List[int]]) - Coupling map berarah (bisa kustom) sebagai target dalam pemetaan. Jika coupling map simetris, kedua arah perlu ditentukan. Format yang didukung:- Instance CouplingMap
- List - harus diberikan sebagai matriks ketetanggaan, di mana setiap entri menentukan semua interaksi dua Qubit berarah yang didukung QPU. Misalnya: [[0, 1], [0, 3], [1, 2], [1, 5], [2, 5], [4, 1], [5, 3]]
inst_map(List[InstructionScheduleMap] | None) - Pemetaan operasi circuit ke jadwal pulsa. JikaNone,instruction_schedule_mapQPU yang digunakan.
Parameter untuk memengaruhi cara kerja Transpilerβ
Parameter-parameter ini memengaruhi tahap transpilasi tertentu. Beberapa di antaranya bisa memengaruhi beberapa tahap, tapi hanya dicantumkan di satu tahap untuk menyederhanakan. Jika kamu menentukan argumen, seperti initial_layout untuk Qubit yang ingin digunakan, nilai tersebut menggantikan semua pass yang bisa mengubahnya. Dengan kata lain, Transpiler tidak akan mengubah apa pun yang kamu tentukan secara manual. Untuk detail tentang tahap-tahap tertentu, lihat Tahap Transpiler.
Tahap inisialisasi
hls_config(HLSConfig) - Kelas konfigurasi opsionalHLSConfigyang dioper langsung ke pass transformasiHighLevelSynthesis. Kelas konfigurasi ini memungkinkan kamu menentukan daftar algoritma sintesis dan parameternya untuk berbagai objek tingkat tinggi.init_method(str) - Nama plugin yang digunakan untuk tahap inisialisasi. Secara default, plugin eksternal tidak digunakan. Kamu bisa melihat daftar plugin yang terinstal dengan menjalankanlist_stage_plugins()denganinitsebagai argumen nama tahap.unitary_synthesis_method(str) - Nama metode sintesis unitary yang digunakan. Secara default,defaultdigunakan. Kamu bisa melihat daftar plugin yang terinstal dengan menjalankanunitary_synthesis_plugin_names().unitary_synthesis_plugin_config(dict) - Dictionary konfigurasi opsional yang dioper langsung ke plugin sintesis unitary. Secara default pengaturan ini tidak berpengaruh karena metode sintesis unitary default tidak menggunakan konfigurasi kustom. Menerapkan konfigurasi kustom hanya diperlukan ketika plugin sintesis unitary ditentukan dengan argumenunitary_synthesis. Karena ini bersifat kustom untuk setiap plugin sintesis unitary, lihat dokumentasi plugin untuk cara menggunakan opsi ini.
Tahap layout
initial_layout(Layout | Dict | List) - Posisi awal Qubit virtual pada Qubit fisik. Jika layout ini membuat circuit kompatibel dengan batasancoupling_map, layout ini akan digunakan. Layout akhir tidak dijamin sama, karena Transpiler bisa memindahkan Qubit melalui swap atau cara lain. Untuk detail lengkapnya, lihat bagian Initial layout.layout_method(str) - Nama pass pemilihan layout (default,dense,sabre, dantrivial). Ini juga bisa berupa nama plugin eksternal yang digunakan untuk tahap layout. Kamu bisa melihat daftar plugin yang terinstal dengan menjalankanlist_stage_plugins()denganlayoutuntuk argumenstage_name. Nilai defaultnya adalahsabre.
Tahap routing
routing_method(str) - Nama pass routing (basic,lookahead,default,sabre, ataunone). Ini juga bisa berupa nama plugin eksternal yang digunakan untuk tahap routing. Kamu bisa melihat daftar plugin yang terinstal dengan menjalankanlist_stage_plugins()denganroutinguntuk argumenstage_name. Nilai defaultnya adalahsabre.
Tahap translation
translation_method(str) - Nama pass translation (default,synthesis,translator,ibm_backend,ibm_dynamic_circuits,ibm_fractional). Ini juga bisa berupa nama plugin eksternal yang digunakan untuk tahap translation. Kamu bisa melihat daftar plugin yang terinstal dengan menjalankanlist_stage_plugins()dengantranslationuntuk argumenstage_name. Nilai defaultnya adalahtranslator.
Tahap optimasi
approximation_degree(float, dalam rentang 0-1 | None) - Dial heuristik yang digunakan untuk aproksimasi circuit (1.0 = tidak ada aproksimasi, 0.0 = aproksimasi maksimal). Nilai defaultnya adalah 1.0. MenentukanNonemengatur derajat aproksimasi ke tingkat error yang dilaporkan. Lihat bagian Approximation degree untuk detail lebih lanjut.optimization_method(str) - Nama plugin yang digunakan untuk tahap optimasi. Secara default plugin eksternal tidak digunakan. Kamu bisa melihat daftar plugin yang terinstal dengan menjalankanlist_stage_plugins()denganoptimizationuntuk argumenstage_name.
Tahap scheduling
scheduling_method(str) - Nama pass scheduling. Ini juga bisa berupa nama plugin eksternal yang digunakan untuk tahap scheduling. Kamu bisa melihat daftar plugin yang terinstal dengan menjalankanlist_stage_plugins()denganschedulinguntuk argumenstage_name.- 'as_soon_as_possible': Jadwalkan instruksi secara greedy, sesegera mungkin pada resource Qubit (alias:
asap). - 'as_late_as_possible': Jadwalkan instruksi selambat mungkin, yaitu menjaga Qubit dalam ground state jika memungkinkan (alias:
alap). Ini adalah nilai default.
- 'as_soon_as_possible': Jadwalkan instruksi secara greedy, sesegera mungkin pada resource Qubit (alias:
Eksekusi Transpiler
seed_transpiler(int) - Mengatur seed acak untuk bagian stokastik dari Transpiler.
Nilai default berikut digunakan jika kamu tidak menentukan parameter apa pun di atas. Lihat halaman referensi API metode ini untuk informasi lebih lanjut:
generate_preset_pass_manager(
optimization_level=1,
backend=None,
target=None,
basis_gates=None,
coupling_map=None,
initial_layout=None,
layout_method=None,
routing_method=None,
translation_method=None,
scheduling_method=None,
approximation_degree=1.0,
seed_transpiler=None,
unitary_synthesis_method="default",
unitary_synthesis_plugin_config=None,
hls_config=None,
init_method=None,
optimization_method=None,
)
<qiskit.transpiler.passmanager.StagedPassManager at 0x7fa3e6dab110>
Langkah selanjutnyaβ
- Pelajari cara Mengatur level optimasi.
- Tinjau lebih banyak Parameter yang umum digunakan.
- Pelajari cara Mengatur level optimasi saat menggunakan Qiskit Runtime.
- Kunjungi topik Transpile dengan pass manager.
- Untuk contoh, lihat Merepresentasikan komputer kuantum.
- Pelajari cara mentranspilasi circuit sebagai bagian dari alur kerja pola Qiskit menggunakan Qiskit Runtime.
- Tinjau dokumentasi API Transpile.