דלג לתוכן הראשי

פונקציית Circuit של IBM

הערה
  • פונקציות Qiskit הן תכונה ניסיונית הזמינה רק למשתמשי IBM Quantum® Premium Plan,‏ Flex Plan ו-On-Prem (דרך IBM Quantum Platform API) Plan. הן נמצאות בסטטוס שחרור תצוגה מקדימה וכפופות לשינויים.

סקירה כללית

פונקציית Circuit של IBM® מקבלת PUBs מופשטים כקלט ומחזירה ערכי ציפייה מותאמים כפלט. פונקציית Circuit זו כוללת צינור עיבוד אוטומטי ומותאם אישית כדי לאפשר לחוקרים להתמקד בגילוי אלגוריתמים ויישומים.

תיאור

לאחר שתגיש את ה-PUB שלך, המעגלים המופשטים והאובזרבבלים שלך יעברו טרנספילציה אוטומטית, הרצה על חומרה ועיבוד-לאחר כדי להחזיר ערכי ציפייה מותאמים. לשם כך, הפונקציה משלבת את הכלים הבאים:

IBM Circuit function

תחילת עבודה

אמת את זהותך באמצעות מפתח ה-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_namestrשם ה-Backend לביצוע השאילתה.כןN/Aibm_fez
pubsIterable[EstimatorPubLike]אוסף ניתן לחזרה של אובייקטי PUB-like מופשטים (primitive unified bloc), כגון טאפלים (circuit, observables) או (circuit, observables, parameter_values). ראה סקירת PUBs למידע נוסף. המעגלים יכולים להיות מופשטים (non-ISA).כןN/A(circuit, observables, parameter_values)
optionsdictאפשרויות קלט. ראה את סעיף אפשרויות לפרטים נוספים.לאראה את סעיף אפשרויות לפרטים.{"optimization_level": 3}
instancestrשם המשאב בענן של המופע לשימוש בפורמט זה.לאנבחר אחד אקראי אם לחשבונך יש גישה למספר מופעים.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 > 00.015625
max_execution_timeזמן ביצוע מרבי בשניות, המבוסס
על שימוש ב-QPU (לא זמן שעון קיר). שימוש ב-QPU הוא
הזמן שה-QPU מוקדש לעיבוד המשימה שלך. אם משימה חורגת ממגבלת זמן זו, היא תבוטל בכפייה.
מספר שלם של שניות בטווח [1, 10800]
mitigation_levelכמה דיכוי ומיתון שגיאות להחיל. עיין בסעיף רמת מיתון למידע נוסף על השיטות המשמשות בכל רמה.1 / 2 / 31
optimization_levelכמה אופטימיזציה לבצע על המעגלים. רמות גבוהות יותר מייצרות מעגלים מותאמים יותר, על חשבון זמן טרנספילציה ארוך יותר.1 / 2 / 32
dynamical_decouplingenableהאם לאפשר dynamical decoupling. עיין ב-טכניקות דיכוי ומיתון שגיאות להסבר על השיטה.True/FalseTrue
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'
twirlingenable_gatesהאם להחיל twirling של שערי Clifford דו-קיוביטיים.True/FalseFalse
enable_measureהאם לאפשר twirling של מדידות.True/FalseTrue
resiliencemeasure_mitigationהאם לאפשר שיטת מיתון שגיאות מדידה TREX. עיין ב-טכניקות דיכוי ומיתון שגיאות להסבר על השיטה.True/FalseTrue
zne_mitigationהאם להפעיל שיטת מיתון שגיאות Zero Noise Extrapolation. עיין ב-טכניקות דיכוי ומיתון שגיאות להסבר על השיטה.True/FalseFalse
zneamplifierאיזו טכניקה להשתמש בה להגברת רעש. אחת מ:
- 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 / peagate_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/FalseFalse
pecmax_overheadעומס הדגימה המרבי המותר של המעגל, או None ללא מקסימום.None/ מספר שלם >1100

בדוגמה הבאה, הגדרת רמת המיתון ל-1 מכבה בתחילה את מיתון ZNE, אך הגדרת zne_mitigation ל-True עוקפת את ההגדרה הרלוונטית מ-mitigation_level.

options = {"mitigation_level": 1, "resilience": {"zne_mitigation": True}}

פלטים

הפלט של פונקציית Circuit הוא PrimitiveResult, המכיל שני שדות:

  • אובייקט PubResult אחד או יותר. ניתן לגשת אליהם ישירות מה-PrimitiveResult.

  • מטאדאטה ברמת המשימה.

כל PubResult מכיל שדה data ושדה metadata.

  • שדה ה-data מכיל לפחות מערך של ערכי ציפייה (PubResult.data.evs) ומערך של שגיאות תקן (PubResult.data.stds). הוא עשוי להכיל גם נתונים נוספים, בהתאם לאפשרויות שבהן נעשה שימוש.

  • שדה ה-metadata מכיל מטאדאטה ברמת ה-PUB (PubResult.metadata).

קטע הקוד הבא מתאר את פורמט ה-PrimitiveResult (וה-PubResult המשויך).

print(f"The result of the submitted job had {len(result)} PUB")
print(
f"The expectation values measured from this PUB are: \n{result[0].data.evs}"
)
print(f"And the associated metadata is: \n{result[0].metadata}")
The result of the submitted job had 1 PUB
The expectation values measured from this PUB are:
1.02116704805492
And the associated metadata is:
{'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32}

אחזור הודעות שגיאה

אם סטטוס עומס העבודה שלך הוא ERROR, השתמש ב-job.result() כדי לאחזר את הודעת השגיאה לצורך ניפוי באגים:

job = function.run(
backend_name="bad_backend_name", pubs=pubs, options=options
)

print(job.result())

קבלת תמיכה

פנה ל-תמיכה של IBM Quantum וכלול את המידע הבא:

  • מזהה משימת פונקציית Qiskit (qiskit-ibm-catalog),‏ job.job_id
  • תיאור מפורט של הבעיה
  • כל הודעות שגיאה או קודים רלוונטיים
  • שלבים לשחזור הבעיה

השלבים הבאים