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