הגדרת ניהול רעש עם Estimator
Package versions
הקוד בעמוד זה פותח באמצעות הדרישות הבאות. אנחנו ממליצים להשתמש בגרסאות אלה או חדשות יותר.
qiskit-ibm-runtime~=0.47.0
ישנן מספר דרכים לנהל רעש, בדרך כלל באמצעות טכניקות שונות של הפחתת שגיאות ודיכוי שגיאות כדי למנוע שגיאות לפני שהן מתרחשות. טכניקות אלה בדרך כלל גורמות לתקורת עיבוד מקדים. לכן, חשוב להשיג איזון בין שכלול התוצאות שלכם לבין הבטחה שה-job שלכם יושלם בפרק זמן סביר.
Estimator תומך בטכניקות ניהול הרעש הבאות. ראו טכניקות הפחתת שגיאות ודיכוי שגיאות להסבר על כל אחת. ראו את החלק הגדרות ניהול רעש מותאמות אישית לדוגמה של הפעלת טכניקות אלה.
Dynamical decoupling
איך מפעילים: options.dynamical_decoupling.enable = True
מסמך עזר ל-API: DynamicalDecouplingOptions
אפשרויות בולטות: sequence_type
Pauli twirling
איך מפעילים: options.twirling.enable_gates = True
מסמך עזר ל-API: TwirlingOptions
אפשרויות בולטות: num_randomizations, shots_per_randomization
TREX
איך מפעילים: options.resilience.measure_mitigation = True
מסמך עזר ל-API: MeasureNoiseLearningOptions
אפשרויות בולטות:
ZNE
איך מפעילים: options.resilience.zne_mitigation = True
מסמך עזר ל-API: ZneOptions
אפשרויות בולטות: noise_factors, extrapolator
PEA
איך מפעילים: (חובה להפעיל גם ZNE) options.resilience.zne_mitigation = True ו-options.resilience.zne.amplifier = "pea"
מסמך עזר ל-API: ZneOptions
אפשרויות בולטות: noise_factors, extrapolator
PEC
איך מפעילים: options.resilience.pec_mitigation = True
מסמך עזר ל-API: PecOptions
אפשרויות בולטות: max_overhead
רמת חוסן
ה-resilience_level מציין כמה חוסן לבנות כנגד שגיאות. רמות גבוהות יותר מייצרות תוצאות מדויקות יותר, במחיר של זמני עיבוד ארוכים יותר. אפשר להשתמש ברמות חוסן כדי להגדיר את הפשרה בין עלות לדיוק בעת יישום ניהול רעש לשאילתת ה-primitive שלכם. ניהול רעש מפחית שגיאות (הטיה) בתוצאות על ידי עיבוד הפלטים מאוסף, או ensemble, של מעגלים קשורים. מידת הפחתת השגיאה תלויה בשיטה המיושמת. רמת החוסן מפשטת את הבחירה המפורטת של שיטת ניהול הרעש כדי לאפשר למשתמשים לחשוב על הפשרה בין עלות לדיוק שמתאימה לאפליקציה שלהם.
בהתאם לכך, כל רמה מתאימה לשיטה או שיטות עם תקורת דגימה קוונטית הולכת וגדלה, כדי לאפשר לכם להתנסות עם פשרות שונות בין זמן לדיוק. הטבלה הבאה מציגה אילו רמות ושיטות מתאימות זמינות לכל אחד מה-primitives.
| רמת חוסן | תיאור | טכניקה |
|---|---|---|
| 0 | ללא הפחתה | ללא |
| 1 [ברירת מחדל] | עלויות הפחתה מינימליות: הפחתת שגיאות הקשורות לשגיאות קריאה | Twirled Readout Error eXtinction (TREX) – twirling של מדידות |
| 2 | עלויות הפחתה בינוניות. בדרך כלל מפחית הטיה ב-estimators, אבל לא מובטח שתהיה אפס הטיה. | רמה 1 + Zero Noise Extrapolation (ZNE) ו-gate twirling |
רמות חוסן נמצאות כעת בבטא, כך שתקורת הדגימה ואיכות הפתרון ישתנו ממעגל למעגל. תכונות חדשות, אפשרויות מתקדמות וכלי ניהול ישוחררו באופן שוטף. אין הבטחה ששיטות ניהול רעש ספציפיות ייושמו בכל רמת חוסן.
הגדרת Estimator עם רמות חוסן
אפשר להשתמש ברמות חוסן כדי לציין טכניקות ניהול רעש, או להגדיר טכניקות מותאמות אישית בנפרד כמתואר בהגדרות ניהול רעש מותאמות אישית.
כל אפשרות שמגדירים ידנית בנוסף לרמת החוסן מיושמת בנוסף לסט הבסיסי של אפשרויות שהוגדרו על ידי רמת החוסן. לכן, עקרונית, אפשר להגדיר את רמת החוסן ל-1, אך לאחר מכן לכבות את הפחתת המדידה, אם כי זה לא מומלץ.
לדוגמה, הגדרת רמת החוסן ל-0 מכבה את zne_mitigation, אך estimator.options.resilience.zne_mitigation = True דורס ערך זה.
דוגמה
הקוד הבא מפעיל ZNE, TREX ו-gate twirling על ידי הגדרת resilience_level 2.
# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util
_needed = {"qiskit_ibm_runtime": "qiskit-ibm-runtime"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
from qiskit_ibm_runtime import QiskitRuntimeService
# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator
# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import Estimator
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
# Setting options during primitive initialization
estimator = Estimator(backend, options={"resilience_level": 2})
הגדרות ניהול רעש מותאמות אישית
אפשר להפעיל ולכבות שיטות ניהול רעש בודדות על ידי שימוש באפשרויות Estimator.
- לא כל האפשרויות עובדות יחד בכל סוגי המעגלים. לפרטים, ראו את טבלת תאימות התכונות.
- אם אתם משתמשים ב-Estimator החדש בצד הלקוח שהוצג ב-
qiskit-ibm-runtimeגרסה v0.50.0, נדרש job נפרד של למידת רעש כדי להשתמש ב-PEA וב-PEC. למידע נוסף, ראו מעבר מ-Sampler ו-Estimator בצד השרת לצד הלקוח.
דוגמה מלאה עם מספר אפשרויות
from qiskit_ibm_runtime import QiskitRuntimeService
# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator
# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import Estimator
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
estimator = Estimator(backend)
options = estimator.options
# Turn on gate twirling.
options.twirling.enable_gates = True
# Turn on measurement error mitigation.
options.resilience.measure_mitigation = True
print(
f">>> gate twirling is turned on: {estimator.options.twirling.enable_gates}"
)
print(
f">>> measurement error mitigation is turned on: "
f"{estimator.options.twirling.enable_gates}"
)
>>> gate twirling is turned on: True
>>> measurement error mitigation is turned on: True
כיבוי כל הפחתת השגיאות
להוראות לכיבוי כל הפחתת השגיאות ראו את החלק כיבוי כל דיכוי והפחתת שגיאות במדריך אפשרויות Estimator.
השלבים הבאים
- עברו על דוגמה שמשתמשת בהפחתת שגיאות בשיעור פונקציית עלות ב-IBM Quantum Learning.
- למדו עוד על טכניקות הפחתת שגיאות ודיכוי שגיאות.
- חקרו אפשרויות Estimator.
- החליטו באיזה מצב הרצה להריץ את העבודה שלכם.