ดึงข้อมูล Backend ด้วย Qiskit
Package versions
โค้ดในหน้านี้พัฒนาโดยใช้ requirement ดังนี้ แนะนำให้ใช้เวอร์ชันเหล่านี้หรือใหม่กว่า
qiskit-ibm-runtime~=0.43.1
หน้านี้อธิบายวิธีใช้ Qiskit เพื่อค้นหาข้อมูลเกี่ยวกับ Backend ที่มีอยู่
แสดงรายการ Backend
หากต้องการดู Backend ที่เข้าถึงได้ สามารถดูรายการได้ที่ หน้า Compute resources หรือใช้เมธอด QiskitRuntimeService.backends() เมธอดนี้จะคืนค่าเป็นลิสต์ของ instance IBMBackend:
- หากล็อกอินอยู่ใน instance หรือ region ใดเฉพาะเจาะจง หรือเริ่มต้น service ด้วย instance หรือ region เฉพาะผ่าน
QiskitRuntimeService()ระบบจะคืนเฉพาะ Backend ที่ใช้งานได้ใน instance หรือ region นั้น ไม่เช่นนั้นจะคืน Backend ทั้งหมดที่เข้าถึงได้จากทุก instance และทุก region - รายการ Backend ที่ได้รับอาจต่างจากที่แสดงบนหน้า Compute resources ของ IBM Quantum Platform รายการบนหน้า Compute resources จะถูกกรองตาม region ที่เลือกไว้ที่ด้านบนของหน้าเสมอ
สำหรับการรันโค้ดต่อไปนี้ ต้องยืนยันตัวตนกับ service ก่อน ดูรายละเอียดได้ที่ ตั้งค่าบัญชี IBM Cloud
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit-ibm-runtime
# Initialize your account
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
service.backends()
[<IBMBackend('ibm_pittsburgh')>,
<IBMBackend('ibm_boston')>,
<IBMBackend('ibm_fez')>,
<IBMBackend('ibm_miami')>,
<IBMBackend('ibm_marrakesh')>,
<IBMBackend('ibm_torino')>,
<IBMBackend('ibm_kingston')>]
เมธอด QiskitRuntimeService.backend() (สังเกตว่าเป็นเอกพจน์: backend) รับชื่อของ Backend เป็น parameter และคืนค่าเป็น instance IBMBackend ที่แทน Backend นั้นๆ:
service.backend("ibm_fez")
<IBMBackend('ibm_fez')>
กรอง Backend
กรอง Backend ที่มีอยู่ตาม property ได้ด้วย สำหรับ filter ทั่วไป ให้ตั้งค่า argument filters เป็นฟังก์ชันที่รับออบเจกต์ Backend และคืนค่า True หากตรงตามเกณฑ์ ดูรายละเอียดได้ที่ เอกสาร API
โค้ดต่อไปนี้จะคืนเฉพาะ Backend ที่ตรงตามเกณฑ์เหล่านี้และใช้งานได้ ใน instance ที่เลือกอยู่ปัจจุบัน:
- เป็นอุปกรณ์ควอนตัมจริง (
simulator=False) - ใช้งานได้อยู่ในปัจจุบัน (
operational=True) - มี Qubit อย่างน้อย 5 ตัว (
min_num_qubits=5)
# Optionally pass in an instance, region, or both, to
# further filter the backends.
service = QiskitRuntimeService()
service.backends(simulator=False, operational=True, min_num_qubits=5)
[<IBMBackend('ibm_pittsburgh')>,
<IBMBackend('ibm_boston')>,
<IBMBackend('ibm_fez')>,
<IBMBackend('ibm_miami')>,
<IBMBackend('ibm_marrakesh')>,
<IBMBackend('ibm_torino')>,
<IBMBackend('ibm_kingston')>]
ใช้ keyword argument เหล่านี้เพื่อกรองตาม attribute ใดก็ได้ในการตั้งค่า Backend (JSON schema) หรือสถานะ (JSON schema) เมธอดที่คล้ายกันคือ QiskitRuntimeService.least_busy() ซึ่งรับ filter เดียวกับ backends() แต่คืนค่า Backend ที่ตรงตาม filter และมีจำนวนงานรอคิวน้อยที่สุด:
service.least_busy(operational=True, min_num_qubits=5)
<IBMBackend('ibm_torino')>
ข้อมูล Backend แบบคงที่
ข้อมูลบางอย่างของ Backend ไม่เปลี่ยนแปลงบ่อย เช่น ชื่อ เวอร์ชัน จำนวน Qubit และประเภทฟีเจอร์ที่รองรับ ข้อมูลนี้พร้อมใช้งานในรูป attribute ของออบเจกต์ backend
เ ซลล์ต่อไปนี้สร้างคำอธิบายของ Backend
backend = service.backend("ibm_fez")
print(
f"Name: {backend.name}\n"
f"Version: {backend.version}\n"
f"No. of qubits: {backend.num_qubits}\n"
)
Name: ibm_fez
Version: 2
No. of qubits: 156
สำหรับรายการ attribute ทั้งหมด ดูที่ เอกสาร API ของ IBMBackend
Native Gate และ Operation
แต่ละ processor family มีชุด native gate ของตัวเอง โดยค่าเริ่มต้น QPU ในแต่ละ family รองรับเฉพาะ Gate และ Operation ใน native gate set เท่านั้น ดังนั้นทุก Gate ใน Circuit ต้องถูกแปลง (โดย Transpiler) ให้เป็นองค์ประกอบของชุดนี้
ดู native gate และ operation สำหรับ QPU ได้ ด้วย Qiskit หรือบนหน้า Compute resources ของ IBM Quantum® Platform
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
for backend in service.backends():
config = backend.configuration()
if "simulator" in config.backend_name:
continue
print(f"Backend: {config.backend_name}")
print(f" Processor type: {config.processor_type}")
print(f" Supported instructions:")
for instruction in config.supported_instructions:
print(f" {instruction}")
print()
ข้อมูล Backend แบบไดนามิก
Backend ยังมี property ที่เปลี่ยนแปลงทุกครั้งที่ถูกสอบเทียบ เช่น ความถี่ Qubit และอัตราข้อผิดพลาดของ operation Backend มักถูกสอบเทียบทุก 24 ชั่วโมง และ property จะอัปเดตหลังการสอบเทียบเสร็จสมบูรณ์ property เหล่านี้ใช้สำหรับเพิ่มประสิทธิภาพ Circuit ควอนตัม หรือสร้างโมเดล noise สำหรับ simulator แบบคลาสสิก
Property ของ Qubit
backend.properties().qubit_property() คืนข้อมูลเกี่ยวกับคุณสมบัติทางกายภาพของ Qubit โดยมี dictionary ของ property ต่างๆ ของ Qubit แต่ละตัวพร้อมค่าและ timestamp ของการสอบเทียบล่าสุด
-
T1 (Relaxation Time): เวลา T1 แสดงระยะเวลาเฉลี่ยที่ Qubit อยู่ใน excited state ก่อนที่จะสลายไปยัง ground state เนื่องจากการคลายพลังงาน parameter นี้ใช้อธิบายพฤติกรรมการคลายพลังงานของ Qubit มีหน่วยเป็นวินาที (s) -
T2 (Dephasing Time): เวลา T2 แสดงช่วงเวลาที่ Qubit รักษา phase coherence ของ superposition ระหว่าง state และ โดยคำนึงถึงทั้งการคลายพลังงานและกระบวนการ dephasing บริสุทธิ์ ให้ข้อมูลเชิงลึกเกี่ยวกับคุณสมบัติ coherence ของ Qubit -
frequency: parameter นี้ระบุความถี่ เรโซแนนซ์ของ Qubit ซึ่งบ่งบอกถึงความแตกต่างพลังงานระหว่าง state และ มีหน่วยเป็นเฮิรตซ์ (Hz) -
anharmonicity: Anharmonicity คือความแตกต่างพลังงานระหว่าง excited state ที่หนึ่งและที่สองของ Qubit มีหน่วยเป็นเฮิรตซ์ (Hz) เช่นกัน -
readout_error: readout error วัดความน่าจะเป็นเฉลี่ยที่จะวัด state ของ Qubit ผิดพลาด โดยทั่วไปคำนวณจากค่าเฉลี่ยของ prob_meas0_prep1 และ prob_meas1_prep0 ให้ตัวชี้วัดเดียวสำหรับ measurement fidelity -
prob_meas0_prep1: parameter นี้ บ่งบอกถึงความน่าจะเป็นที่จะวัด Qubit ใน state 0 เมื่อตั้งใจเตรียม state ให้เป็น แทนด้วย สะท้อนข้อผิดพลาดใน state preparation และ measurement (SPAM) โดยเฉพาะ measurement error ใน superconducting Qubit -
prob_meas1_prep0: ในทำนองเดียวกัน parameter นี้แทนความน่าจะเป็นที่จะวัด Qubit ใน state 1 เมื่อตั้งใจเตรียม state ให้เป็น แทนด้วย เช่นเดียวกับ prob_meas0_prep1 สะท้อน SPAM error โดย measurement error เป็นตัวมีส่วนสำคัญหลักใน superconducting Qubit -
readout_length: readout_length ระบุระยะเวลาของ operation การอ่านค่าสำหรับ Qubit วัดเวลาตั้งแต่เริ่มต้น measurement pulse จนถึงการสิ้นสุด digitization ของสัญญาณ หลังจากนั้นระบบจะพร้อมสำหรับ operation ถัดไป การเข้าใจ parameter นี้สำคัญมากในการเพิ่มประสิทธิภาพการรัน Circuit โดยเฉพาะเมื่อรวม mid-circuit measurement
# fundamental physical properties of qubit 1
backend.qubit_properties(1)
QubitProperties(t1=0.00023160183954439313, t2=0.0002759670226087048, frequency=None)
# calibration data with detailed properties of qubit 0
backend.properties().qubit_property(0)
{'T1': (5.199156952582205e-05,
datetime.datetime(2026, 1, 14, 16, 18, 26, tzinfo=tzlocal())),
'T2': (2.253552085985709e-05,
datetime.datetime(2026, 1, 14, 16, 19, 6, tzinfo=tzlocal())),
'readout_error': (0.013916015625,
datetime.datetime(2026, 1, 14, 21, 38, 31, tzinfo=tzlocal())),
'prob_meas0_prep1': (0.026123046875,
datetime.datetime(2026, 1, 14, 21, 38, 31, tzinfo=tzlocal())),
'prob_meas1_prep0': (0.001708984375,
datetime.datetime(2026, 1, 14, 21, 38, 31, tzinfo=tzlocal())),
'readout_length': (1.56e-06,
datetime.datetime(2026, 1, 14, 21, 38, 31, tzinfo=tzlocal()))}
# Retrieve qubit properties
qubit_index = 126 # Replace with your qubit index
qubit_props = backend.properties().qubit_property(qubit_index)
# Access specific properties
t1 = qubit_props.get("T1", (None,))[0]
t2 = qubit_props.get("T2", (None,))[0]
frequency = qubit_props.get("frequency", (None,))[0]
anharmonicity = qubit_props.get("anharmonicity", (None,))[0]
readout_error = qubit_props.get("readout_error", (None,))[0]
prob_meas0_prep1 = qubit_props.get("prob_meas0_prep1", (None,))[0]
prob_meas1_prep0 = qubit_props.get("prob_meas1_prep0", (None,))[0]
readout_length = qubit_props.get("readout_length", (None,))[0]
print(f"Qubit {qubit_index} Properties:")
print(f" T1: {t1} seconds")
print(f" T2: {t2} seconds")
print(f" Frequency: {frequency} Hz")
print(f" Anharmonicity: {anharmonicity} Hz")
print(f" Readout Error: {readout_error}")
print(f" P(0 | 1): {prob_meas0_prep1}")
print(f" P(1 | 0): {prob_meas1_prep0}")
print(f" Readout Length: {readout_length} seconds")
Qubit 126 Properties:
T1: 9.563335658857979e-05 seconds
T2: 6.570556299807121e-05 seconds
Frequency: None Hz
Anharmonicity: None Hz
Readout Error: 0.006591796875
P(0 | 1): 0.009765625
P(1 | 0): 0.00341796875
Readout Length: 1.56e-06 seconds
Property ของ Instruction
attribute backend.target เป็นออบเจกต์ qiskit.transpiler.Target ซึ่งเป็นออบเจกต์ที่มีข้อมูลทั้งหมดที่ต้องการสำหรับการ transpile Circuit สำหรับ Backend นั้น ซึ่งรวมถึง instruction error และ duration ตัวอย่างเช่น เซลล์ต่อไปนี้ดึง property สำหรับ gate cz ที่ทำงานระหว่าง Qubit 1 และ 0
backend.target["cz"][(1, 0)]
InstructionProperties(duration=6.8e-08, error=0.007831625819164134)
เซลล์ต่อไปนี้แสดง property สำหรับ measurement operation (รวม readout error) บน Qubit 0
backend.target["measure"][(0,)]
InstructionProperties(duration=1.56e-06, error=0.013916015625)
ขั้นตอนถัดไป
- ลองทำบทแนะนำ Grover's algorithm
- ดู QiskitRuntime backend API reference