ข้ามไปยังเนื้อหาหลัก

ติดตั้งและใช้งาน transpiler plugins

เวอร์ชันของแพ็กเกจ

โค้ดในหน้านี้พัฒนาโดยใช้ข้อกำหนดดังต่อไปนี้ แนะนำให้ใช้เวอร์ชันเหล่านี้หรือใหม่กว่า

qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.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:

from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()
backend = service.backend("ibm_fez")

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 สำหรับคำอธิบายของขั้นตอนเหล่านี้

ขั้นตอนถัดไป

คำแนะนำ
Source: IBM Quantum docs — updated 27 เม.ย. 2569
English version on doQumentation — updated 7 พ.ค. 2569
This translation based on the English version of 11 มี.ค. 2569