מבוא לפרימיטיבים
Package versions
The code on this page was developed using the following requirements. We recommend using these versions or newer.
qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1
מדוע Qiskit הציגה פרימיטיבים?
בדומה לימים הראשונים של המחשבים הקלאסיים, כאשר מפתחים היו צריכים לתפעל רגיסטרים של ה-CPU ישירות, הממשק המוקדם ל-QPUs החזיר פשוט את הנתונים הגולמיים מהאלקטרוניקה השולטת.
זה לא היה בעיה גדולה כאשר QPUs שכנו במעבדות והרשו גישה ישירה רק לחוקרים.
מתוך הכרה בכך שרוב המפתחים לא יכירו ולא צריכים להכיר את אופן הפענוח של נתונים גולמיים כאלה ל-0 ו-1, Qiskit הציגה את backend.run, הפשטה ראשונה לגישה ל-QPUs בענן. זה אפשר למפתחים לעבוד עם פורמט נתונים מוכר ולהתמקד בתמונה הגדולה.
כאשר הגישה ל-QPUs הפכה נפוצה יותר, ועם יותר אלגוריתמים קוונטיים שפותחו, עלתה שוב הצורך בהפשטה ברמה גבוהה יותר. בתגובה, Qiskit הציגה את ממשק הפרימיטיבים, המותאם לשתי משימות ליבה בפיתוח אלגוריתמים קוונטיים: אמדון ערך ציפייה (Estimator) ודגימת Circuit (Sampler). המטרה היא שוב לעזור למפתחים להתמקד יותר בחדשנות ופחות בהמרת נתונים. ממשק הפרימיטיבים מחליף את ממשק backend.run, שכן Sampler מספק את אותה גישה ישירה לחומרה שהוצעה על ידי backend.run.
מהו פרימיטיב?
מערכות מחשוב בנויות על שכבות מרובות של הפשטה. הפשטות מאפשרות לך להתמקד ברמת פרטים מסוימת הרלוונטית למשימה שבידיך. ככל שמתקרבים לחומרה, כך נמוכה יותר רמת ההפשטה הנדרשת (לדוגמה, ייתכן שתצטרך להזיז או לתפעל נתונים ברמת הוראות ה-CPU). ככל שהמשימה שברצונך לבצע מורכבת יותר, כך ההפשטות יהיו ברמה גבוהה יותר (לדוגמה, אפשר שתשתמש בספרייה לביצוע חישובים אלגבריים).
בהקשר זה, פרימיטיב הוא הוראת העיבוד הקטנה ביותר, אבן הבניין הפשוטה ביותר ממנה ניתן ליצור משהו שימושי לרמת הפשטה נתונה.
ההתקדמות האחרונה בחישוב קוונטי הגבירה את הצורך לעבוד ברמות גבוהות יותר של הפשטה. ככל שהתחום מתקדם לעבר יחידות עיבוד קוונטי (QPUs) גדולות יותר וזרימות עבודה מורכבות יותר, המיקוד עובר מאינטראקציה עם אותות qubit בודדים לראיית המכשירים הקוונטיים כמערכות המבצעות משימות הכרחיות.
שתי המשימות הנפוצות ביותר למחשבים קוונטיים הן דגימת מצבים קוונטיים וחישוב ערכי ציפייה. משימות אלה הניעו את עיצוב פרימיטיבי Qiskit: Estimator ו-Sampler.
- Estimator מחשב ערכי ציפייה של אובזרבלים ביחס למצבים המוכנים על ידי Circuits קוונטיות.
- Sampler דוגם את רגיסטר הפלט מהרצת Circuit קוונטית.
בקצרה, מודל החישוב שהוצג על ידי פרימיטיבי Qiskit מקדם את התכנות הקוונטי צעד אחד קרוב יותר למקום שבו נמצא התכנות הקלאסי כיום, שבו המיקוד פחות על פרטי החומרה ויותר על התוצאות שאתה מנסה להשיג.
הגדרת פרימיטיב ומימושים
ישנם שני סוגים של פרימיטיבי Qiskit: המחלקות הבסיסיות והמימושים שלהן. פרימיטיבי Estimator ו-Sampler מוגדרים על ידי מחלקות בסיס פרימיטיב בקוד פתוח שחיות ב-Qiskit SDK (במודול qiskit.primitives). ספקים (כגון Qiskit Runtime) יכולים להשתמש במחלקות בסיס אלה כדי לגזור מימושי Sampler ו-Estimator משלהם. רוב המשתמשים יתקשרו עם מימושי הספקים, לא עם הפרימיטיבים הבסיסיים.
מחלקות בסיס
פרימיטיבי ה-Base הם מחלקות מופשטות המגדירות ממשק משותף למימוש פרימיטיבים. כל שאר המחלקות במודול qiskit.primitives יורשות ממחלקות בסיס אלה. מפתחים צריכים להשתמש בהן אם הם מעוניינים ליצור מודל הרצה משלהם מבוסס פרימיטיבים עבור ספק ספציפי. מחלקות אלה עשויות להיות שימושיות גם למי שרוצה לבצע עיבוד מותאם מאוד ומגלה שמימושי הפרימיטיבים הקיימים פשוטים מדי לצרכיו. משתמשים כלליים לא ישתמשו ישירות במחלקות הבסיס.
BaseEstimatorV1 ו-BaseSamplerV1 — למרות שפרימיטיבי V1 עדיין ניתנים לשימוש, מדריכים אלה מתמקדים בפרימיטיבי V2 מאחר שהם העדכניים ביותר ונפוצים יותר.
BaseEstimatorV2 ו-BaseSamplerV2 — פרימיטיבי הייחוס של Qiskit עוקבים אחר מפרטי ממשק אלה.
מימושים
כל הפרימיטיבים נוצרים ממחלקות הבסיס; לפיכך, יש להם אותה מבנה ושימוש כלליים. לדוגמה, פורמט הקלט עבור כל פרימיטיבי Estimator זהה. עם זאת, ישנם הבדלים במימושים שהופכים אותם לייחודיים.
אלה הם מימושים של מחלקות הבסיס של הפרימיטיבים:
-
פרימיטיבי Qiskit Runtime,
EstimatorV2ו-SamplerV2, מספקים מימוש מתוחכם יותר (לדוגמה, על ידי הכללת הפחתת שגיאות) כשירות מבוסס ענן. מימוש זה של הפרימיטיבים הבסיסיים משמש לגישה לחומרה של IBM Quantum®. -
StatevectorEstimatorו-StatevectorSampler— מימושי ייחוס של הפרימיטיבים המשתמשים בסימולטור המובנה ב-Qiskit. הם בנוי ים עם מודולquantum_infoשל Qiskit, ומייצרים תוצאות המבוססות על סימולציות וקטור מצב אידיאליות. הם נגישים דרך Qiskit. ראה סימולציה מדויקת עם פרימיטיבי Qiskit לפרטי שימוש. -
BackendEstimatorV2ו-BackendSamplerV2— ניתן להשתמש במחלקות אלה כדי "לעטוף" כל משאב חישוב קוונטי בפרימיטיב. זה מאפשר לך לכתוב קוד בסגנון פרימיטיב עבור ספקים שעדיין אין להם ממשק מבוסס פרימיטיבים. ניתן להשתמש במחלקות אלה בדיוק כמו Sampler ו-Estimator הרגילים, אלא שיש לאתחלן עם ארגומנטbackendנוסף לבחירת מחשב הקוונטי להרצה עליו. הם נגישים באמצעות Qiskit. ראה את המדריך פרימיטיבים של backend לקבלת מידע נוסף.
אפשרויות
ניתן להעביר אפשרויות לפרימיטיבים כדי להתאים אותם לצרכיך. בעוד שממשק מתודת run() של הפרימיטיבים מש ותף לכל המימושים, האפשרויות שלהם אינן. עיין בעזרי ה-API עבור מימוש פרימיטיב ספציפי כדי ללמוד על האפשרויות שהוא תומך בהן.
לדוגמה, עיין בנושאי אפשרויות Estimator ואפשרויות Sampler כדי ללמוד על אפשרויות פרימיטיבי Qiskit Runtime, או ראה את עזרי ה-API של Qiskit Aer לאפשרויות פרימיטיבי Qiskit Aer.
יתרונות פרימיטיבי Qiskit
עם פרימיטיבים, משתמשי Qiskit יכולים לכתוב קוד קוונטי עבור QPU ספציפי מבלי לנהל כל פרט באופן מפורש. כמו כן, בשל שכבת ההפשטה הנוספת, ייתכן שתוכל לגשת ביתר קלות ליכולות החומרה המתקדמות של ספק נתון. לדוגמה, עם פרימיטיבי Qiskit Runtime, תוכל לנצל את ההתקדמות האחרונה בהפחתה ודיכוי שגיאות על ידי שינוי אפשרויות כגון resilience_level של הפרימיטיב, במקום לבנות מימוש משלך של טכניקות אלה.
עבור ספקי חומרה, מימוש פרימיטיבים באופן מקורי מאפשר לך לספק למשתמשים שלך דרך "מהקופסה" יותר לגשת לתכונות החומרה שלך כגון טכניקות עיבוד לאחר מתקדמות. לכן קל יותר למשתמשים שלך ליהנות מהיכולות הטובות ביותר של החומרה שלך.
הצעדים הבאים
- הבן את הקלט והפלט של הפרימיטיב.
- ראה דוגמאות מפורטות.
- תרגל עם פרימיטיבים על ידי עבודה דרך שיעור פונקציית עלות ב-IBM Quantum Learning.
- ראה יצירת ספק כדי ללמוד כיצד ליישם פרימיטיבי Sampler ו-Estimator משלך.
- ראה את עזרי ה-API.
- קרא העברה לפרימיטיבים V2.
- למד על פרימיטיבי Qiskit Runtime, המשמשים להרצת Circuits על QPU של IBM.