דלג לתוכן הראשי

מעבר מ-BackendV1 ל-BackendV2

המחלקה BackendV1 של Qiskit הוצאה משימוש ותוסר מהשירות. מדריך ההגירה הזה מתאר את ההתאמות הקטנות שצריך לבצע אם אתה משתמש בספק שעבר שדרוג מ-BackendV1 ל-BackendV2.

הערה

אם אתה משתמש אך ורק ב-qiskit_ibm_runtime וב-qiskit_aer, אין צורך בפעולה כלשהי. חבילת qiskit_ibm_runtime תמיד השתמשה ב-BackendV2, ו-qiskit_aer משתמשת ב-BackendV2 מאז גרסה 0.13.

שינויים ברמה גבוהה ב-BackendV2

מודל ה-Backend של Qiskit תוכנן לספק ל-SDK של Qiskit שכבת הפשטה שאיפשרה לנהל מחשבים קוונטיים במסגרת ה-SDK. האיטרציה הראשונה של המודל הוצגה עם המחלקה BackendV1. מחלקה זו אחסנה את מידע ה-Backend בסדרת מכלי נתונים, בעיקר המחלקות BackendConfiguration ו-BackendProperties.

המחלקה BackendV2 הגדירה מחדש את גישת המשתמש לרוב מאפייני ה-Backend כדי שיעבדו עם מבני הנתונים המקוריים של Qiskit ויהיו בעלי דפוסי גישה שטוחים יותר. ליבת מודל ה-BackendV2 היא המחלקה Target, ייצוג של ה-QPU שמכיל את אילוצי ה-Transpiler שבהם Qiskit יכול להשתמש לאופטימיזציה של Circuit לביצוע.

ה-SDK של Qiskit עודכן לעבוד אך ורק עם קלטי BackendV2, ורוב הספקים שדרגו מ-BackendV1 ל-BackendV2. מצופה שספקים קיימים יוציאו את הגישה הישנה משימוש היכן שניתן, כדי לאפשר מעבר הדרגתי — אך בסופו של דבר המשתמשים יצטרכו להתאים את הקוד שלהם.

העיקרון מאחורי BackendV2 הוא שרוב המידע על Backend נמצא באובייקט ה-Target שלו, ומאפייני ה-Backend לעיתים קרובות מבצעים שאילתה על מאפיין BackendV2.target כדי להחזיר מידע. עם זאת, במקרים רבים המאפיינים מספקים רק תת-קבוצה של המידע שה-Target יכול להכיל. לדוגמה, backend.coupling_map מחזיר אובייקט CouplingMap שנבנה מה-Target הנגיש דרך מאפיין BackendV2.target. עם זאת, ה-Target עשוי להכיל הוראות שפועלות על יותר משני Qubit (שלא ניתן לייצגם ב-CouplingMap) או הוראות שפועלות רק על תת-קבוצה של Qubit (או שני קישורי Qubit, עבור הוראה של שני Qubit), שלא יפורטו במפת הצימוד המלאה שמוחזרת על ידי BackendV2.coupling_map. לכן, בהתאם לתרחיש השימוש שלך, ייתכן שיהיה צורך להעמיק מעבר לגישה המקבילה עם BackendV2.

שינויים ספציפיים ב-BackendV2

לרוב המאפיינים יש תחליף ישיר, מה שמפשט את מאמצי ההגירה. נקודת אי-ההתאמה היחידה בין הממשקים היא ב-CouplingMap.

להלן טבלה של דפוסי גישה לדוגמה ב-BackendV1 והצורה החדשה עם BackendV2.

important

גלול ימינה כדי לראות הערות חשובות.

BackendV1BackendV2הערות
backend.configuration().n_qubitsbackend.num_qubits
backend.configuration().coupling_mapbackend.coupling_mapהערך המוחזר מ-BackendV2 הוא אובייקט CouplingMap. ב-BackendV1 זו רשימת קשתות. כמו כן, זהו רק תצוגה של המידע הכלול ב-backend.target, שעשויה להיות רק תת-קבוצה של המידע הכלול באובייקט ה-Target.
backend.configuration().backend_namebackend.name
backend.configuration().backend_versionbackend.backend_versionהמאפיין BackendV2.version מייצג את גרסת ממשק ה-Backend המופשט שהאובייקט מממש, בעוד ש-BackendV2.backend_version הוא מטא-נתונים על גרסת ה-Backend עצמו.
backend.configuration().basis_gatesbackend.operation_namesה-BackendV2 מחזיר רשימת שמות פעולות הכלולים במאפיין backend.target. ה-Target עשוי להכיל מידע רב יותר ממה שניתן לבטא ברשימת שמות זו. לדוגמה, חלק מהפעולות עובדות רק על תת-קבוצה של Qubit, וחלק מהשמות מממשים את אותו Gate עם פרמטרים שונים.
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, שיעור השגיאה עבור פעולת ה-Measure על Qubit נתון משמש למידול שגיאת הקריאה. עם זאת, אובייקט BackendV2 יכול לממש סוגי מדידה מרובים ולרשום אותם בנפרד ב-Target.
backend.properties().readout_length(0)backend.target["measure"][(0,)].durationב-BackendV2, משך הזמן עבור פעולת ה-Measure על Qubit נתון משמש למידול אורך הקריאה. עם זאת, אובייקט BackendV2 יכול לממש סוגי מדידה מרובים ולרשום אותם בנפרד ב-Target.