שימוש בעומס עבודה
שימוש מייצג צריכה של שירות Qiskit Runtime ונקבע לפי כמות הזמן שה-QPU נעול לביצוע עומסי עבודה.
- שימוש של סשן נמדד כזמן שחלף בע וד הסשן נשאר פעיל, מכיוון שקיבולת ה-QPU שמורה למשך כל הסשן, ללא קשר לכך אם עומסי עבודה פועלים באופן פעיל. ראה אורך סשן למידע נוסף על מעברי מצב הסשן.
- שימוש של אצווה נמדד כזמן המצטבר שה-QPU נעול לביצוע כל העבודות באצווה.
- שימוש של עבודה בודדת נמדד כזמן שה-QPU נעול לביצוע העבודה.
שים לב שעבודות שנכשלו או בוטלו נחשבות לשימוש שלך בנסיבות מסוימות - ראה את הסעיף עבודות שנכשלו ובוטלו לפרטים.
עבור משתמשי תוכנית Pay-As-You-Go Plan, ראה ניהול עלויות לפרטים על הגדרת מגבלת עלות.
שימוש עבור עבודות שנכשלו ובוטלו
כאשר עבודה נכשלת או מבוטלת, השימוש המדווח הוא כדלקמן:
-
מצב עבודה בודדת או אצווה: אם הכישלון או הביטול אירעו עקב שגיאת מערכת, השימוש המדווח הוא אפס. עבור עבודות שנכשלו עקב שגיאת משתמש או כאשר משתמש ביטל עבודה, השימוש המדווח הוא כל צריכה שהתרחשה עד לאותה נקודה.
-
מצב סשן: השימוש המדווח הוא זמ ן השעון האמיתי שבו הסשן פעיל, ללא קשר למספר העבודות שנכשלות או מבוטלות.
שאילתה על השימוש בפועל של עומס עבודה
לאחר שעומס עבודה הסתיים, ישנן מספר דרכים לצפות בשימוש בפועל שלו:
- הרץ
batch.usage()אוsession.usage()ב-qiskit-ibm-runtime0.30 ואילך. אם אתה משתמש בגרסה ישנה יותר שלqiskit-ibm-runtime(>= 0.23 ו-< 0.30), ניתן עדיין למצוא את השימוש ב-session.details()["usage_time"]וב-batch.details()["usage_time"]. - השתמש ב-
GET /sessions/{id}כדי לראות את השימוש עבור אצווה או סשן ספציפיים. - השתמש ב-
GET /jobs/{id}כדי לראות את השימוש עבור עבודה בודדת.
צפייה בשימוש של מופע
באפשרותך לצפות בשימוש של מופע בדף Instances, או, עבור בעלי ההרשאה המתאימה, בדף Analytics. שים לב שהדפים עשויים להציג מספרי שימוש שונים מכיוון שהם מחשבים את השימוש בצורה שונה.
דף ה-Instances מציג שימוש בזמן אמת עבור 28 הימים האחרונים (גלגלי), עד לשעה הנוכחית ביום הנוכחי. השימוש בדף ה-Analytics מחושב מחדש כל שעה וכולל את 28 הימים המלאים האחרונים; כלומר, הוא מציג שימוש מ-00:00 לפני 28 ימים עד היום, בתחילת השעה.
אמידת שימוש לפני שליחת עבודה
בעוד שקבלת הערכה מקומית מדויקת מסובכת בשל הפעולות הנוספות שנעשות לדיכוי ולהפחתת שגיאות, תוכל להשתמש בנוסחת הבסיס הבאה כדי לקבל קירוב של השימוש המשוער:
<per sub-job overhead> + (rep_delay + <circuit length>) * <num executions>
<per sub-job overhead>הוא תקורה של כ-2 שניות לכל תת-עבודה. זה כולל פעולות כגון טעינת המטען לאלקטרוניקת הבקרה. עבודת הפרימיטיב שלך עשויה להתחלק למספר תת-עבודות אם היא גדולה מדי עבור מנוע ההרצה לעיבוד בבת אחת.rep_delayהוא אפשרות הניתנת להתאמה אישית, וברירת המחדל ניתנת על ידיbackend.default_rep_delay, שהיא 250 מיקרושניות ברוב ה-Backends של IBM Quantum. שים לב שהורדתrep_delayמקטינה את זמן ההרצה הכולל על ה-QPU, אך על חשבון שגיאת הכנת מצב מוגברת; ראה את המדריך הרצה בקצב חזרה דינמי למידע נוסף.<circuit length>הוא אורך ההוראות הכולל. כל הוראה לוקחת כמות זמן שונה על ה-QPU, ולכן האורך הכולל משתנה מ-Circuit ל-Circuit. מדידה, לדוגמה, יכולה לקחת 56 פעמים יותר מגייטx. ניתן להשתמש ב-backend.target[<instruction>][<qubit>].durationכדי למצוא את משך הזמן המדויק לכל הוראה. אורך Circuit טיפוסי הוא ככל הנראה בין 50 ל-100 מיקרושניות. אם אתה משתמש בטכניקות דיכוי או הפחתת שגיאות עם הפרימיטיבים, ייתכן שיוכנסו הוראות נוספות ל-Circuit שלך, מה שיגדיל את אורך ה-Circuit הכולל.הערההאפשרות הניסיונית
scheduler_timingמחזירה את זמן ה-Circuit הכולל, אך זה אינו הזמן המשמש לחיוב.<num executions>הוא המספר הכולל של Circuits כפול מספר הצילומים, כאשר ה-Circuits הם אלו שנוצרו לאחר שידור אלמנטי PUB.- אם אתה משתמש בטכניקות הפחתת שגיאות עם הפרימיטיבים, ייתכן שיורצו Circuits נוספים כחלק מתהליך ההפחתה, מה שיגדיל את המספר הכולל של הרצות. בנוסף, טכניקות הפחתת שגיאות מתקדמות כגון PEA ו-PEC כרוכות בתקורה גבוהה הרבה יותר מכיוון שהן מצריכות הרצת Circuits ללמידת רעש.
- Estimator מקבץ צפי שיתופיים לפי Qubit, מה שמצמצם את מספר ההרצות.
אם אינך משתמש בטכניקות הפחתת שגיאות מתקדמות או rep_delay מותאם אישית, תוכל להשתמש ב-2+0.00035*<num executions> כנוסחה מהירה.
אמידת שימוש באופן מקומי עם Qiskit
דוגמת קוד זו מדגימה כיצד להשתמש ב-Qiskit לחישוב זמן Circuit:
# Schedule the circuit to get more accurate timing
pm = generate_preset_pass_manager(
target=backend.target,
optimization_level=0,
scheduling_method="alap"
)
scheduled_circuits = pm.run(isa_circuits)
init_duration = backend.target["reset"][(0,)].duration
rep_delay = sampler.options.execution.rep_delay or backend.default_rep_delay
circuit_duration = 0
for circuit in scheduled_circuits:
# Estimate circuit length
circuit_duration += circuit.estimate_duration(backend.target)
# Add INIT time
if sampler.options.execution.init_qubits:
circuit_duration += init_duration
# Add rep_delay
circuit_duration += rep_delay
total_time = 2 + (circuit_duration*shots)
print(f"Total estimated usage is {math.ceil(total_time)} seconds")
השלבים הבאים
- ראה בטיפים אלה: צמצם זמן ריצה של עבודה.
- הגדר את זמן ההרצה המרבי.
- למד כיצד לבצע Transpile באופן מקומי בסעיף Transpile.
- נסה את המדריך השוואת הגדרות Transpiler.