Mga karaniwang ginagamit na parameter para sa transpilation
Mga bersyon ng package
Ang code sa pahinang ito ay ginawa gamit ang mga sumusunod na kinakailangan. Inirerekomenda naming gamitin ang mga bersyong ito o mas bago.
qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1
Inilalarawan ng pahinang ito ang ilan sa mga mas karaniwang ginagamit na parameter para sa lokal na transpilation. Ang mga parameter na ito ay kino-configure gamit ang mga argumento sa generate_preset_pass_manager o transpile.
Antas ng pagtatantya​
Maaari mong gamitin ang approximation degree upang tukuyin kung gaano kalapit mo gustong itugma ang resultang circuit sa nais (input) na circuit. Ito ay isang float sa saklaw na (0.0 - 1.0), kung saan ang 0.0 ay maximum na pagtatantya at ang 1.0 (default) ay walang pagtatantya. Ang mas maliit na mga halaga ay nagpapalitan ng katumpakan ng output para sa kadalian ng pagpapatupad (ibig sabihin, mas kaunting mga gate). Ang default na halaga ay 1.0.
Sa two-qubit unitary synthesis (ginagamit sa mga paunang yugto ng lahat ng antas at para sa yugto ng optimization na may optimization level 3), ang halagang ito ay tumutukoy sa target na fidelity ng output decomposition. Ibig sabihin, kung gaano karaming error ang ipinakilala kapag ang matrix representation ng isang circuit ay na-convert sa mga discrete gate. Kung ang approximation degree ay mas mababang halaga (mas maraming pagtatantya), ang output circuit mula sa synthesis ay mas mag-iiba mula sa input matrix, ngunit malamang na magkakaroon din ng mas kaunting mga gate (dahil ang anumang arbitrary na two-qubit na operasyon ay maaaring ma-decompose nang perpekto nang may pinakamataas na tatlong CX gate) at mas madaling patakbuhin.
Kapag ang approximation degree ay mas mababa sa 1.0, ang mga circuit na may isa o dalawang CX gate ay maaaring synthesized, na humahantong sa mas kaunting error mula sa hardware, ngunit mas marami mula sa pagtatantya. Dahil ang CX ang pinakamahirap na gate sa mga tuntunin ng error, maaaring kapaki-pakinabang na bawasan ang bilang ng mga ito sa halaga ng fidelity sa synthesis (ang pamamaraang ito ay ginamit upang mapataas ang quantum volume sa IBM® devices: Validating quantum computers using randomized model circuits).
Bilang halimbawa, bumubuo tayo ng random na two-qubit na UnitaryGate na isi-synthesize sa paunang yugto. Ang pagtatakda ng approximation_degree na mas mababa sa 1.0 ay maaaring bumuo ng isang approximate na circuit. Dapat din nating tukuyin ang basis_gates upang malaman ng paraan ng synthesis kung aling mga gate ang maaari nitong gamitin para sa approximate synthesis.
# 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
Nagbubunga ito ng output na 2 dahil ang pagtatantya ay nangangailangan ng mas kaunting CX gate.
Seed ng random number generator​
Ang ilang bahagi ng transpiler ay stochastic, kaya ang paulit-ulit na mga run ng transpilation ay maaaring magbalik ng iba't ibang resulta. Upang makakuha ng reproducible na resulta, maaari mong itakda ang seed para sa pseudorandom number generator gamit ang argumento na seed_transpiler. Ang paulit-ulit na mga run gamit ang parehong seed ay magbabalik ng parehong mga resulta.
Halimbawa:
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")
Paunang layout​
Bago ang transpilation, ang mga qubit na nasa iyong circuit ay mga virtual qubit na hindi kinakailangang katumbas ng mga pisikal na qubit sa target na backend. Maaari mong tukuyin ang paunang pagmamapa ng mga virtual qubit sa mga pisikal na qubit gamit ang argumento na initial_layout. Tandaan na ang panghuling layout ng qubit ay maaaring mag-iba mula sa paunang layout dahil maaaring mag-permute ng mga qubit ang transpiler gamit ang mga swap gate o iba pang paraan.
Sa halimbawa sa ibaba, bumubuo tayo ng paunang layout para sa FakeSherbrooke mock backend sa pamamagitan ng paglikha ng isang Layout na object. Ang aming layout ay nagmamapa ng unang qubit ng aming circuit sa qubit 5 ng Sherbrooke, at nagmamapa ng pangalawang qubit ng aming circuit sa qubit 6 ng Sherbrooke. Tandaan na ang mga pisikal na qubit ay palaging kinakatawan ng mga integer.
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)
Bukod sa pagtukoy ng isang Layout object, maaari ka ring magpasa ng listahan ng mga integer, kung saan ang -th na elemento ng listahan ay naglalaman ng pisikal na qubit na dapat imapa ang -th na qubit. Halimbawa:
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)
Maaari mong gamitin ang function na plot_error_map upang bumuo ng diagram ng device graph na may impormasyon sa error at may mga label na pisikal na qubit. Maaari ka ring tumingin ng mga katulad na diagram sa pahina ng Compute resources.
from qiskit.visualization import plot_error_map
plot_error_map(backend, figsize=(30, 24))
Mga opsyon sa yugto at plugin ng Transpiler​
Ang mga opsyong ito ay may suffix na _method. Naaapektuhan nila kung paano gumagana ang transpiler at ginagamit upang subukang makakuha ng mas maganda, iba, o tiyak na output mula sa transpiler.
-
init_method(str) - Ang plugin na gagamitin para sa yugto ng initialization. -
layout_method(str) - Ang layout selection pass (trivial,dense,sabre). Maaari din itong maging pangalan ng external plugin na gagamitin para sa yugto ng layout. -
optimization_method(str) - Ang plugin na gagamitin para sa yugto ng optimization. -
routing_method(str) - Pangalan ng routing pass (basic,lookahead,default,sabre,none). Maaari din itong maging pangalan ng external plugin na gagamitin para sa yugto ng routing. -
scheduling_method(str) - Pangalan ng scheduling pass. Maaari din itong maging pangalan ng external plugin na gagamitin para sa yugto ng scheduling.as_soon_as_possible: Mag-schedule ng mga instruksyon nang mabilis: nang maaga hangga't maaari sa isang qubit resource (alias:asap).as_late_as_possible: Mag-schedule ng mga instruksyon nang huli. Ibig sabihin, panatilihing nasa ground state ang mga qubit kung maaari (alias:alap).
-
translation_method(str) - Pangalan ng translation pass (unroller,translator,synthesis). Maaari din itong maging pangalan ng external plugin na gagamitin para sa yugto ng translation. -
unitary_synthesis_method(str) - Ang pangalan ng unitary synthesis method na gagamitin. Bilang default, ginagamit angdefault.
Upang makita ang listahan ng lahat ng naka-install na plugin para sa isang partikular na yugto, patakbuhin ang list_stage_plugins("stage_name"). Halimbawa, kung gusto mong makita ang listahan ng lahat ng naka-install na plugin para sa yugto ng routing, patakbuhin ang list_stage_plugins(routing).
Mga susunod na hakbang​
- Suriin ang paksa ng Mga default na opsyon at setting ng configuration.
- Alamin kung paano Itakda ang antas ng optimization.
- Subukan ang gabay na Ikumpara ang mga setting ng transpiler.
- Suriin ang dokumentasyon ng transpiler API.