פונקציית Circuit של IBM
- פונקציות Qiskit הן תכונה ניסיונית הזמינה רק למשתמשי IBM Quantum® Premium Plan, Flex Plan ו-On-Prem (דרך IBM Quantum Platform API) Plan. הן נמצאות בסטטוס שחרור תצוגה מקדימה וכפופות לשינויים.
סקירה כללית
פונקציית Circuit של IBM® מקבלת PUBs מופשטים כקלט ומחזירה ערכי ציפייה מותאמים כפלט. פונקציית Circuit זו כוללת צינור עיבוד אוטומטי ומותאם אישית כדי לאפשר לחוקרים להתמקד בגילוי אלגוריתמים ויישומים.
תיאור
לאחר שתגיש את ה-PUB שלך, המעגלים המופשטים והאובזרבבלים שלך יעברו טרנספילציה אוטומטית, הרצה על חומרה ועיבוד-לאחר כדי להחזיר ערכי ציפייה מותאמים. לשם כך, הפונקציה משלבת את הכלים הבאים:
- שירות Qiskit Transpiler, כולל בחירה אוטומטית של מעברי טרנספילציה מונחי בינה מלאכותית והיוריסטיים לתרגום המעגלים המופשטים שלך למעגלי ISA מותאמי חומרה
- טכניקות דיכוי ומיתון שגיאות הנדרשות לחישוב בקנה מידה שימושי, כולל twirling של מדידות ושערים, ניתוק דינמי, Twirled Readout Error eXtinction (TREX), Zero-Noise Extrapolation (ZNE) ו-Probabilistic Error Amplification (PEA)
- Qiskit Runtime Estimator, להרצת PUBs מסוג ISA על חומרה והחזרת ערכי ציפייה מותאמים
תחילת עבודה
אמת את זהותך באמצעות מפתח ה-API שלך ובחר את פונקציית Qiskit כדלקמן. (קטע קוד זה מניח שכבר שמרת את חשבונך בסביבה המקומית שלך.)
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-catalog qiskit-ibm-runtime
from qiskit_ibm_catalog import QiskitFunctionsCatalog
catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")
function = catalog.load("ibm/circuit-function")
דו גמה
כדי להתחיל, נסה את הדוגמה הבסיסית הזו:
from qiskit.circuit.random import random_circuit
from qiskit_ibm_runtime import QiskitRuntimeService
# You can skip this step if you have a target backend, e.g.
# backend_name = "ibm_brisbane"
# You'll need to specify the credentials when initializing QiskitRuntimeService, if they were not previously saved.
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
circuit = random_circuit(num_qubits=2, depth=2, seed=42)
observable = "Z" * circuit.num_qubits
pubs = [(circuit, observable)]
job = function.run(
# Use `backend_name=backend_name` if you didn't initialize a backend object
backend_name=backend.name,
pubs=pubs,
)
בדוק את הסטטוס של עומס העבודה של פונקציית Qiskit שלך או אחזר את התוצאות כדלקמן:
print(job.status())
result = job.result()
QUEUED
לתוצאות יש את אותו פורמט כמו תוצאת Estimator:
print(f"The result of the submitted job had {len(result)} PUB\n")
print(
f"The associated PubResult of this job has the following DataBins:\n {result[0].data}\n"
)
print(f"And this DataBin has attributes: {result[0].data.keys()}")
print(
f"The expectation values measured from this PUB are: \n{result[0].data.evs}"
)
The result of the submitted job had 1 PUB
The associated PubResult of this job has the following DataBins:
DataBin(evs=np.ndarray(<shape=(), dtype=float64>), stds=np.ndarray(<shape=(), dtype=float64>), ensemble_standard_error=np.ndarray(<shape=(), dtype=float64>))
And this DataBin has attributes: dict_keys(['evs', 'stds', 'ensemble_standard_error'])
The expectation values measured from this PUB are:
1.02116704805492
קלטים
ראה את הטבלה הבאה לכל פרמטרי הקלט שפונקציית Circuit של IBM מקבלת. חלק ה-אפשרויות שלאחר מכן מפרט יותר לגבי האפשרויות הזמינות ב-options.
| שם | סוג | תיאור | נדרש | ברירת מחדל | דוגמה |
|---|---|---|---|---|---|
| backend_name | str | שם ה-Backend לביצוע השאילתה. | כן | N/A | ibm_fez |
| pubs | Iterable[EstimatorPubLike] | אוסף ניתן לחזרה של אובייקטי PUB-like מופשטים (primitive unified bloc), כגון טאפלים (circuit, observables) או (circuit, observables, parameter_values). ראה סקירת PUBs למידע נוסף. המעגלים יכולים להיות מופשטים (non-ISA). | כן | N/A | (circuit, observables, parameter_values) |
| options | dict | אפשרויות קלט. ראה את סעיף אפשרויות לפרטים נוספים. | לא | ראה את סעיף אפשרויות לפרטים. | {"optimization_level": 3} |
| instance | str | שם המשאב בענן של המופע לשימוש בפורמט זה. | לא | נבחר אחד אקראי אם לחשבונך יש גישה למספר מופעים. | CRN |
אפשרויות
מבנה
בדומה לפרימיטיביות של Qiskit Runtime, אפשרויות לפונקציית Circuit של IBM ניתן לציין כמילון מקונן. אפשרויות נפוצות, כגון optimization_level ו-mitigation_level, נמצאות ברמה הראשונה. אפשרויות מתקדמות יותר מקובצות לקטגוריות שונות, כגון resilience.
ברירות מחדל
אם לא תציין ערך עבור אפשרות, ישמש הערך ברירת המחדל שצוין על ידי השירות.
רמת מיתון
פונקציית Circuit של IBM תומכת גם ב-mitigation_level. רמת המיתון מציינת כמה דיכוי ומיתון שגיאות להחיל על המשימה. רמות גבוהות יותר מייצרות תוצאות מדויקות יותר, על חשבון זמני עיבוד ארוכים יותר. מידת הפחתת השגיאה תלויה בשיטה המיושמת. רמת המיתון מייצגת בצורה מופשטת את הבחירה המפורטת של שיטות מיתון ודיכוי שגיאות כדי לאפשר למשתמשים לשקול את פשרת העלות/דיוק המתאימה ליישום שלהם. הטבלה הבאה מציגה את השיטות המתאימות לכל רמה.
למרות שהשמות דומים, mitigation_level מיישם טכניקות שונות מאלה שבהן משתמש resilience_level של Estimator.
בדומה ל-resilience_level ב-Qiskit Runtime Estimator, mitigation_level מציין קבוצת בסיס של אפשרויות נבחרות. כל אפשרות שתציין ידנית בנוסף לרמת המיתון מוחלת על גבי קבוצת האפשרויות הבסיסית שהוגדרה על ידי רמת המיתון. לכן, באופן עקרוני, אפשר להגדיר את רמת המיתון ל-1 אך לכבות את מיתון המדידה, אם כי אין לעשות זאת.
| רמת מיתון | טכניקה |
|---|---|
| 1 [ברירת מחדל] | Dynamical decoupling + measurement twirling + TREX |
| 2 | רמה 1 + gate twirling + ZNE דרך gate folding |
| 3 | רמה 1 + gate twirling + ZNE דרך PEA |
הדוגמה הבאה מדגימה הגדרת רמת המיתון:
options = {"mitigation_level": 2}
job = function.run(backend_name=backend.name, pubs=pubs, options=options)
כל האפשרויות הזמינות
בנוסף ל-mitigation_level, פונקציית Circuit של IBM מספקת גם מספר מוגבל של אפשרויות מתקדמות המאפשרות לך לכוונן את פשרת העלות/דיוק. הטבלה הבאה מציגה את כל האפשרויות הזמינות:
| אפשרות | תת-אפשרות | תת-תת-אפשרות | תיאור | בחירות | ברירת מחדל |
|---|---|---|---|---|---|
| default_precision | הדיוק ברירת המחדל לשימוש עבור כל PUB או קריאת run()שאינה מציינת דיוק משלה. כל PUB קלט יכול לציין דיוק משלו. אם ל- run() ניתן ערך דיוק, הוא ישמש עבור כל ה-PUBs בקריאת run() שאינם מציינים דיוק משלהם. | float > 0 | 0.015625 | ||
| max_execution_time | זמן ביצוע מרבי בשניות, המבוסס על שימוש ב-QPU (לא זמן שעון קיר). שימוש ב-QPU הוא הזמן שה-QPU מוקדש לעיבוד המשימה שלך. אם משימה חורגת ממגבלת זמן זו, היא תבוטל בכפייה. | מספר שלם של שניות בטווח [1, 10800] | |||
| mitigation_level | כמה דיכוי ומיתון שגיאות להחיל. עיין בסעיף רמת מיתון למידע נוסף על השיטות המשמשות בכל רמה. | 1 / 2 / 3 | 1 | ||
| optimization_level | כמה אופטימיזציה לבצע על המעגלים. רמות גבוהות יותר מייצרות מעגלים מותאמים יותר, על חשבון זמן טרנספילציה ארוך יותר. | 1 / 2 / 3 | 2 | ||
| dynamical_decoupling | enable | האם לאפשר dynamical decoupling. עיין ב-טכניקות דיכוי ומיתון שגיאות להסבר על השיטה. | True/False | True | |
| sequence_type | איזו רצף dynamical decoupling להשתמש בו. * XX: שימוש ברצף tau/2 - (+X) - tau - (+X) - tau/2* XpXm: שימוש ברצף tau/2 - (+X) - tau - (-X) - tau/2* XY4: שימוש ברצףtau/2 - (+X) - tau - (+Y) - tau (-X) - tau - (-Y) - tau/2 | 'XX'/'XpXm'/'XY4' | 'XX' | ||
| twirling | enable_gates | האם להחיל twirling של שערי Clifford דו-קיוביטיים. | True/False | False | |
| enable_measure | האם לאפשר twirling של מדידות. | True/False | True | ||
| resilience | measure_mitigation | האם לאפשר שיטת מיתון שגיאות מדידה TREX. עיין ב-טכניקות דיכוי ומיתון שגיאות להסבר על השיטה. | True/False | True | |
| zne_mitigation | האם להפעיל שיטת מיתון שגיאות Zero Noise Extrapolation. עיין ב-טכניקות דיכוי ומיתון שגיאות להסבר על השיטה. | True/False | False | ||
| zne | amplifier | איזו טכניקה להשתמש בה להגברת רעש. אחת מ: - gate_folding (ברירת מחדל) משתמשת ב-gate folding דו-קיוביטי להגברת רעש. אם גורם הרעש דורש הגברה של תת-קבוצה בלבד של השערים, שערים אלה נבחרים באקראי.- gate_folding_front משתמשת ב-gate folding דו-קיוביטי להגברת רעש. אם גורם הרעש דורש הגברה של תת-קבוצה בלבד של השערים, שערים אלה נבחרים מהחזית של מעגל ה-DAG הממוין טופולוגית.- gate_folding_back משתמשת ב-gate folding דו-קיוביטי להגברת רעש. אם גורם הרעש דורש הגברה של תת-קבוצה בלבד של השערים, שערים אלה נבחרים מהגב של מעגל ה-DAG הממוין טופולוגית.- pea משתמשת בטכניקה הנקראת Probabilistic error amplification (PEA) להגברת רעש. עיין ב-טכניקות דיכוי ומיתון שגיאות להסבר על השיטה. | gate_folding / gate_folding_front / gate_folding_back / pea | gate_folding | |
| noise_factors | גורמי רעש לשימוש בהגברת רעש. | רשימה של floats; כל float >= 1 | (1, 1.5, 2) עבור PEA, ו-(1, 3, 5) בכל מקרה אחר. | ||
| extrapolator | גורמי רעש להערכת מודלי ה-fit extrapolation בהם. אפשרות זו אינה משפיעה על הביצוע או התאמת המודל בשום אופן; היא קובעת רק את הנקודות שבהן מוערכים אובייקטי ה-extrapolator כדי להחזירם בשדות הנתונים evs_extrapolated ו-stds_extrapolated. | אחד או יותר מ-exponential,linear, double_exponential,polynomial_degree_(1 <= k <= 7) | (exponential, linear) | ||
| pec_mitigation | האם להפעיל שיטת מיתון שגיאות Probabilistic Error Cancellation. עיין ב-טכניקות דיכוי ומיתון שגיאות להסבר על השיטה. | True/False | False | ||
| pec | max_overhead | עומס הדגימה המרבי המותר של המעגל, או None ללא מקסימום. | None/ מספר שלם >1 | 100 |
בדוגמה הבאה, הגדרת רמת המיתון ל-1 מכבה בתחילה את מיתון ZNE, אך הגדרת zne_mitigation ל-True עוקפת את ההגדרה הר לוונטית מ-mitigation_level.
options = {"mitigation_level": 1, "resilience": {"zne_mitigation": True}}