Tetapan lalai dan pilihan konfigurasi transpilasi
Package versions
Kod pada halaman ini dibangunkan menggunakan keperluan berikut. Kami mengesyorkan menggunakan versi ini atau yang lebih baharu.
qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1
Litar abstrak perlu ditranspil kerana QPU mempunyai set gate asas yang terhad dan tidak boleh melaksanakan operasi sewenang-wenangnya. Fungsi transpiler adalah untuk mengubah litar sewenang-wenangnya supaya ia boleh dijalankan pada QPU yang ditentukan. Ini dilakukan dengan menterjemahkan litar ke gate asas yang disokong, dan dengan memasukkan gate SWAP yang diperlukan, supaya kesambungan litar sepadan dengan QPU.
Seperti yang dijelaskan dalam Transpil dengan pengurus pass, anda boleh membuat pengurus pass menggunakan fungsi generate_preset_pass_manager dan menghantar litar atau senarai litar ke kaedah run-nya untuk mentranspilnya. Anda boleh memanggil generate_preset_pass_manager dengan hanya menghantar tahap pengoptimuman dan backend, memilih untuk menggunakan lalai untuk semua pilihan lain, atau anda boleh menghantar argumen tambahan ke fungsi untuk menghaluskan transpilasi.
Penggunaan asas tanpa parameterβ
Dalam contoh ini, kami menghantar litar dan QPU sasaran ke transpiler tanpa menentukan sebarang parameter tambahan.
Buat litar 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")
Transpil litar 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. Terdapat dua kelas argumen: yang menerangkan sasaran kompilasi, dan yang mempengaruhi cara transpiler berfungsi.
Semua parameter kecuali optimization_level adalah pilihan. Untuk butiran penuh, lihat dokumentasi API Transpiler.
optimization_level(int) - Berapa banyak pengoptimuman yang perlu dilakukan pada litar. Integer dalam julat (0 - 3). Tahap yang lebih tinggi menghasilkan litar yang lebih dioptimumkan, dengan kos masa transpilasi yang lebih lama. Lihat Tetapkan tahap pengoptimuman transpiler untuk butiran lanjut.
Parameter yang digunakan untuk menerangkan sasaran kompilasi:β
Argumen ini menerangkan QPU sasaran untuk pelaksanaan litar, termasuk maklumat seperti peta pasangan QPU (yang menerangkan kesambungan qubit), gate asas yang disokong oleh QPU, dan kadar ralat gate.
Banyak parameter ini diterangkan secara terperinci dalam Parameter yang kerap digunakan untuk transpilasi.
Parameter QPU (Backend)
Backend)Parameter Backend - Jika anda menentukan backend, anda tidak perlu menentukan target atau sebarang pilihan backend lain. Begitu juga, jika anda menentukan target, anda tidak perlu menentukan backend atau sebarang pilihan backend lain.
backend(Backend) - Jika ini ditetapkan, transpiler mengkompilasi litar input ke peranti ini. Jika sebarang pilihan lain ditetapkan yang mempengaruhi tetapan ini, seperticoupling_map, ia mengatasi tetapan daribackend.target(Target) - Sasaran transpiler backend. Biasanya ini ditentukan sebagai sebahagian daripada argumen backend, tetapi jika anda membina objek Target secara manual, anda boleh menentukannya di sini. Ini mengatasi sasaran daribackend.backend_properties(BackendProperties) - Sifat yang dikembalikan oleh QPU, termasuk maklumat tentang ralat gate, ralat readout, masa koherensi qubit, dan sebagainya. Cari QPU yang menyediakan maklumat ini dengan menjalankanbackend.properties().timing_constraints(Dict[str, int] | None) - Sekatan perkakasan kawalan pilihan pada resolusi masa arahan. Maklumat ini disediakan oleh konfigurasi QPU. Jika QPU tidak mempunyai sebarang sekatan pada peruntukan masa arahan,timing_constraintsadalahNonedan tiada pelarasan dilakukan. QPU mungkin melaporkan satu set sekatan, iaitu:granularity: Nilai integer yang mewakili resolusi gate nadi minimum dalam unit dt. Gate nadi yang ditentukan oleh pengguna perlu mempunyai tempoh yang merupakan gandaan nilai granulariti ini.min_length: Nilai integer yang mewakili panjang gate nadi minimum dalam unit dt. Gate nadi yang ditentukan oleh pengguna perlu lebih panjang daripada panjang ini.pulse_alignment: Nilai integer yang mewakili resolusi masa masa mula arahan gate. Arahan gate perlu dimulakan pada masa yang merupakan gandaan nilai ini.acquire_alignment: Nilai integer yang mewakili resolusi masa masa mula arahan ukur. Arahan ukur perlu dimulakan pada masa yang merupakan gandaan nilai ini.
Parameter susun atur dan topologi
basis_gates(List[str] | None) - Senarai nama gate asas untuk dibuka. Contohnya ['u1', 'u2', 'u3', 'cx']. JikaNone, tidak dibuka.coupling_map(CouplingMap | List[List[int]]) - Peta pasangan terarah (mungkin tersuai) untuk disasarkan dalam pemetaan. Jika peta pasangan adalah simetri, kedua-dua arah perlu ditentukan. Format ini disokong:- Contoh CouplingMap
- Senarai - mesti diberikan sebagai matriks kebersebelahan, di mana setiap entri menentukan semua interaksi dua qubit terarah yang disokong oleh QPU. Contohnya: [[0, 1], [0, 3], [1, 2], [1, 5], [2, 5], [4, 1], [5, 3]]
inst_map(List[InstructionScheduleMap] | None) - Pemetaan operasi litar kepada jadual nadi. JikaNone,instruction_schedule_mapQPU digunakan.
Parameter yang digunakan untuk mempengaruhi cara transpiler berfungsiβ
Parameter ini mempengaruhi peringkat transpilasi tertentu. Sesetengahnya mungkin mempengaruhi berbilang peringkat, tetapi hanya disenaraikan di bawah satu peringkat untuk kesederhanaan. Jika anda menentukan argumen, seperti initial_layout untuk qubit yang anda ingin gunakan, nilai tersebut mengatasi semua pass yang boleh mengubahnya. Dengan kata lain, transpiler tidak akan mengubah apa-apa yang anda tentukan secara manual. Untuk butiran tentang peringkat tertentu, lihat Peringkat transpiler.
Peringkat permulaan
hls_config(HLSConfig) - Kelas konfigurasi pilihanHLSConfigyang dihantar terus ke pass transformasiHighLevelSynthesis. Kelas konfigurasi ini membolehkan anda menentukan senarai algoritma sintesis dan parameternya untuk pelbagai objek tahap tinggi.init_method(str) - Nama plugin untuk digunakan bagi peringkat permulaan. Secara lalai, plugin luaran tidak digunakan. Anda boleh melihat senarai plugin yang dipasang dengan menjalankanlist_stage_plugins()denganinituntuk argumen nama peringkat.unitary_synthesis_method(str) - Nama kaedah sintesis uniter untuk digunakan. Secara lalai,defaultdigunakan. Anda boleh melihat senarai plugin yang dipasang dengan menjalankanunitary_synthesis_plugin_names().unitary_synthesis_plugin_config(dict) - Kamus konfigurasi pilihan yang dihantar terus ke plugin sintesis uniter. Secara lalai tetapan ini tidak memberi kesan kerana kaedah sintesis uniter lalai tidak mengambil konfigurasi tersuai. Menggunakan konfigurasi tersuai hanya perlu apabila plugin sintesis uniter ditentukan dengan argumenunitary_synthesis. Oleh kerana ini adalah tersuai untuk setiap plugin sintesis uniter, rujuk dokumentasi plugin untuk cara menggunakan pilihan ini.
Peringkat susun atur
initial_layout(Layout | Dict | List) - Kedudukan awal qubit maya pada qubit fizikal. Jika susun atur ini menjadikan litar serasi dengan sekatancoupling_map, ia akan digunakan. Susun atur akhir tidak dijamin sama, kerana transpiler mungkin mengatur qubit melalui pertukaran atau cara lain. Untuk butiran penuh, lihat bahagian Susun atur awal.layout_method(str) - Nama pass pemilihan susun atur (default,dense,sabre, dantrivial). Ini juga boleh menjadi nama plugin luaran untuk digunakan bagi peringkat susun atur. Anda boleh melihat senarai plugin yang dipasang dengan menjalankanlist_stage_plugins()denganlayoutuntuk argumenstage_name. Nilai lalainya ialahsabre.
Peringkat penghalaan
routing_method(str) - Nama pass penghalaan (basic,lookahead,default,sabre, ataunone). Ini juga boleh menjadi nama plugin luaran untuk digunakan bagi peringkat penghalaan. Anda boleh melihat senarai plugin yang dipasang dengan menjalankanlist_stage_plugins()denganroutinguntuk argumenstage_name. Nilai lalainya ialahsabre.
Peringkat terjemahan
translation_method(str) - Nama pass terjemahan (default,synthesis,translator,ibm_backend,ibm_dynamic_circuits,ibm_fractional). Ini juga boleh menjadi nama plugin luaran untuk digunakan bagi peringkat terjemahan. Anda boleh melihat senarai plugin yang dipasang dengan menjalankanlist_stage_plugins()dengantranslationuntuk argumenstage_name. Nilai lalainya ialahtranslator.
Peringkat pengoptimuman
approximation_degree(float, dalam julat 0-1 | None) - Penentu heuristik yang digunakan untuk penghampiran litar (1.0 = tiada penghampiran, 0.0 = penghampiran maksimum). Nilai lalainya ialah 1.0. MenentukanNonemenetapkan darjat penghampiran kepada kadar ralat yang dilaporkan. Lihat bahagian Darjat penghampiran untuk butiran lanjut.optimization_method(str) - Nama plugin untuk digunakan bagi peringkat pengoptimuman. Secara lalai plugin luaran tidak digunakan. Anda boleh melihat senarai plugin yang dipasang dengan menjalankanlist_stage_plugins()denganoptimizationuntuk argumenstage_name.
Peringkat penjadualan
scheduling_method(str) - Nama pass penjadualan. Ini juga boleh menjadi nama plugin luaran untuk digunakan bagi peringkat penjadualan. Anda boleh melihat senarai plugin yang dipasang dengan menjalankanlist_stage_plugins()denganschedulinguntuk argumenstage_name.- 'as_soon_as_possible': Jadualkan arahan secara tamak, seawal mungkin pada sumber qubit (alias:
asap). - 'as_late_as_possible': Jadualkan arahan lewat, iaitu, mengekalkan qubit dalam keadaan asas apabila boleh (alias:
alap). Ini adalah lalai.
- 'as_soon_as_possible': Jadualkan arahan secara tamak, seawal mungkin pada sumber qubit (alias:
Pelaksanaan transpiler
seed_transpiler(int) - Menetapkan benih rawak untuk bahagian stokastik transpiler.
Nilai lalai berikut digunakan jika anda tidak menentukan sebarang parameter di atas. Rujuk halaman rujukan API kaedah ini untuk maklumat 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 seterusnyaβ
- Pelajari cara Tetapkan tahap pengoptimuman.
- Semak lebih banyak Parameter yang kerap digunakan.
- Pelajari cara Tetapkan tahap pengoptimuman apabila menggunakan Qiskit Runtime.
- Lawati topik Transpil dengan pengurus pass.
- Untuk contoh, lihat Mewakili komputer kuantum.
- Pelajari cara mentranspil litar sebagai sebahagian daripada aliran kerja corak Qiskit menggunakan Qiskit Runtime.
- Semak dokumentasi API Transpil.