טכניקות לצמצום ודיכוי שגיאות
גרסת הבטא של מודל הרצה חדש זמינה כעת. מודל ההרצה הממוקד מספק גמישות רבה יותר בהתאמה אישית של תהליך עבודת צמצום השגיאות שלך. ראה את המדריך מודל הרצה ממוקד לפרטים נוספים.
Package versions
The code on this page was developed using the following requirements. We recommend using these versions or newer.
qiskit-ibm-runtime~=0.46.1
טכניקות לצמצום שגיאות ולדיכוי שגיאות משמשות לשיפור איכות התוצאות בעת הגדלת עומסי עבודה. עמוד זה מספק הסברים ברמה גבוהה על טכניקות דיכוי השגיאות וצמצום השגיאות הזמינות דרך Qiskit Runtime.
תא הקוד הבא מייבא את ה-primitive של Estimator ויוצר Backend שישמש לאתחול ה-Estimator בתאי קוד מאוחרים יותר.
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit-ibm-runtime
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.least_busy()
ניתוק דינמי
מעגלי Quantum מורצים על חומרת IBM® כרצפים של פולסי מיקרוגל הדורשים תזמון והרצה במרווחי זמן מדויקים. למרבה הצער, אינטראקציות לא רצויות בין Qubits עלולות להוביל לשגיאות קוהרנטיות ב-Qubits שנמצאים בסרק. הניתוק הדינמי פועל על ידי הכנסת רצפי פולסים ל-Qubits סרקים כדי לבטל בקירוב את ההשפעה של שגיאות אלו. כל רצף פולסים שמוכנס שווה ערך לפעולת זהות, אך הנוכחות הפיזית של הפולסים מדכאת שגיאות. קיימות בחירות רבות אפשריות של רצפי פולסים, ואיזה רצף עדיף לכל מקרה פרטי נותר תחום מחקר פעיל.
שים לב שניתוק דינמי שימושי בעיקר עבור מעגלים המכילים פערים שבהם חלק מה-Qubits יושבים בסרק ללא פעולות כלשהן שפועלות עליהם. אם הפעולות במעגל ארוזות בצפיפות רבה, כך שכל ה-Qubits עסוקים רוב הזמן, אזי הוספת פולסי ניתוק דינמי עשויה לא לשפר את הביצועים. למעשה, היא אף עלולה להרע את הביצועים עקב אי-שלמויות בפולסים עצמם.
התרשים שלהלן מתאר ניתוק דינמי עם רצף פולסים XX. ה-Circuit המופשט משמאל ממופה לתזמון פולס מיקרוגל בפינה הימנית העליונה. הפינה הימנית התחתונה מתארת את אותו תזמון, אך עם רצף של שני פולסי X המוכנסים במהלך תקופת סרק של ה-Qubit הראשון.

ניתן להפעיל ניתוק דינמי על ידי הגדרת enable ל-True באפשרויות הניתוק הדינמי. ניתן להשתמש באפשרות sequence_type כדי לבחור מבין מספר רצפי פולסים שונים. סוג הרצף המוגדר כברירת מחדל הוא "XX".
תא הקוד הבא מראה כיצד להפעיל ניתוק דינמי עבור Estimator ולבחור רצף ניתוק דינמי.
estimator = Estimator(mode=backend)
estimator.options.dynamical_decoupling.enable = True
estimator.options.dynamical_decoupling.sequence_type = "XpXm"
סיבוב פאולי
סיבוב (Twirling), הידוע גם בשם קימפול אקראי, הוא טכניקה נפוצה להמרת ערוצי רעש שרירותיים לערוצי רעש בעלי מבנה ספציפי יותר.
סיבוב פאולי הוא סוג מיוחד של סיבוב המשתמש בפעולות פאולי. יש לו את האפקט של המרת כל ערוץ קוונטי לערוץ פאולי. כשמבצעים אותו לבד, הוא יכול לצמצם רעש קוהרנטי מכיוון שרעש קוהרנטי נוטה להצטבר בריבועית עם מספר הפעולות, בעוד רעש פאולי מצטבר באופן ליניארי. סיבוב פאולי משולב לעיתים קרובות עם טכניקות אחרות לצמצום שגיאות שעובדות טוב יותר עם רעש פאולי מאשר עם רעש שרירותי.
סיבוב פאולי מיושם על ידי עטיפת קבוצה נבחרת של Gate-ים עם Gate-ים אקראיים של Pauli חד-Qubit באופן שהאפקט האידיאלי של ה-Gate נשאר זהה. התוצאה היא שמעגל בודד מוחלף במכלול אקראי של מעגלים, כולם בעלי אותו אפקט אידיאלי. בעת דגימת המעגל, דגימות נלקחות ממספר מופעים אקראיים, ולא רק מאחד.
מכיוון שרוב השגיאות בחומרה קוונטית נוכחית מגיעות מ-Gate-ים של שני Qubits, טכניקה זו מוחלת לרוב באופן בלעדי על Gate-ים (מקוריים) של שני Qubits. התרשים הבא מתאר כמה סיבובי פאולי עבור ה-Gate-ים CNOT ו-ECR. כל מעגל בשורה הוא בעל אותו אפקט אידיאלי.

