Mga default na setting at mga opsyon sa configuration ng 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 pa.
qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1
Kailangang i-transpile ang mga abstract circuit dahil limitado lang ang set ng basis gates ng mga QPU at hindi nito maaaring isagawa ang mga arbitrary na operasyon. Ang tungkulin ng transpiler ay baguhin ang mga arbitrary circuit para mapatakbo ang mga ito sa isang tinukoy na QPU. Ginagawa ito sa pamamagitan ng pagsasalin ng mga circuit sa mga sinusuportahang basis gates, at sa pag-introduce ng mga SWAP gate kung kinakailangan, para matugma ang connectivity ng circuit sa QPU.
Tulad ng ipinaliwanag sa Transpile with pass managers, maaari kang gumawa ng pass manager gamit ang function na generate_preset_pass_manager at magpasa ng circuit o listahan ng mga circuit sa run method nito para i-transpile ang mga ito. Maaari mong tawagan ang generate_preset_pass_manager na nagpapasa lamang ng optimization level at backend, na pinipiling gamitin ang mga default para sa lahat ng iba pang opsyon, o maaari kang magpasa ng karagdagang mga argumento sa function para pinong-ayusin ang transpilation.
Pangunahing paggamit nang walang mga parameterβ
Sa halimbawang ito, nagpapasa tayo ng circuit at target na QPU sa transpiler nang hindi tinukoy ang anumang karagdagang parameter.
Gumawa ng circuit at tingnan ang resulta:
# 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")
I-transpile ang circuit at tingnan ang resulta:
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)
Lahat ng available na parameterβ
Narito ang lahat ng available na parameter para sa function na generate_preset_pass_manager. May dalawang klase ng mga argumento: ang mga naglalarawan sa target ng compilation, at ang mga nakaka-impluwensya sa paraan ng paggawa ng transpiler.
Lahat ng parameter maliban sa optimization_level ay opsyonal. Para sa buong detalye, tingnan ang Transpiler API documentation.
optimization_level(int) - Gaano karaming optimization ang isasagawa sa mga circuit. Integer sa hanay (0 - 3). Mas mataas na mga antas ang gumagawa ng mas optimized na mga circuit, sa gastos ng mas matagal na transpilation time. Tingnan ang Set transpiler optimization level para sa mas maraming detalye.
Mga parameter na ginagamit para ilarawan ang compilation target:β
Ang mga argumento na ito ay naglalarawan sa target na QPU para sa circuit execution, kasama ang impormasyon tulad ng coupling map ng QPU (na naglalarawan ng connectivity ng mga qubit), ang mga basis gate na sinusuportahan ng QPU, at ang mga error rate ng mga gate.
Marami sa mga parameter na ito ay inilarawan nang detalyado sa Commonly used parameters for transpilation.
Mga parameter ng QPU (Backend)
Backend)Mga parameter ng Backend - Kung tinukoy mo ang backend, hindi mo na kailangang tukuyin ang target o anumang iba pang backend options. Gayundin, kung tinukoy mo ang target, hindi mo na kailangang tukuyin ang backend o anumang iba pang backend options.
backend(Backend) - Kung ito ay nakatakda, kino-compile ng transpiler ang input circuit sa device na ito. Kung may anumang iba pang opsyon na nakatakda na nakaka-apekto sa mga setting na ito, tulad ngcoupling_map, ino-override nito ang mga setting mula sabackend.target(Target) - Isang backend transpiler target. Karaniwang tinukoy ito bilang bahagi ng backend argument, ngunit kung mano-manong nagawa mo ang isang Target object, maaari mo itong tukuyin dito. Ino-override nito ang target mula sabackend.backend_properties(BackendProperties) - Mga katangian na ibinalik ng isang QPU, kasama ang impormasyon tungkol sa mga gate error, readout error, qubit coherence time, at iba pa. Hanapin ang QPU na nagbibigay ng impormasyong ito sa pamamagitan ng pagpapatakbo ngbackend.properties().timing_constraints(Dict[str, int] | None) - Isang opsyonal na hardware restriction sa instruction time resolution. Ang impormasyong ito ay ibinibigay ng QPU configuration. Kung walang restriction ang QPU sa instruction time allocation, angtiming_constraintsayNoneat walang adjustment na isinasagawa. Maaaring mag-ulat ang QPU ng set ng mga restriction, katulad ng:granularity: Isang integer value na kumakatawan sa minimum na pulse gate resolution sa mga unit ng dt. Ang isang user-defined pulse gate ay dapat may duration na multiple ng granularity value na ito.min_length: Isang integer value na kumakatawan sa minimum na pulse gate length sa mga unit ng dt. Ang isang user-defined pulse gate ay dapat na mas mahaba kaysa sa length na ito.pulse_alignment: Isang integer value na kumakatawan sa time resolution ng starting time ng gate instruction. Ang mga gate instruction ay dapat magsimula sa oras na multiple ng value na ito.acquire_alignment: Isang integer value na kumakatawan sa time resolution ng starting time ng measure instruction. Ang measure instruction ay dapat magsimula sa oras na multiple ng value na ito.
Mga parameter ng Layout at topology
basis_gates(List[str] | None) - Listahan ng mga basis gate name na i-unroll. Halimbawa ['u1', 'u2', 'u3', 'cx']. KungNone, huwag mag-unroll.coupling_map(CouplingMap | List[List[int]]) - Directed coupling map (maaaring custom) para i-target sa mapping. Kung symmetric ang coupling map, kailangan tukuyin ang dalawang direksyon. Sinusuportahan ang mga format na ito:- CouplingMap instance
- List - dapat ibigay bilang adjacency matrix, kung saan tinukoy ng bawat entry ang lahat ng directed two-qubit interaction na sinusuportahan ng QPU. Halimbawa: [[0, 1], [0, 3], [1, 2], [1, 5], [2, 5], [4, 1], [5, 3]]
inst_map(List[InstructionScheduleMap] | None) - Mapping ng mga circuit operation sa pulse schedule. KungNone, ginagamit anginstruction_schedule_mapng QPU.
Mga parameter na ginagamit para maimpluwensyahan kung paano gumagana ang transpilerβ
Ang mga parameter na ito ay nakaka-apekto sa mga tiyak na yugto ng transpilation. Ang ilan sa mga ito ay maaaring makaka-apekto sa maraming yugto, ngunit inilista lamang sa ilalim ng isang yugto para sa pagiging simple. Kung tumukoy ka ng argumento, tulad ng initial_layout para sa mga qubit na gusto mong gamitin, ang value na iyon ay ino-override ang lahat ng pass na maaaring baguhin ito. Sa ibang salita, hindi babaguhin ng transpiler ang anumang mano-manong tinukoy mo. Para sa mga detalye tungkol sa mga tiyak na yugto, tingnan ang Transpiler stages.
Yugto ng Initialization
hls_config(HLSConfig) - Isang opsyonal na configuration class naHLSConfigna direktang ipinasa saHighLevelSynthesistransformation pass. Ang configuration class na ito ay nagbibigay-daan sa iyo na tukuyin ang mga listahan ng synthesis algorithm at ang kanilang mga parameter para sa iba't ibang high-level na object.init_method(str) - Ang plugin name na gagamitin para sa initialization stage. By default, hindi ginagamit ang external plugin. Maaari kang makakita ng listahan ng mga naka-install na plugin sa pamamagitan ng pagpapatakbo nglist_stage_plugins()na mayinitpara sa stage name argument.unitary_synthesis_method(str) - Ang pangalan ng unitary synthesis method na gagamitin. By default, ginagamit angdefault. Maaari kang makakita ng listahan ng mga naka-install na plugin sa pamamagitan ng pagpapatakbo ngunitary_synthesis_plugin_names().unitary_synthesis_plugin_config(dict) - Isang opsyonal na configuration dictionary na direktang ipinasa sa unitary synthesis plugin. By default, walang epekto ang setting na ito dahil ang default na unitary synthesis method ay hindi tumatanggap ng custom configuration. Ang pag-apply ng custom configuration ay kailangan lamang kapag ang isang unitary synthesis plugin ay tinukoy gamit angunitary_synthesisargument. Dahil ito ay custom para sa bawat unitary synthesis plugin, sumangguni sa dokumentasyon ng plugin para malaman kung paano gamitin ang opsyong ito.
Yugto ng Layout
initial_layout(Layout | Dict | List) - Unang posisyon ng mga virtual qubit sa mga physical qubit. Kung ang layout na ito ay gagawing compatible ang circuit sa mga constraint ngcoupling_map, gagamitin ito. Hindi ginagarantiyahan na magiging pareho ang final layout, dahil maaaring mag-permute ng mga qubit ang transpiler sa pamamagitan ng mga swap o iba pang paraan. Para sa buong detalye, tingnan ang Initial layout section.layout_method(str) - Pangalan ng layout selection pass (default,dense,sabre, attrivial). Maaari rin itong maging external plugin name para gamitin sa layout stage. Maaari kang makakita ng listahan ng mga naka-install na plugin sa pamamagitan ng pagpapatakbo nglist_stage_plugins()na maylayoutpara sastage_nameargument. Ang default value aysabre.
Yugto ng Routing
routing_method(str) - Pangalan ng routing pass (basic,lookahead,default,sabre, onone). Maaari rin itong maging external plugin name para gamitin sa routing stage. Maaari kang makakita ng listahan ng mga naka-install na plugin sa pamamagitan ng pagpapatakbo nglist_stage_plugins()na mayroutingpara sastage_nameargument. Ang default value aysabre.
Yugto ng Translation
translation_method(str) - Pangalan ng translation pass (default,synthesis,translator,ibm_backend,ibm_dynamic_circuits,ibm_fractional). Maaari rin itong maging external plugin name para gamitin sa translation stage. Maaari kang makakita ng listahan ng mga naka-install na plugin sa pamamagitan ng pagpapatakbo nglist_stage_plugins()na maytranslationpara sastage_nameargument. Ang default value aytranslator.
Yugto ng Optimization
approximation_degree(float, sa hanay 0-1 | None) - Heuristic dial na ginagamit para sa circuit approximation (1.0 = walang approximation, 0.0 = maximum na approximation). Ang default value ay 1.0. Ang pagtukoy ngNoneay nagtatakda ng approximation degree sa iniulat na error rate. Tingnan ang Approximation degree section para sa mas maraming detalye.optimization_method(str) - Ang plugin name na gagamitin para sa optimization stage. By default, hindi ginagamit ang external plugin. Maaari kang makakita ng listahan ng mga naka-install na plugin sa pamamagitan ng pagpapatakbo nglist_stage_plugins()na mayoptimizationpara sastage_nameargument.
Yugto ng Scheduling
scheduling_method(str) - Pangalan ng scheduling pass. Maaari rin itong maging external plugin name para gamitin sa scheduling stage. Maaari kang makakita ng listahan ng mga naka-install na plugin sa pamamagitan ng pagpapatakbo nglist_stage_plugins()na mayschedulingpara sastage_nameargument.- 'as_soon_as_possible': I-schedule ang mga instruction nang masigasig, nang maaga hangga't maaari sa isang qubit resource (alias:
asap). - 'as_late_as_possible': I-schedule ang mga instruction nang huli, iyon ay, pinapanatiling nasa ground state ang mga qubit hangga't maaari (alias:
alap). Ito ang default.
- 'as_soon_as_possible': I-schedule ang mga instruction nang masigasig, nang maaga hangga't maaari sa isang qubit resource (alias:
Pagpapatupad ng Transpiler
seed_transpiler(int) - Nagtatakda ng random seed para sa mga stochastic na bahagi ng transpiler.
Ang mga sumusunod na default value ay ginagamit kung hindi mo tinukoy ang alinman sa mga parameter sa itaas. Sumangguni sa API reference page ng method para sa karagdagang impormasyon:
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>
Mga susunod na hakbangβ
- Alamin kung paano Itakda ang optimization level.
- Suriin ang iba pang Mga karaniwang ginagamit na parameter.
- Alamin kung paano Itakda ang optimization level kapag gumagamit ng Qiskit Runtime.
- Bisitahin ang paksa na Transpile with pass managers.
- Para sa mga halimbawa, tingnan ang Representing quantum computers.
- Alamin kung paano i-transpile ang mga circuit bilang bahagi ng Qiskit patterns workflow gamit ang Qiskit Runtime.
- Suriin ang Transpile API documentation.