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

ย้ายจาก 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

important

เลื่อนไปทางขวาเพื่อดูหมายเหตุสำคัญ

BackendV1BackendV2หมายเหตุ
backend.configuration().n_qubitsbackend.num_qubits
backend.configuration().coupling_mapbackend.coupling_mapค่าที่คืนจาก BackendV2 คือ object CouplingMap ใน BackendV1 เป็น edge list นอกจากนี้ นี่เป็นเพียง view ของข้อมูลที่อยู่ใน backend.target ซึ่งอาจเป็นเพียงส่วนหนึ่งของข้อมูลที่อยู่ใน object Target
backend.configuration().backend_namebackend.name
backend.configuration().backend_versionbackend.backend_versionattribute BackendV2.version แทน version ของ abstract interface Backend ที่ object นี้ implement ในขณะที่ BackendV2.backend_version คือ metadata เกี่ยวกับ version ของ Backend เอง
backend.configuration().basis_gatesbackend.operation_namesBackendV2 คืนรายการชื่อ operation ที่อยู่ใน attribute backend.target object Target อาจมีข้อมูลมากกว่าที่สามารถแสดงด้วยรายการชื่อนี้ ตัวอย่างเช่น operation บางอย่างทำงานได้เฉพาะบน Qubit บางส่วน และชื่อบางอย่าง implement Gate เดิมด้วย parameter ต่างกัน
backend.configuration().dtbackend.dt
backend.configuration().dtmbackend.dtm
backend.configuration().max_experimentsbackend.max_circuits
backend.configuration().online_datebackend.online_date
InstructionDurations.from_backend(backend)backend.instruction_durations
backend.defaults().instruction_schedule_mapbackend.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