מגבלות עבודה
כשאתה שולח עבודה ל-IBM® QPU, היא נשלחת תחילה לשירות אימות העבודות. שירות זה מנסה להבטיח שהמשרה תוכל לרוץ על ה-QPU, כדי שלא תצטרך להמתין שתעבור את התור ואז תי כשל. הבדיקות כוללות אכיפת המגבלות המתוארות להלן. אם מגבלות אלו יחרגו, עומס העבודה לא יוכל להיות מטופל על-ידי ערימת התוכנה הקוונטית ובדרך-כלל ייכשל.
- אפשרויות primitive מסוימות מגדילות את גודל ה-Circuit. המגבלות המתוארות נבדקות לאחר העלייה הצפויה בגודל ה-Circuit. בפרט, האפשרויות הבאות מגדילות את גודל ה-Circuit:
- Dynamical decoupling ו-gate-folding ZNE מוסיפים Gates נוספים שנכללים בהוראות עבור מגבלת המספר המרבי של הוראות ברמה נמוכה לכל Qubit.
- Gate-folding ZNE מוסיף שערים דו-Qubit נוספים הרלוונטיים למגבלת המספר המרבי של שערים דו-Qubit לעבודה. מספר השערים הדו-Qubit מוכפל בסכום גורמי הרעש המבוקשים ב-gate-folding ZNE.
- המגבלות שמדווחות על-ידי שדות
backend.configuration()בשםmax_shotsו-max_experimentsאינן עוד רלוונטיות או נאכפות. שדות אלו יוסרו בעתיד הקרוב. - מגבלות אלו הן לעבודה, לא ל-Primitive Unified Bloc (PUB).
מספר הרצות מרבי
לכל היותר, 10 מיליון הרצות מותרות לעבודות Sampler (ניתן לפצל עבודות Estimator לתת-עבודות קטנות יותר, לכן מגבלה זו לא חלה עליהן). מספר ההרצות הוא מספר ה-Circuits כפול מספר ה-shots, כאשר ה-Circuits הם אלה שנוצרים לאחר שידור רכיבי PUB.
לדוגמה, אם יש לך PUB עם Circuit אחד ופרמטרים עם צורה (4, 1), זה יניב 4 Circuits. אם ביקשת 2,000 shots, אז מספר ההרצות הכולל הוא .
שים לב שאם אתה מפעיל Pauli-twirling במשרת Sampler שלך, מספר ה-shots הכולל מבוסס על הערכים num_randomizations ו-shots_per_randomization. ראה TwirlingOptions לפרטים נוספים.
המספר המרבי של הוראות ברמה נמוכה לכל Qubit
השירות מאפשר עד 26.8 מיליון הוראות מערכת בקרה לכל Qubit. זה מבטיח שה-Circuits של המשתמש מתאימים לזיכרון ההוראות של מערכת הבקרה. הדוגמה להלן מראה כיצד לעשות Transpile ל-Circuit ולספור כמה הוראות מכל סוג יש.
הטבלה הבאה מתארת כיצד המערכת מתרגמת הוראות Circuit של ארכיטקטורת מערכת הוראות (ISA) להוראות מערכת בקרה בעת חישוב מגבלה זו.
| הוראה | ספירה |
|---|---|
rz | 1 |
delay | 1 |
sx | 2 |
x | 2 |
cx | 5 |
cz | 5 |
ecr | 5 |
measure | 10 |
reset | 17 |
init | 50 |
טבלה זו לוכדת את ההיוריסטיקה המשמשת לאימות ואינה משקפת את המספר המדויק של ההוראות המשמשות ליישום פעולה.
דוגמה
הגדר Circuits, בצע עליהם Transpile וקבל ספירה של כמה Gates יורצו.
from qiskit import QuantumCircuit
from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService
num_qubits = 50
ghz = QuantumCircuit(num_qubits)
ghz.h(range(num_qubits))
ghz.cx(0, range(1, num_qubits))
op_counts = ghz.count_ops()
# Choose the least busy backend
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
pm = generate_preset_pass_manager(optimization_level=3, backend=backend)
transpiled_ghz = pm.run(ghz)
op_counts = transpiled_ghz.count_ops()
print(f"Post-Transpilation gates: {op_counts}")
לפרטים מלאים, ראה Transpile כנגד Backends מותאמים אישית.
המספר המרבי של שערים חד-Qubit ודו-Qubit לכל Circuit
המספר המרבי של שערים חד-Qubit הוא כדלקמן:
- 30 מיליון שערי RZ
- 20 מיליון שערי SX
המספר המרבי של שערים דו-Qubit לכל Circuit הוא חמישה מיליון. זה מבטיח שניתן יהיה לטפל בעבודה בתוך מגבלות הזיכרון של ערימת התוכנה ברמה הנמוכה.