ניתן להפעיל סיבוב פאולי על ידי הגדרת enable_gates ל-True באפשרויות הסיבוב. אפשרויות בולטות נוספות כוללות:
num_randomizations: מספר מופעי המעגל לשלוף מהמכלול של מעגלים מסובבים.shots_per_randomization: מספר ה-shots לדגום מכל מופע מעגל.
תא הקוד הבא מראה כיצד להפעיל סיבוב פאולי ולהגדיר אפשרויות אלה עבור Estimator. אין צורך להגדיר באו פן מפורש אף אחת מהאפשרויות הללו.
estimator = Estimator(mode=backend)
estimator.options.twirling.enable_gates = True
estimator.options.twirling.num_randomizations = 32
estimator.options.twirling.shots_per_randomization = 100
ביטול שגיאות מדידה מסובבת (TREX)
ביטול שגיאות מדידה מסובבת (TREX) מצמצם את השפעת שגיאות המדידה עבור הערכת ערכי ציפייה של תצפיות פאולי. הוא מבוסס על המושג של מדידות מסובבות, המושגות ע ל ידי החלפה אקראית של Gate-ים של מדידה ברצף של (1) Gate X של פאולי, (2) מדידה, ו-(3) היפוך סיביות קלאסי. בדיוק כמו בסיבוב Gate רגיל, רצף זה שווה ערך למדידה פשוטה בהיעדר רעש, כפי שמתואר בתרשים הבא:
בנוכחות שגיאת מדידה, לסיבוב המדידה יש את האפקט של אלכסון מטריצת העברת שגיאות המדידה, מה שמקל על ההיפוך שלה. מונח קנה-מידה מחדש מהערוץ הרעש האלכסוני נלמד על ידי בנצ'מרקינג של מעגלים אקראיים המאותחלים במצב אפס. זה מאפשר לשירות להסיר הטיה מערכי ציפייה הנובעים מ רעש מדידה. הערכת מטריצת העברת שגיאות המדידה דורשת הרצת מעגלי כיול נוספים, מה שמביא לתקורה קטנה.
הפעלת TREX באמצעות אפשרות measure_mitigation
ניתן להפעיל TREX על ידי הגדרת measure_mitigation ל-True באפשרויות העמידות של Qiskit Runtime עבור Estimator. האפשרויות ללמידת רעש מדידה מתוארות כאן. כמו בסיבוב Gate, ניתן להגדיר את מספר האקראות של המעגל ואת מספר ה-shots לכל אקראות.
תא הקוד הבא מראה כיצד להפעיל TREX ולהגדיר אפשרויות אלה עבור Estimator. אין צורך להגדיר באופן מפורש אף אחת מהאפשרויות הללו.
estimator = Estimator(mode=backend)
estimator.options.resilience.measure_mitigation = True
estimator.options.resilience.measure_noise_learning.num_randomizations = 32
estimator.options.resilience.measure_noise_learning.shots_per_randomization = 100
הפעלת TREX באמצעות אפשרות resilience_level
ניתן להפעיל TREX על ידי הגדרת רמת העמידות ל-1, כפי שמו צג בדוגמה הבאה.
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
# Setting options during primitive initialization
estimator = Estimator(backend, options={"resilience_level": 1})
אקסטרפולציה לאפס רעש (ZNE)
אקסטרפולציה לאפס רעש (ZNE) היא טכניקה לצמצום שגיאות בהערכת ערכי ציפייה של תצפיות. למרות שהיא לעיתים קרובות משפרת תוצאות, אין ערובה שהיא תפיק תוצאה בלתי מוטה.
ZNE מורכבת משני שלבים:
- הגברת רעש: המעגל הקוונטי המקורי מורץ מספר פעמים בשיעורי רעש שונים.
- אקסטרפולציה: התוצאה האידיאלית מוערכת על ידי אקסטרפולציה של תוצאות ערך הציפייה הרועשות לגבול האפס-רעש.
ניתן לממש הן את שלב הגברת הרעש והן את שלב האקסטרפולציה בדרכים שונות רבות. Qiskit Runtime מממש הגברת רעש על ידי "קיפול Gate דיגיטלי", מה שאומר ש-Gate-ים של שני Qubits מוחלפים ברצפים שקולים של ה-Gate והופכו. לדוגמה, החלפת יחידה ב- תניב גורם הגברת רעש של 3. עבור האקסטרפולציה, ניתן לבחור מבין מספר צורות פונקציונליות, כולל התאמה ליניארית או התאמה מעריכית. התמונה שלהלן מתארת קיפול Gate דיגיטלי משמאל, ואת תהליך האקסטרפולציה מימין.

