Parameter yang umum digunakan untuk transpilasi
Versi paket
Kode di halaman ini dikembangkan menggunakan persyaratan berikut. Kami menyarankan menggunakan versi ini atau yang lebih baru.
qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1
Halaman ini menjelaskan beberapa parameter yang paling umum digunakan untuk transpilasi lokal. Parameter-parameter ini dikonfigurasi menggunakan argumen ke generate_preset_pass_manager atau transpile.
Tingkat aproksimasi​
Kamu bisa menggunakan tingkat aproksimasi untuk menentukan seberapa dekat kamu ingin Circuit hasil transpilasi cocok dengan Circuit yang diinginkan (input). Ini adalah nilai float dalam rentang (0.0 - 1.0), di mana 0.0 adalah aproksimasi maksimum dan 1.0 (default) berarti tidak ada aproksimasi. Nilai yang lebih kecil menukar akurasi output dengan kemudahan eksekusi (yaitu, lebih sedikit Gate). Nilai defaultnya adalah 1.0.
Dalam sintesis uniter dua-Qubit (digunakan pada tahap awal semua level dan untuk tahap optimasi dengan optimization level 3), nilai ini menentukan target fidelitas dari output dekomposisi. Artinya, seberapa besar kesalahan yang dimasukkan ketika representasi matriks sebuah Circuit dikonversi menjadi gate diskrit. Jika tingkat aproksimasi memiliki nilai lebih rendah (lebih banyak aproksimasi), Circuit output dari sintesis akan lebih berbeda dari matriks input, tetapi kemungkinan juga memiliki lebih sedikit Gate (karena operasi dua-Qubit arbitrari apapun dapat didekomposisi secara sempurna dengan paling banyak tiga CX Gate) dan lebih mudah dijalankan.
Ketika tingkat aproksimasi kurang dari 1.0, Circuit dengan satu atau dua CX Gate mungkin akan disintesis, yang menghasilkan lebih sedikit kesalahan dari hardware, tetapi lebih banyak dari aproksimasi. Karena CX adalah Gate yang paling mahal dalam hal kesalahan, mungkin menguntungkan untuk mengurangi jumlahnya dengan mengorbankan fidelitas dalam sintesis (teknik ini digunakan untuk meningkatkan quantum volume pada perangkat IBM®: Validating quantum computers using randomized model circuits).
Sebagai contoh, kita membuat UnitaryGate dua-Qubit acak yang akan disintesis pada tahap awal. Mengatur approximation_degree kurang dari 1.0 mungkin menghasilkan Circuit aproksimasi. Kita juga harus menentukan basis_gates untuk memberi tahu metode sintesis Gate mana yang dapat digunakan untuk sintesis aproksimasi.
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
from qiskit import QuantumCircuit, QuantumRegister
from qiskit.circuit.library import UnitaryGate
from qiskit.quantum_info import random_unitary
from qiskit.transpiler import generate_preset_pass_manager
UU = random_unitary(4, seed=12345)
rand_U = UnitaryGate(UU)
qubits = QuantumRegister(2, name="q")
qc = QuantumCircuit(qubits)
qc.append(rand_U, qubits)
pass_manager = generate_preset_pass_manager(
optimization_level=1,
approximation_degree=0.85,
basis_gates=["sx", "rz", "cx"],
)
approx_qc = pass_manager.run(qc)
print(approx_qc.count_ops()["cx"])
2
Ini menghasilkan output 2 karena aproksimasi membutuhkan lebih sedikit CX Gate.
Seed generator angka acak​
Beberapa bagian dari Transpiler bersifat stokastik, sehingga transpilasi yang diulang mungkin menghasilkan hasil yang berbeda. Untuk mendapatkan hasil yang dapat direproduksi, kamu bisa mengatur seed untuk generator angka pseudoacak menggunakan argumen seed_transpiler. Eksekusi berulang menggunakan seed yang sama akan menghasilkan hasil yang sama.
Contoh:
pass_manager = generate_preset_pass_manager(
optimization_level=1, seed_transpiler=11, basis_gates=["sx", "rz", "cx"]
)
optimized_1 = pass_manager.run(qc)
optimized_1.draw("mpl")
Layout awal​
Sebelum transpilasi, Qubit yang terdapat dalam Circuit kamu adalah Qubit virtual yang tidak selalu berkorespondensi dengan Qubit fisik pada Backend target. Kamu bisa menentukan pemetaan awal Qubit virtual ke Qubit fisik menggunakan argumen initial_layout. Perlu diingat bahwa layout Qubit akhir mungkin berbeda dari layout awal karena Transpiler mungkin memindahkan Qubit menggunakan swap gate atau cara lain.
Dalam contoh di bawah ini, kita membuat layout awal untuk Backend mock FakeSherbrooke dengan membuat objek Layout. Layout kita memetakan Qubit pertama Circuit ke Qubit 5 Sherbrooke, dan memetakan Qubit kedua Circuit ke Qubit 6 Sherbrooke. Perlu diingat bahwa Qubit fisik selalu direpresentasikan dengan bilangan bulat.
from qiskit_ibm_runtime.fake_provider import FakeSherbrooke
from qiskit.transpiler import Layout
backend = FakeSherbrooke()
a, b = qubits
initial_layout = Layout({a: 5, b: 6})
pass_manager = generate_preset_pass_manager(
optimization_level=1, backend=backend, initial_layout=initial_layout
)
transpiled_circ = pass_manager.run(qc)
transpiled_circ.draw("mpl", idle_wires=False)
Selain menentukan objek Layout, kamu juga bisa melewatkan daftar bilangan bulat, di mana elemen ke- dari daftar berisi Qubit fisik yang harus dipetakan oleh Qubit ke-. Misalnya:
initial_layout = [5, 6]
pass_manager = generate_preset_pass_manager(
optimization_level=1, backend=backend, initial_layout=initial_layout
)
transpiled_circ = pass_manager.run(qc)
transpiled_circ.draw("mpl", idle_wires=False)
Kamu bisa menggunakan fungsi plot_error_map untuk membuat diagram grafik perangkat dengan informasi kesalahan dan dengan label Qubit fisik. Kamu juga bisa melihat diagram serupa di halaman Compute resources.
from qiskit.visualization import plot_error_map
plot_error_map(backend, figsize=(30, 24))
Opsi tahap dan plugin Transpiler​
Opsi-opsi ini memiliki akhiran _method. Mereka mempengaruhi cara kerja Transpiler dan digunakan untuk mencoba mendapatkan output yang lebih baik, berbeda, atau spesifik dari Transpiler.
-
init_method(str) - Plugin yang digunakan untuk tahap inisialisasi. -
layout_method(str) - Pass pemilihan layout (trivial,dense,sabre). Ini juga bisa menjadi nama plugin eksternal yang digunakan untuk tahap layout. -
optimization_method(str) - Plugin yang digunakan untuk tahap optimasi. -
routing_method(str) - Nama pass routing (basic,lookahead,default,sabre,none). Ini juga bisa menjadi nama plugin eksternal yang digunakan untuk tahap routing. -
scheduling_method(str) - Nama pass penjadwalan. Ini juga bisa menjadi nama plugin eksternal yang digunakan untuk tahap penjadwalan.as_soon_as_possible: Jadwalkan instruksi secara greedy: sesegera mungkin pada sumber daya Qubit (alias:asap).as_late_as_possible: Jadwalkan instruksi selambat mungkin. Artinya, pertahankan Qubit dalam ground state bila memungkinkan (alias:alap).
-
translation_method(str) - Nama pass translasi (unroller,translator,synthesis). Ini juga bisa menjadi nama plugin eksternal yang digunakan untuk tahap translasi. -
unitary_synthesis_method(str) - Nama metode sintesis uniter yang digunakan. Secara defaultdefaultdigunakan.
Untuk melihat daftar semua plugin yang terinstal untuk tahap tertentu, jalankan list_stage_plugins("stage_name"). Misalnya, jika kamu ingin melihat daftar semua plugin yang terinstal untuk tahap routing, jalankan list_stage_plugins(routing).
Langkah selanjutnya​
- Tinjau topik Opsi dan pengaturan konfigurasi default.
- Pelajari cara Mengatur optimization level.
- Coba panduan Bandingkan pengaturan Transpiler.
- Tinjau dokumentasi API Transpiler.