הוראות מכוילות במיוחד
כברירת מחדל, השערים הקוונטיים ופעולות הקריאה במחשבי הקוונטים של IBM® מכוילים לביצועים מיטביים במגוון רחב של שימושים. עם זאת, יש עומסי עבודה שמרוויחים מהוראות שהפרמטרים שלהן מכוונים אחרת. לדוגמה, MidCircuitMeasure (measure_2) היא פעולת קריאה שמותאמת למדידות באמצע המעגל, ושערי cz איטיים יותר יכולים לשפר את התוצאות של חלק מתהליכי העבודה לצמצום שגיאות.
הוראות מכוילות במיוחד מגיעות בשתי צורות, וניגשים אליהן בדרכים שונות:
-
הוראות עם חתימות שונות מכוילות יחד עם ההוראות הסטנדרטיות בכיול ברירת המחדל, ולכן מוסיפים אותן למעגלים שלך כמו כל הוראה אחרת. בדרך כלל מזהים אותן לפי סיומת, כמו
measure_2. -
כיולים חלופיים מחליפים חלקים מכיול ברירת המחדל בפרמטרים שכוונו אחרת. בוחרים כיול כזה על ידי העברת
calibration_idבעת אחזור ה-Backend.
כדי ללמוד איך מחשבי הקוונטים של IBM מכוילים, ראה ניטור, כיול ובנצ'מארק.
הוראות עם חתימות שונות
הוראות אלה מכוילות יחד עם סט ההוראות הסטנדרטי, ולכן אין צורך לעשות שום דבר מיוחד כדי לאחזר Backend שתומך בהן. כדי להשתמש באחת מהן, הוסף את ההוראה המתאימה מ-qiskit-ibm-runtime למעגל שלך.
| הוראה | תיאור | שימוש אופייני | שימוש ב-Qiskit | משפחת מעבדים |
|---|---|---|---|---|
measure_2 | פולס מדידה קצר יותר | מדידות באמצע המעגל | MidCircuitMeasure (גרסה v0.43.0 ואילך) | Heron, Nighthawk r2 |
reset_2 | פולס איפוס מותנה קצר יותר שמשתמש ב-measure_2 | איפוס Qubit באמצע המעגל | MidCircuitReset (גרסה v0.49.0 ואילך) | Heron |
measure_reset | מדידה כמו measure שגם מאפסת את ה-Qubit* | מדידה ואיפוס של Qubit | MeasureReset (גרסה v0.50.0 ואילך) | Heron, Nighthawk r2 |
measure_reset_2 | מדידה קצרה יותר כמו measure_2 שגם מאפסת את ה-Qubit* | מדידה ואיפוס של Qubit באמצע המעגל | אתחל את MeasureReset עם name="measure_reset_2" (גרסה v0.50.0 ואילך) | Heron, Nighthawk r2 |
xslow | שער היפוך סיביות (X) עם משך ממושך | Postselection וצמצום שגיאות. זהו ערך ברירת המחדל של האפשרות x_pulse_type ב-מעברי postselection | הכול |
. | XSlowGate (גרסה v0.50.0 ואילך) | הכול |
* במעבדי Heron, האיפוס מותנה בתוצאת המדידה. במעבדי Nighthawk r2, האיפוס אינו מותנה.
מכיוון שההוראות האלה לא נתמכות בכל Backend, בדוק מהן ההוראות הנתמכות ב-Backend לפני שאתה משתמש בהן:
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.backend("<backend_name>")
print(backend.supported_instructions)
כדי למצוא את כל ה-Backends שתומכים בהוראה מסוימת, השתמש ב:
service = QiskitRuntimeService()
backends = service.backends(filters=lambda b: "<instruction>" in b.supported_instructions)
השתמש ב-instruction_signatures כדי לראות את החתימות של ההוראות המכוילות במיוחד האלה:
print(backend.configuration().instruction_signatures)
כיולים חלופיים
כיולים חלופיים מחליפים חלקים מכיול ברירת המחדל בפרמטרים שכוונו אחרת. לכל כיול חלופי יש מזהה כיול, והזמינות שלו תלויה ב-QPU.
כדי להשתמש בכיול חלופי, העבר את ה-calibration_id שלו בעת אחזור ה-Backend. ה-target של ה-Backend, ולכן גם ה-Transpiler, משתמש בתכונות ההוראות מאותו כיול, ועבודות primitive שאתה מריץ על ה-Backend מתבצעות איתו.
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.backend("<backend_name>", calibration_id="<calibration_id>")
print(backend.calibration_id)
כיולים חלופיים אינם זמינים בכל ה-QPUs.
כיולי שערים איטיים
כיולי שערים איטיים מכוונים את שער ה-cz להיות איטי יותר מאשר בכיול ברירת המחדל. שערי cz איטיים יותר עשויים לשפר את הביצועים בתהליכי עבודה בקנה מידה גדול להערכת observables עם צמצום שגיאות, אבל הם גם מגדילים את משך הזמן הכולל של המעגל שלכם, מה שגורם למעט דקוהרנטיות נוספת.
במעבדי Heron, כיולי שערים איטיים זמינים גם עם שני מצבים של בקרת הטיית מערכת דו-רמתית (TLS):
-
הטיית DC TLS מותאמת לביצועים הטובים ביותר ברגע נתון. כיול ברירת המחדל משתמש בהטיית DC TLS.
-
הטיית AC TLS מאפנת את הטיית ה-TLS כדי לייצב את שגיאות ההתקן לאורך זמן, וכך שומרת על מודל הרעש של ההתקן יציב במהלך תהליכי עבודה ארוכים. לפרטים, ראה "Noise stabilization" ב-Observable Estimation in the Absence of Classical Verification.
מעבדי Nighthawk אינם משתמשים בהטיית TLS, ולכן יש להם כיול שער איטי יחיד.
| מזהה כיול | משפחת מעבדים | הטיית TLS | מומלץ עבור |
|---|---|---|---|
| None (כיול ברירת מחדל) | הכול | DC (Heron) | שימוש כללי. מומלץ במיוחד לעומסי עבודה שאפשר לזקק בצורה קלאסית את מחרוזות הביטים שלהם, כמו מעגלים מרוכזים (peaked) ותהליכי עבודה של SQD או SKQD, ולעומסי עבודה עם זיהוי שגיאות. |
slow_gates_dc | Heron | DC | תהליכי עבודה בקנה מידה גדול להערכת observables, במיוחד כאלה שמשתמשים בצמצום שגיאות היוריסטי כמו אקסטרפולציה לרעש אפס (ZNE). |
slow_gates_ac | Heron | AC | תהליכי עבודה שדורשים שיעורי שגיאה יציבים לאורך Sessions ארוכים. מומלץ בחום לתהליכי עבודה הכוללים למידת רעש, כמו הגברת שגיאות הסתברותית (PEA) וביטול שגיאות הסתברותי (PEC). |
slow_gates | Nighthawk | לא רלוונטי | תהליכי עבודה להערכת observables שמשתמשים בצמצום שגיאות, כמו ZNE, PEA ו-PEC. |
לדוגמה:
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
# On a Heron QPU
backend = service.backend("ibm_kingston", calibration_id="slow_gates_ac")
# backend = service.backend("ibm_kingston", calibration_id="slow_gates_dc")
# On a Nighthawk QPU
backend = service.backend("ibm_phoenix", calibration_id="slow_gates")
כשאתה משתמש ב-slow_gates_ac, שלח את כל העבודות בתהליך העבודה ל-Session אחד, כדי שירוצו בזמן שהרעש של ההתקן נשאר יציב.
בדיקת משכי שערים
מכיוון שכיולי שערים איטיים מגדילים את משכי שער ה-cz, השווה את המשכים לכיול ברירת המחדל כדי להבין את ההשפעה על המעגל שלך. השתמש ב-target של ה-Backend כדי למצוא את משך שער ה-cz, בשניות, על זוג Qubits מסוים:
default_backend = service.backend("<backend_name>")
slow_backend = service.backend(
"<backend_name>", calibration_id="slow_gates_ac"
) # Or slow_gates_dc, or slow_gates on Nighthawk
qubits = (0, 1) # Replace with a connected qubit pair on the backend
print(default_backend.target["cz"][qubits].duration)
print(slow_backend.target["cz"][qubits].duration)
מכיוון שה-target משקף את הכיול שנבחר, בצע Transpile למעגלים שלך מול ה-Backend שמשתמש באותו calibration_id שבו אתה מתכנן להריץ.
השלבים הבאים
- למד איך להריץ מעגלים דינמיים עם מדידות באמצע המעגל.
- השתמש ב-postselection כדי לסנן תוצאות שהושפעו מרעש מתואם.
- קרא על האופן שבו מחשבי הקוונטים של IBM מנוטרים, מכוילים ונבדקים בבנצ'מארק.