Parameter yang kerap digunakan untuk transpilasi
Package versions
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
Halaman ini menerangkan beberapa parameter yang lebih kerap digunakan untuk transpilasi tempatan. Parameter ini dikonfigurasi menggunakan argumen kepada generate_preset_pass_manager atau transpile.
Darjah penghampiran
Anda boleh menggunakan darjah penghampiran untuk menentukan sejauh mana anda mahu Circuit yang terhasil sepadan dengan Circuit yang diingini (input). Ini ialah nilai float dalam julat (0.0 - 1.0), di mana 0.0 adalah penghampiran maksimum dan 1.0 (lalai) adalah tanpa penghampiran. Nilai yang lebih kecil menukar ketepatan output dengan kemudahan pelaksanaan (iaitu, lebih sedikit get). Nilai lalai ialah 1.0.
Dalam sintesis uniter dua qubit (digunakan dalam peringkat awal semua tahap dan untuk peringkat pengoptimuman dengan tahap pengoptimuman 3), nilai ini menentukan fideliti sasaran bagi penguraian output. Iaitu, berapa banyak ralat yang diperkenalkan apabila perwakilan matriks Circuit ditukar kepada get diskret. Jika darjah penghampiran adalah nilai yang lebih rendah (lebih banyak penghampiran), Circuit output dari sintesis akan lebih berbeza daripada matriks input, tetapi juga berkemungkinan mempunyai lebih sedikit get (kerana sebarang operasi dua qubit sewenang-wenangnya boleh diuraikan dengan sempurna dengan paling banyak tiga get CX) dan lebih mudah untuk dijalankan.
Apabila darjah penghampiran kurang daripada 1.0, Circuit dengan satu atau dua get CX mungkin disintesis, yang membawa kepada lebih sedikit ralat daripada perkakasan, tetapi lebih banyak daripada penghampiran. Memandangkan CX adalah get yang paling mahal dari segi ralat, mungkin bermanfaat untuk mengurangkan bilangannya dengan mengorbankan fideliti dalam sintesis (teknik ini digunakan untuk meningkatkan isipadu kuantum pada peranti IBM®: Validating quantum computers using randomized model circuits).
Sebagai contoh, kami menjana UnitaryGate dua qubit rawak yang akan disintesis pada peringkat awal. Menetapkan approximation_degree kurang daripada 1.0 mungkin menjana Circuit penghampiran. Kami juga mesti menentukan basis_gates untuk memberitahu kaedah sintesis get mana yang boleh digunakannya untuk sintesis penghampiran.
# 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 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 kerana penghampiran memerlukan lebih sedikit get CX.
Benih penjana nombor rawak
Beberapa bahagian Transpiler adalah stokastik, jadi larian transpilasi berulang mungkin mengembalikan keputusan yang berbeza. Untuk mendapatkan keputusan yang boleh diulang, anda boleh menetapkan benih untuk penjana nombor pseudorawak menggunakan argumen seed_transpiler. Larian berulang menggunakan benih yang sama akan mengembalikan keputusan 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")
Susun atur awal
Sebelum transpilasi, qubit yang terkandung dalam Circuit anda adalah qubit maya yang tidak semestinya bersamaan dengan qubit fizikal pada Backend sasaran. Anda boleh menentukan pemetaan awal qubit maya kepada qubit fizikal menggunakan argumen initial_layout. Perhatikan bahawa susun atur qubit akhir mungkin berbeza daripada susun atur awal kerana Transpiler mungkin mengatur semula qubit menggunakan get swap atau cara lain.
Dalam contoh di bawah, kami membina susun atur awal untuk backend mock FakeSherbrooke dengan mencipta objek Layout. Susun atur kami memetakan qubit pertama Circuit kami kepada qubit 5 Sherbrooke, dan memetakan qubit kedua Circuit kami kepada qubit 6 Sherbrooke. Perhatikan bahawa qubit fizikal sentiasa diwakili oleh integer.
Backend mock FakeSherbrooke daripada qiskit_ibm_runtime digunakan dalam contoh-contoh ini, tetapi anda boleh mencubanya pada mana-mana backend nyata atau palsu yang serasi dengan Qiskit. Keputusan anda mungkin berbeza.
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, anda juga boleh menghantar senarai integer, di mana elemen ke- senarai mengandungi qubit fizikal yang qubit ke- hendak dipetakan. Contohnya:
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)
Anda boleh menggunakan fungsi plot_error_map untuk menjana gambar rajah graf peranti dengan maklumat ralat dan qubit fizikal yang berlabel. Anda juga boleh melihat gambar rajah yang serupa pada halaman Sumber Pengiraan.
from qiskit.visualization import plot_error_map
plot_error_map(backend, figsize=(30, 24))
Pilihan peringkat dan plugin Transpiler
Pilihan ini mempunyai akhiran _method. Ia mempengaruhi cara Transpiler berfungsi dan digunakan untuk cuba mendapatkan output yang lebih baik, berbeza, atau tertentu daripada Transpiler.
-
init_method(str) - Plugin yang digunakan untuk peringkat permulaan. -
layout_method(str) - Laluan pemilihan susun atur (trivial,dense,sabre). Ini juga boleh menjadi nama plugin luaran yang digunakan untuk peringkat susun atur. -
optimization_method(str) - Plugin yang digunakan untuk peringkat pengoptimuman. -
routing_method(str) - Nama laluan penghalaan (basic,lookahead,default,sabre,none). Ini juga boleh menjadi nama plugin luaran yang digunakan untuk peringkat penghalaan. -
scheduling_method(str) - Nama laluan penjadualan. Ini juga boleh menjadi nama plugin luaran yang digunakan untuk peringkat penjadualan.-
as_soon_as_possible: Jadualkan arahan secara tamak: sedini mungkin pada sumber qubit (alias:asap). -
as_late_as_possible: Jadualkan arahan lewat. Iaitu, kekalkan qubit dalam keadaan asas apabila boleh (alias:alap).
-
-
translation_method(str) - Nama laluan terjemahan (unroller,translator,synthesis). Ini juga boleh menjadi nama plugin luaran yang digunakan untuk peringkat terjemahan. -
unitary_synthesis_method(str) - Nama kaedah sintesis uniter yang hendak digunakan. Secara lalai,defaultdigunakan.
Untuk melihat senarai semua plugin yang dipasang bagi peringkat tertentu, jalankan list_stage_plugins("stage_name"). Contohnya, jika anda ingin melihat senarai semua plugin yang dipasang untuk peringkat penghalaan, jalankan list_stage_plugins(routing).
Langkah Seterusnya
- Semak topik Pilihan lalai dan tetapan konfigurasi.
- Pelajari cara Menetapkan tahap pengoptimuman.
- Cuba panduan Bandingkan tetapan Transpiler.
- Semak dokumentasi API Transpiler.