ค่าเริ่มต้นและตัวเลือกการกำหนดค่าของ Transpilation
เวอร์ชันของแพคเกจ
โค้ดในหน้านี้พัฒนาขึ้นโดยใช้ข้อกำหนดต่อไปนี้ แนะนำให้ใช้เวอร์ชันเหล่านี้หรือใหม่กว่า
qiskit[all]~=2.5.2
qiskit-ibm-runtime~=0.47.0
Abstract circuits ต้องถูก transpile เนื่องจาก QPU มีชุด basis gates ที่จำกัดและไม่สามารถรันการดำเนินการได้ทุกอย่าง ฟังก์ชันของ Transpiler คือการเปลี่ยนวงจรที่หลากหลายให้สามารถรันบน QPU ที่ระบุได้ ซึ่งทำโดยการแปลงวงจรเป็น basis gates ที่รองรับ และเพิ่ม SWAP gates ตามความจำเป็น เพื่อให้การเชื่อมต่อของวงจรตรงกับ QPU
ดังที่อธิบายไว้ใน Transpile ด้วย pass managers คุณสามารถสร้าง pass manager โดยใช้ฟังก์ชัน generate_preset_pass_manager และส่งวงจรหรือรายการวงจรไปยังเมธอด run เพื่อ transpile วงจรเหล่านั้น คุณสามารถเรียก generate_preset_pass_manager โดยส่งแค่ระดับการปรับแต่งและ Backend เพื่อใช้ค่าเริ่มต้นสำหรับตัวเลือกอื่นทั้งหมด หรือจะส่ง argument เพิ่มเติมเพื่อปรับแต่ง transpilation ได้
การใช้งานเบื้องต้นโดยไม่มีพารามิเตอร์
ในตัวอย่างนี้ เราส่งวงจรและ QPU เป้าหมายไปยัง Transpiler โดยไม่ระบุพารามิเตอร์เพิ่มเติม
สร้างวงจรและดูผลลัพธ์:
# 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")
Transpile วงจรและดูผลลัพธ์:
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)
พารามิเตอร์ทั้งหมดที่ใช้ได้
ต่อไปนี้คือพารามิเตอร์ทั้งหมดที่ใช้ได้สำหรับฟังก์ชัน generate_preset_pass_manager อาร์กิวเมนต์แบ่งเป็นสองประเภท คือ ประเภทที่อธิบายเป้าหมายของการ compile และประเภทที่มีผลต่อวิธีการทำงานของ Transpiler
พารามิเตอร์ทั้งหมดยกเว้น optimization_level เป็นตัวเลือก สำหรับรายละเอียดครบถ้วน ดู เอกสาร API ของ Transpiler
optimization_level(int) - ระดับการปรับแต่งที่จะดำเนินการกับวงจร เป็น integer ในช่วง (0 - 3) ระดับที่สูงกว่าจะสร้างวงจรที่ปรับแต่งมากขึ้น แต่ใช้เวลา transpilation นานกว่า ดู การตั้งค่าระดับการปรับแต่งของ Transpiler สำหรับรายละเอียดเพิ่มเติม
พารามิเตอร์สำหรับอธิบายเป้าหมายของการ compile:
argument เหล่านี้อธิบาย QPU เป้าหมายสำหรับการรันวงจร รวมถึงข้อมูลเช่น coupling map ของ QPU (ซึ่งอธิบายการเชื่อมต่อของ Qubit) basis gates ที่ QPU รองรับ และอัตราข้อผิดพลาดของ Gates
พารามิเตอร์เหล่านี้หลายตัวถูกอธิบายอย่างละเอียดใน พารามิเตอร์ที่ใช้บ่อยสำหรับ transpilation
พารามิเตอร์ QPU (`Backend`)
Backend parameters - หากระบุ backend ไม่จำเป็นต้องระบุ target หรือตัวเลือก backend อื่นใด ในทำนองเดียวกัน หากระบุ target ก็ไม่จำเป็นต้องระบุ backend หรือตัวเลือก backend อื่นใด
backend(Backend) - หากตั้งค่านี้ transpiler จะคอมไพล์วงจรอินพุตไปยังอุปกรณ์นี้ หากมีการตั้งค่าตัวเลือกอื่นที่ส่งผลต่อการตั้งค่านี้ เช่นcoupling_mapจะแทนที่การตั้งค่าจากbackendtarget(Target) - เป้าหมาย transpiler ของ backend โดยปกติจะระบุเป็นส่วนหนึ่งของอาร์กิวเมนต์ backend แต่หากคุณสร้างอ็อบเจ็กต์ Target เองด้วยตนเอง สามารถระบุได้ที่นี่ ซึ่งจะแทนที่ target จากbackendbackend_properties(BackendProperties) - คุณสมบัติที่ส่งคืนโดย QPU รวมถึงข้อมูลเกี่ยวกับ gate errors, readout errors, qubit coherence times และอื่นๆ ค้นหา QPU ที่ให้ข้อมูลนี้ได้โดยรันbackend.properties()timing_constraints(Dict[str, int] | None) - ข้อจำกัดฮาร์ดแวร์ควบคุมที่เป็นทางเลือกสำหรับความละเอียดของเวลาคำสั่ง ข้อมูลนี้มาจากการกำหนดค่าของ QPU หาก QPU ไม่มีข้อจำกัดใดๆ เกี่ยวกับการจัดสรรเวลาคำสั่งtiming_constraintsจะเป็นNoneและจะไม่มีการปรับใดๆ QPU อาจรายงานชุดข้อจำกัด ได้แก่:granularity: ค่าจำนวนเต็มที่แสดงความละเอียดขั้นต่ำของ pulse gate ในหน่วย dt pulse gate ที่ผู้ใช้กำหนดเองควรมีระยะเวลาที่เป็นจำนวนเท่าของค่า granularity นี้min_length: ค่าจำนวนเต็มที่แสดงความยาวขั้นต่ำของ pulse gate ในหน่วย dt pulse gate ที่ผู้ใช้กำหนดเองควรมีความยาวมากกว่าความยาวนี้pulse_alignment: ค่าจำนวนเต็มที่แสดงความละเอียดของเวลาที่ gate instruction เริ่มทำงาน gate instructions ควรเริ่มที่เวลาซึ่งเป็นจำนวนเท่าของค่านี้acquire_alignment: ค่าจำนวนเต็มที่แสดงความละเอียดของเวลาที่ measure instruction เริ่มทำงาน measure instruction ควรเริ่มที่เวลาซึ่งเป็นจำนวนเท่าของค่านี้
พารามิเตอร์ Layout และ topology
-
basis_gates(List[str] | None) - รายการชื่อ basis gate สำหรับ unroll ตัวอย่างเช่น ['u1', 'u2', 'u3', 'cx'] ถ้าเป็นNoneจะไม่ทำการ unroll -
coupling_map(CouplingMap | List[List[int]]) - Directed coupling map (อาจเป็นแบบกำหนดเอง) สำหรับเป้าหมายใน mapping ถ้า coupling map มีความสมมาตร ต้องระบุทั้งสองทิศทาง รองรับรูปแบบเหล่านี้:-
CouplingMap instance
-
List - ต้องให้เป็น adjacency matrix โดยแต่ละ entry ระบุ two-qubit interactions ที่ directed ทั้งหมดที่ QPU รองรับ ตัวอย่างเช่น: [[0, 1], [0, 3], [1, 2], [1, 5], [2, 5], [4, 1], [5, 3]]
-
-
inst_map(List[InstructionScheduleMap] | None) - การแมปการดำเนินการของวงจรไปยังตารางเวลาพัลส์ หากเป็นNoneจะใช้instruction_schedule_mapของ QPU
พารามิเตอร์สำหรับมีผลต่อวิธีการทำงานของ Transpiler
พารามิเตอร์เหล่านี้ส่งผลต่อขั้นตอน transpilation เฉพาะ บางตัวอาจส่งผลต่อหลายขั้นตอน แต่ถูกระบุไว้ภายใต้ขั้นตอนเดียวเพื่อความง่าย ถ้าคุณระบุ argument เช่น initial_layout สำหรับ Qubit ที่ต้องการใช้ ค่านั้นจะ override pass ทั้งหมดที่อาจเปลี่ยนมัน กล่าวคือ Transpiler จะไม่เปลี่ยนสิ่งที่คุณระบุด้วยตนเอง สำหรับรายละเอียดเกี่ยวกับขั้นตอนเฉพาะ ดู ขั้นตอนของ Transpiler
ขั้นตอน Initialization
-
hls_config(HLSConfig) - class การกำหนดค่าHLSConfigแบบ optional ที่ส่งต่อโดยตรงไปยัง transformation passHighLevelSynthesisclass การกำหนดค่านี้ช่วยให้คุณระบุรายการ synthesis algorithms และพารามิเตอร์สำหรับ high-level objects ต่างๆ -
init_method(str) - ชื่อ plugin สำหรับใช้ในขั้นตอน initialization โดยค่าเริ่มต้นไม่ใช้ external plugin คุณดูรายการ plugins ที่ติดตั้งได้โดยรันlist_stage_plugins()พร้อมinitสำหรับ argument ชื่อ stage -
unitary_synthesis_method(str) - ชื่อ unitary synthesis method ที่จะใช้ โดยค่าเริ่มต้นจะใช้defaultคุณดูรายการ plugins ที่ติดตั้งได้โดยรันunitary_synthesis_plugin_names() -
unitary_synthesis_plugin_config(dict) - พจนานุกรมการกำหนดค่าเสริมที่ส่งตรงไปยังปลั๊กอินการสังเคราะห์ unitary โดยค่าเริ่มต้น การตั้งค่านี้ไม่มีผลใดๆ เนื่องจากเมธอดการสังเคราะห์ unitary เริ่มต้นไม่รับการกำหนดค่าที่กำหนดเอง การใช้การกำหนดค่าที่กำหนดเองควรจำเป็นเฉพาะเมื่อระบุปลั๊กอินการสังเคราะห์ unitary ด้วยอาร์กิวเมนต์unitary_synthesisเนื่องจากสิ่งนี้กำหนดเองสำหรับปลั๊กอินการสังเคราะห์ unitary แต่ละตัว ให้ดูเอกสารของปลั๊กอินนั้นสำหรับวิธีใช้ตัวเลือกนี้
ขั้นตอนเลย์เอาต์
-
initial_layout(Layout | Dict | List) - ตำแหน่งเริ่มต้นของ virtual qubits บน physical qubits ถ้า layout นี้ทำให้วงจรเข้ากันได้กับข้อจำกัดของcoupling_mapก็จะถูกนำไปใช้ แต่ layout สุดท้ายไม่ได้รับประกันว่าจะเหมือนเดิม เนื่องจาก Transpiler อาจสลับ qubits ผ่าน swaps หรือวิธีอื่น สำหรับรายละเอียดครบถ้วน ดู ส่วน Initial layout -
layout_method(str) - ชื่อของ layout selection pass (default,dense,sabreและtrivial) นอกจากนี้ยังสามารถเป็นชื่อ external plugin ที่ใช้สำหรับขั้นตอน layout ได้ ดูรายการ plugin ที่ติดตั้งไว้ได้โดยรันlist_stage_plugins()โดยใส่layoutเป็นอาร์กิวเมนต์stage_nameค่าเริ่มต้นคือsabre
ขั้นตอน Routing
routing_method(str) - ชื่อของ routing pass (basic,lookahead,default,sabreหรือnone) นอกจากนี้ยังสามารถเป็นชื่อ external plugin ที่ใช้สำหรับขั้นตอน routing ได้ ดูรายการ plugin ที่ติดตั้งไว้ได้โดยรันlist_stage_plugins()โดยใส่routingเป็นอาร์กิวเมนต์stage_nameค่าเริ่มต้นคือsabre
ขั้นตอน Translation
translation_method(str) - ชื่อของ translation pass (default,synthesis,translator,ibm_backend,ibm_dynamic_circuits,ibm_fractional) นี่อาจเป็นชื่อปลั๊กอินภายนอกที่ใช้สำหรับขั้นตอนการแปล คุณสามารถดูรายการปลั๊กอินที่ติดตั้งได้โดยการรันlist_stage_plugins()โดยใช้translationสำหรับอาร์กิวเมนต์stage_nameค่าเริ่มต้นคือtranslator
ขั้นตอนการปรับให้เหมาะสม
-
approximation_degree(float ในช่วง 0-1 | None) - ตัวปรับฮิวริสติกที่ใช้สำหรับการประมาณค่าวงจร (1.0 = ไม่มีการประมาณค่า, 0.0 = การประมาณค่าสูงสุด) ค่าเริ่มต้นคือ 1.0 การระบุNoneจะตั้งค่าระดับการประมาณให้เท่ากับอัตราความผิดพลาดที่รายงาน ดู ส่วน Approximation degree สำหรับรายละเอียดเพิ่มเติม -
optimization_method(str) - ชื่อปลั๊กอินที่ใช้สำหรับขั้นตอนการปรับให้เหมาะสม โดยค่าเริ่มต้นจะไม่ใช้ปลั๊กอินภายนอก คุณสามารถดูรายการปลั๊กอินที่ติดตั้งได้โดยการรันlist_stage_plugins()โดยใช้optimizationสำหรับอาร์กิวเมนต์stage_name
ขั้นตอนการจัดตารางเวลา
-
scheduling_method(str) - ชื่อของ scheduling pass นี่อาจเป็นชื่อปลั๊กอินภายนอกที่ใช้สำหรับขั้นตอนการจัดตารางเวลา คุณสามารถดูรายการปลั๊กอินที่ติดตั้งได้โดยการรันlist_stage_plugins()โดยใช้schedulingสำหรับอาร์กิวเมนต์stage_name-
'as_soon_as_possible': จัดตารางเวลาคำสั่งแบบโลภ (greedy) ให้เร็วที่สุดเท่าที่จะทำได้บนทรัพยากรคิวบิต (ชื่อย่อ:
asap) -
'as_late_as_possible': จัดตารางเวลาคำสั่งให้ช้าลง กล่าวคือ รักษาคิวบิตให้อยู่ในสถานะกราวด์เมื่อเป็นไปได้ (ชื่อย่อ:
alap) นี่คือค่าเริ่มต้น
-
การรันตัวแปลง (transpiler)
seed_transpiler(int) - กำหนด random seed สำหรับส่วนที่เป็น stochastic ของ transpiler
ค่าเริ่มต้นต่อไปนี้จะถูกใช้ถ้าคุณไม่ระบุพารามิเตอร์ใดข้างต้น ดูหน้า API reference ของเมธอดสำหรับข้อมูลเพิ่มเติม:
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 0x7fa51ff33590>
ขั้นตอนต่อไป
- เรียนรู้วิธี ตั้งค่าระดับการปรับแต่ง
- ดู พารามิเตอร์ที่ใช้บ่อยเพิ่มเติม
- เรียนรู้วิธี ตั้งค่าระดับการปรับแต่ง
- เยี่ยมชมหัวข้อ Transpile ด้วย pass managers
- สำหรับตัวอย่าง ดู การแทนคอมพิวเตอร์ควอนตัม
- เรียนรู้ วิธี transpile วงจร ในฐานะส่วนหนึ่งของ Qiskit patterns workflow
- ดู เอกสาร API ของ Transpile