ติดตั้งและใช้งาน transpiler plugins
Package versions
โค้ดในหน้านี้พัฒนาโดยใช้ข้อกำหนดดังต่อไปนี้ แนะนำให้ใช้เวอร์ชันเหล่านี้หรือใหม่กว่า
qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1
เพื่ออำนวยความสะดวกในการพัฒนาและนำโค้ด transpilation แบบกำหนดเองกลับมาใช้ซ้ำโดยชุมชน Qiskit ในวงกว้าง Qiskit SDK รองรับ interface แบบ plugin ที่ช่วยให้แพ็กเกจ Python ของบุคคลที่สามสามารถประกาศว่าตนมีฟังก์ชัน transpilation ที่ขยายเพิ่มเติมซึ่งเข้าถึงได้ผ่าน Qiskit
ปัจจุบัน plugin ของบุคคลที่สามสามารถให้ฟังก์ชัน transpilation ที่ขยายเพิ่มเติมได้สามวิธี:
- transpiler stage plugin ให้ pass manager ที่สามารถใช้แทนหนึ่งใน 6 ขั้นตอน ของ preset staged pass manager ได้แก่:
init,layout,routing,translation,optimizationและscheduling - unitary synthesis plugin ให้ฟังก์ชันที่ขยายเพิ่มเติมสำหรับการสังเคราะห์ unitary gate
- high-level synthesis plugin ให้ฟังก์ชันที่ขยายเพิ่มเติมสำหรับการสังเคราะห์ "high-level objects" เช่น linear functions หรือ Clifford operators โดย high-level objects แทนด้วย subclass ของคลาส Operation
ส่วนที่เหลือของหน้านี้อธิบายวิธีแสดงรายการ plugin ที่มีอยู่ ติดตั้ง plugin ใหม่ และใช้งาน plugin เหล่านั้น
แสดงรายการ plugin ที่มีอยู่และติดตั้ง plugin ใหม่
Qiskit มี plugin ในตัวสำหรับ transpilation อยู่แล้ว หากต้องการติดตั้งเพิ่มเติม สามารถใช้ Python package manager ได้ ตัวอย่างเช่น อาจรัน pip install qiskit-toqm เพื่อติดตั้ง Qiskit TOQM routing stage plugin มี plugin ของบุคคลที่สามหลายตัวที่เป็นส่วนหนึ่งของ Qiskit ecosystem
แสดงรายการ transpiler stage plugins ที่มีอยู่
ใช้ฟังก์ชัน list_stage_plugins โดยส่งชื่อของขั้นตอนที่ต้องการแสดงรายการ plugin
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
from qiskit.transpiler.preset_passmanagers.plugin import list_stage_plugins
list_stage_plugins("layout")
['default', 'dense', 'sabre', 'trivial']
list_stage_plugins("routing")
['basic', 'default', 'lookahead', 'none', 'sabre']
หากติดตั้ง qiskit-toqm ไว้ toqm จะปรากฏในรายการ routing plugins
แสดงรายการ unitary synthesis plugins ที่มีอยู่
ใช้ฟังก์ชัน unitary_synthesis_plugin_names
from qiskit.transpiler.passes.synthesis import unitary_synthesis_plugin_names
unitary_synthesis_plugin_names()
['aqc', 'clifford', 'default', 'gridsynth', 'sk']
แสดงรายการ high-level synthesis plugins ที่มีอยู่
ใช้ฟังก์ชัน high_level_synthesis_plugin_names โดยส่งชื่อของประเภท "high-level object" ที่ต้องการสังเคราะห์ ชื่อนี้สอดคล้องกับ attribute name ของคลาส Operation ที่แทนประเภทของออบเจ็กต์ที่กำลังสังเคราะห์
from qiskit.transpiler.passes.synthesis import (
high_level_synthesis_plugin_names,
)
high_level_synthesis_plugin_names("clifford")
['ag', 'bm', 'default', 'greedy', 'layers', 'lnn', 'rb_default']
สามารถใช้คลาส HighLevelSynthesisPluginManager เพื่อแสดงรายการชื่อของ high-level synthesis plugins ทั้งหมด:
from qiskit.transpiler.passes.synthesis.plugin import (
HighLevelSynthesisPluginManager,
)
HighLevelSynthesisPluginManager().plugins.names()
['FullAdder.default',
'FullAdder.ripple_c04',
'FullAdder.ripple_v95',
'HalfAdder.default',
'HalfAdder.qft_d00',
'HalfAdder.ripple_c04',
'HalfAdder.ripple_r25',
'HalfAdder.ripple_v95',
'IntComp.default',
'IntComp.noaux',
'IntComp.twos',
'ModularAdder.default',
'ModularAdder.modular_v17',
'ModularAdder.qft_d00',
'ModularAdder.ripple_c04',
'ModularAdder.ripple_v95',
'Multiplier.cumulative_h18',
'Multiplier.default',
'Multiplier.qft_r17',
'PauliEvolution.default',
'PauliEvolution.rustiq',
'WeightedSum.default',
'annotated.default',
'clifford.ag',
'clifford.bm',
'clifford.default',
'clifford.greedy',
'clifford.layers',
'clifford.lnn',
'linear_function.default',
'linear_function.kms',
'linear_function.pmh',
'mcmt.default',
'mcmt.noaux',
'mcmt.vchain',
'mcmt.xgate',
'mcx.1_clean_b95',
'mcx.1_clean_kg24',
'mcx.1_dirty_kg24',
'mcx.2_clean_kg24',
'mcx.2_dirty_kg24',
'mcx.default',
'mcx.gray_code',
'mcx.n_clean_m15',
'mcx.n_dirty_i15',
'mcx.noaux_hp24',
'mcx.noaux_v24',
'permutation.acg',
'permutation.basic',
'permutation.default',
'permutation.kms',
'permutation.token_swapper',
'qft.default',
'qft.full',
'qft.line',
'clifford.rb_default']
ใช้งาน plugin
ในส่วนนี้จะแสดงวิธีใช้งาน transpiler plugins ในตัวอย่างโค้ด เราใช้ plugin ที่มากับ Qiskit แต่ plugin ที่ติดตั้งจากแพ็กเกจของบุคคลที่สามก็ใช้งานในลักษณะเดียวกัน
ใช้งาน transpiler stage plugin
ในการใช้งาน transpiler stage plugin ให้ระบุชื่อของ plugin พร้อมกับ argument ที่เหมาะสมใน generate_preset_pass_manager หรือ transpile โดย argument จะเกิดจากการต่อ _method ต่อท้ายชื่อขั้นตอน transpilation ตัวอย่างเช่น หากต้องการใช้ lookahead routing plugin ให้ระบุ lookahead ใน argument routing_method
mock backend FakeSherbrooke จาก qiskit_ibm_runtime ถูกใช้ในตัวอย่างเหล่านี้ แต่คุณสามารถลองใช้กับ real หรือ fake backend ที่รองรับ Qiskit ตัวใดก็ได้ ผลลัพธ์อาจแตกต่างกัน
from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime.fake_provider import FakeSherbrooke
backend = FakeSherbrooke()
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend, routing_method="lookahead"
)
ใช้งาน unitary synthesis plugin
ในการใช้งาน unitary synthesis plugin ให้ระบุชื่อของ plugin เป็น argument unitary_synthesis_method ใน generate_preset_pass_manager หรือ transpile:
pass_manager = generate_preset_pass_manager(
optimization_level=3,
backend=backend,
unitary_synthesis_method="sk",
unitary_synthesis_plugin_config=dict(
basis_gates=["cz", "id", "rz", "sx", "x"]
),
)
Unitary synthesis ถูกใช้ในขั้นตอน init, translation และ optimization ของ staged pass manager ที่คืนค่าจาก generate_preset_pass_manager หรือที่ใช้ใน transpile ดู Transpiler stages สำหรับคำอธิบายของขั้นตอนเหล่านี้
ใช้ argument unitary_synthesis_plugin_config ซึ่งเป็น dictionary รูปแบบเสรี เพื่อส่งตัวเลือกสำหรับวิธี unitary synthesis เอกสารของวิธี synthesis ควรอธิบายตัวเลือกที่รองรับ ดู รายการนี้ สำหรับลิงก์ไปยังเอกสารของ unitary synthesis plugins ในตัว
ใช้งาน high-level synthesis plugin
ขั้นแรก สร้าง HLSConfig เพื่อ จัดเก็บชื่อของ plugin ที่จะใช้กับ high-level objects ต่าง ๆ ตัวอย่างเช่น:
from qiskit.transpiler.passes import HLSConfig
hls_config = HLSConfig(clifford=["layers"], linear_function=["pmh"])
โค้ดเซลล์นี้สร้างการตั้งค่า high-level synthesis ที่ใช้ layers plugin
สำหรับการสังเคราะห์ออบเจ็กต์ Clifford และ pmh plugin สำหรับการสังเคราะห์
ออบเจ็กต์ LinearFunction ชื่อของ keyword arguments สอดคล้องกับ
attribute name ของคลาส Operation ที่แทนประเภทของออบเจ็กต์ที่กำลังสังเคราะห์
สำหรับ high-level object แต่ละตัว รายการของ plugin ที่กำหนดไว้จะถูกลองตามลำดับจนกว่าจะมีตัวหนึ่งสำเร็จ (ในตัวอย่างข้างต้น แต่ละรายการมี plugin เพียงตัวเดียว)
นอกจากการระบุ
plugin โดยชื่อ ยังสามารถส่ง tuple (name, options) โดยที่ element ที่สองของ tuple คือ dictionary ที่มีตัวเลือกสำหรับ plugin เอกสารของวิธี synthesis ควรอธิบายตัวเลือกที่รองรับ ดู รายการนี้ สำหรับลิงก์ไปยังเอกสารของ high-level synthesis plugins ในตัว
เมื่อสร้างออบเจ็กต์ HLSConfig แล้ว ให้ส่งเป็น
argument hls_config ใน generate_preset_pass_manager หรือ transpile:
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend, hls_config=hls_config
)
High-level synthesis ถูกใช้ในขั้นตอน init, translation และ optimization ของ staged pass manager ที่คืนค่าจาก generate_preset_pass_manager หรือที่ใช้ใน transpile ดู Transpiler stages สำหรับคำอธิบายของขั้นตอนเหล่านี้
ขั้นตอนถัดไป
- สร้าง transpiler plugin
- Create a transpiler plugin.
- ดู tutorials สำหรับตัวอย่างการ transpile และรัน quantum circuits