התקורה של שיטה זו גדלה עם מספר גורמי הרעש. הגדרות ברירת המחדל דוגמות את ע רך הציפייה בשלושה גורמי רעש, מה שמוביל לתקורה של כ-3x.
הפעלת ZNE באמצעות אפשרות zne_mitigation
ניתן להפעיל ZNE על ידי הגדרת zne_mitigation ל-True באפשרויות העמידות של Qiskit Runtime עבור Estimator.
האפשרויות של Qiskit Runtime ל-ZNE מתוארות כאן. האפשרויות הבולטות הבאות:
noise_factors: גורמי הרעש לשימוש עבור הגברת הרעש.extrapolator: הצורה הפונקציונלית לשימוש עבור האקסטרפולציה.
תא הקוד הבא מראה כיצד להפעיל ZNE ולהגדיר אפשרויות אלה עבור Estimator. אין צורך להגדיר באופן מפורש אף אחת מהאפשרויות הללו.
estimator = Estimator(mode=backend)
estimator.options.resilience.zne_mitigation = True
estimator.options.resilience.zne.noise_factors = (1, 3, 5)
estimator.options.resilience.zne.extrapolator = "exponential"
הפעלת ZNE באמצעות אפשרות resilience_level
ניתן להפעיל ZNE (יחד עם TREX וסיבוב Gate) על ידי הגדרת רמת העמידות ל-2, כפי שמוצג בדוגמה הבאה.
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
# Setting options during primitive initialization
estimator = Estimator(backend, options={"resilience_level": 2})
הגברת שגיאות הסתברותית (PEA)
אחד האתגרים העיקריים ב-ZNE הוא להגביר במדויק את הרעש המשפיע על המעגל המטרה. קיפול Gate מספק דרך קלה לביצוע הגברה זו, אך הוא עלול להיות לא מדויק ועלול להוביל לתוצאות שגויות. ראה את המאמר "Scalable error mitigation for noisy quantum circuits produces competitive expectation values", ובפרט עמוד 4 של המידע המשלים לפרטים. הגברת שגיאות הסתברותית מספקת גישה מדויקת יותר להגברת שגיאות באמצעות למידת רעש.
PEA היא טכניקה מתוחכמת יותר המבצעת ניסויים מקדימים לשחזור הרעש ולאחר מכן משתמשת במידע זה לביצוע הגברה מדויקת. היא מתחילה בלמידת מודל הרעש המסובב של כל שכבה של Gate-ים שזירה במעגל לפני הרצתם (ראה LayerNoiseLearningOptions לאפשרויות למידה רלוונטיות). לאחר שלב הלמידה, המעגלים מורצים בכל גורם רעש, כאשר כל שכבת שזירה של המעגלים מוגברת על ידי הזרקה הסתברותית של רעש חד-Qubit פרופורציונלי למודל הרעש הנלמד המתאים. ראה את המאמר "Evidence for the utility of quantum computing before fault tolerance" לפרטים נוספים.
PEA מורכבת משלושה שלבים:
- למידה: מודל הרעש המסובב של כל שכבה של Gate-ים שזירה במעגל נלמד.
- הגברת רעש: המעגל הקוונטי המקורי מורץ מספר פעמים בגורמי רעש שונים.
- אקסטרפולציה: התוצאה האידיאלית מוערכת על ידי אקסטרפולציה של תוצאות ערך הציפייה הרועשות לגבול האפס-רעש.
עבור ניסויים בקנה מידה שימושיות, PEA היא לרוב הבחירה הטובה ביותר.
מכיוון ש-PEA היא טכניקת הגברת רעש של ZNE, עליך גם להפעיל ZNE על ידי הגדרת resilience.zne_mitigation = True. ניתן גם להשתמש באפשרויות resilience.zne אחרות להגדרת אקסטרפולטורים, רמות הגברה וכן הלאה. PEA דורשת מודל רעש, הנוצר אוטומטית בעת שימוש ב-primitives.
הקטע הבא מספק דוגמה שבה PEA משמשת לצמצום תוצאת עבודת Estimator:
estimator = Estimator(mode=backend)
estimator.options.resilience.zne_mitigation = True
estimator.options.resilience.zne.amplifier = "pea"
ביטול שגיאות הסתברותי (PEC)
ביטול שגיאות הסתברותי (PEC) הוא טכניקה לצמצום שגיאות בהערכת ערכי ציפייה של תצפיות. בניגוד ל-ZNE, הוא מחזיר אומד בלתי מוטה של ערך הציפייה. עם זאת, הוא בדרך כלל גורר תקורה גדולה יותר.
ב-PEC, האפקט של מעגל מטרה אידיאלי מבוטא כצירוף לינארי של מעגלים רועשים שניתנים למימוש בפועל:
ניתן לשחזר את הפלט של המעגל האידיאלי על ידי הרצת מופעי מעגל רועשים שונים הנשלפים ממכלול אקראי המוגדר על ידי הצירוף הלינארי. אם המקדמים יוצרים התפלגות הסתברות, ניתן להשתמש בהם ישירות כהסתברויות של המכלול. בפועל, חלק מהמקדמים שליליים, ולכן הם יוצרים התפלגות מעין-הסתברות במקום. ניתן עדיין להשתמש בהם להגדרת מכלול אקראי, אך קיימת תקורת דגימה הקשורה לשליליות של התפלגות המעין-הסתברות, המאופיינת בכמות
תקורת הדגימה היא גורם כפלי על מספר ה-shots הנדרש להערכת ערך ציפייה לדיוק נתון, בהשוואה למספר ה-shots שיידרשו מהמעגל האידיאלי. הוא גדל ריבועית עם , אשר בתורו גדל מ עריכית עם עומק המעגל.
ניתן להפעיל PEC על ידי הגדרת pec_mitigation ל-True באפשרויות העמידות של Qiskit Runtime עבור ה-Estimator.
האפשרויות של Qiskit Runtime ל-PEC מתוארות כאן. ניתן להגדיר מגבלה על תקורת הדגימה באמצעות אפשרות max_overhead. שים לב שהגבלת תקורת הדגימה עלולה לגרום לדיוק התוצאה לחרוג מהדיוק המבוקש. ערך ברירת המחדל של max_overhead הוא 100.
תא הקוד הבא מראה כיצד להפעיל PEC ולהגדיר את אפשרות max_overhead עבור Estimator.
estimator = Estimator(mode=backend)
estimator.options.resilience.pec_mitigation = True
estimator.options.resilience.pec.max_overhead = 100
השלבים הבאים
- ראה במדריך על שילוב אפשרויות צמצום שגיאות עם ה-primitive של Estimator.
- הגדר ניהול רעש עם Estimator.
- הגדר ניהול רעש עם Sampler.
- חקור אפשרויות נוספות עבור ה-primitives של Qiskit Runtime.
- החלט באיזה מצב הרצה להריץ את העבודה שלך.