ย้ายจาก BackendV1 ไปยัง BackendV2
คลาส BackendV1 ของ Qiskit ถูก deprecated แล้วและจะถูกลบออกจากบริการ คู่มือการย้ายนี้อธิบายการปรับเปลี่ยนเล็กน้อยที่จำเป็น หากคุณใช้ provider ที่อัปเกรดจาก BackendV1 ไปเป็น BackendV2
หากคุณใช้เฉพาะ qiskit_ibm_runtime และ qiskit_aer ไม่จำเป็นต้องดำเนินการใด ๆ แพ็กเกจ qiskit_ibm_runtime ใช้ BackendV2 มาตลอด และ qiskit_aer ใช้ BackendV2 ตั้งแต่เวอร์ชัน 0.13
การเปลี่ยนแปลงระดับสูงใน BackendV2
โมเดล Backend ของ Qiskit
ถูกออกแบบมาเพื่อให้ Qiskit SDK มี abstraction layer ที่ช่วยให้สามารถใช้เหตุผล
เกี่ยวกับคอมพิวเตอร์ควอนตัมภายในขอบเขตของ SDK การวนซ้ำครั้งแรกของโมเดลถูกนำเสนอ
พร้อมกับคลาส
BackendV1
คลาสนี้เก็บข้อมูล Backend ไว้ในชุดของ data container ได้แก่คลาส
BackendConfiguration
และ BackendProperties
คลาส BackendV2
ได้นิยามการเข้าถึงของผู้ใช้สำหรับคุณสมบัติ Backend ส่วนใหญ่ใหม่ เพื่อให้ทำงานร่วมกับ
data structure ของ Qiskit แบบ native และมีรูปแบบการเข้าถึงที่แบนราบกว่า แกนหลัก
ของโมเดล BackendV2
คือคลาส Target
ซึ่งเป็นตัวแทนของ QPU ที่มีข้อจำกัดในการ transpile ที่ Qiskit ใช้เพื่อปรับแต่ง Circuit
สำหรับการรัน
Qiskit SDK ได้รับการอัปเดตให้ทำงานเฉพาะกับอินพุต BackendV2 และ provider ส่วนใหญ่ได้อัปเกรดจาก BackendV1 เป็น BackendV2 แล้ว คาดว่า provider ที่มีอยู่จะ deprecated การเข้าถึงแบบเก่าเมื่อเป็นไปได้เพื่อให้การย้ายเป็นไปอย่างราบรื่น แต่ในที่สุดผู้ใช้จำเป็นต้องปรับโค้ดของตน
หลักการเบื้องหลัง BackendV2
คือข้อมูลส่วนใหญ่เกี่ยวกับ Backend จะอยู่ใน object
Target
ของมัน และ attribute ของ Backend มักจะ query attribute BackendV2.target
เพื่อคืนข้อมูล อย่างไรก็ตาม ในหลายกรณี attribute เหล่านี้ให้เพียงส่วนหนึ่งของข้อมูล
ที่ target สามารถมีได้ ตัวอย่างเช่น backend.coupling_map คืน object
CouplingMap
ที่สร้างจาก Target
ที่เข้าถึงได้ใน attribute BackendV2.target อย่างไรก็ตาม target อาจมีคำสั่ง
ที่ทำงานบน Qubit มากกว่าสอง Qubit (ซึ่งไม่สามารถแทนใน
CouplingMap
ได้) หรืออาจมีคำสั่งที่ทำงานบน Qubit เพียงบางส่วน (หรือ link สอง Qubit สำหรับ
คำสั่งสอง Qubit) ซึ่งจะไม่ถูกระบุรายละเอียดใน coupling map เต็มรูปแบบที่คืนโดย
BackendV2.coupling_map ดังนั้นขึ้นอยู่กับ use case ของคุณ อาจจำเป็นต้องมองลึก
กว่าแค่การเข้าถึงที่เทียบเท่าด้วย
BackendV2
การเปลี่ยนแปลงเฉพาะใน BackendV2
attribute ส่วนใหญ่มีการแทนที่โดยตรง ทำให้การย้ายง่ายขึ้น จุดเดียวที่ไม่ตรงกันระหว่าง interface คือใน CouplingMap
ต่อไปนี้คือตารางตัวอย่างรูปแบบการเข้าถึงใน BackendV1 และรูปแบบใหม่ด้วย BackendV2
เลื่อนไปทางขวาเพื่อดูหมายเหตุสำคัญ
BackendV1 | BackendV2 | หมายเหตุ |
|---|---|---|
backend.configuration().n_qubits | backend.num_qubits | |
backend.configuration().coupling_map | backend.coupling_map | ค่าที่คืนจาก BackendV2 คือ object CouplingMap ใน BackendV1 เป็น edge list นอกจากนี้ นี่เป็นเพียง view ของข้อมูลที่อยู่ใน backend.target ซึ่งอาจเป็นเพียงส่วนหนึ่งของข้อมูลที่อยู่ใน object Target |
backend.configuration().backend_name | backend.name | |
backend.configuration().backend_version | backend.backend_version | attribute BackendV2.version แทน version ของ abstract interface Backend ที่ object นี้ implement ในขณะที่ BackendV2.backend_version คือ metadata เกี่ยวกับ version ของ Backend เอง |
backend.configuration().basis_gates | backend.operation_names | BackendV2 คืนรายการชื่อ operation ที่อยู่ใน attribute backend.target object Target อาจมีข้อมูลมากกว่าที่สามารถแสดงด้วยรายการชื่อนี้ ตัวอย่างเช่น operation บางอย่างทำงานได้เฉพาะบน Qubit บางส่วน และชื่อบางอย่าง implement Gate เดิมด้วย parameter ต่างกัน |
backend.configuration().dt | backend.dt | |
backend.configuration().dtm | backend.dtm | |
backend.configuration().max_experiments | backend.max_circuits | |
backend.configuration().online_date | backend.online_date | |
InstructionDurations.from_backend(backend) | backend.instruction_durations | |
backend.defaults().instruction_schedule_map | backend.instruction_schedule_map | |
backend.properties().t1(0) | backend.qubit_properties(0).t1 | |
backend.properties().t2(0) | backend.qubit_properties(0).t2 | |
backend.properties().frequency(0) | backend.qubit_properties(0).frequency | |
backend.properties().readout_error(0) | backend.target["measure"][(0,)].error | ใน BackendV2 อัตรา error สำหรับ operation Measure บน Qubit ที่กำหนดจะถูกใช้เพื่อสร้างแบบจำลอง readout error อย่างไรก็ตาม object BackendV2 สามารถ implement measurement หลายประเภทและแสดงรายการแยกต่างหากใน Target |
backend.properties().readout_length(0) | backend.target["measure"][(0,)].duration | ใน BackendV2 ระยะเวลาของ operation Measure บน Qubit ที่กำหนดจะถูกใช้เพื่อสร้างแบบจำลอง readout length อย่างไรก็ตาม object BackendV2 สามารถ implement measurement หลายประเภทและแสดงรายการแยกต่างหากใน Target |