השימוש של עומסי עבודה
שימוש מייצג צריכה של IBM Quantum Compute Service ונקבע לפי כמות הזמן שה-QPU נעול לביצוע עומסי עבודה.
-
שימוש של סשן נמדד כזמן שחלף בעוד הסשן נשאר פעיל, מכיוון שקיבולת ה-QPU שמורה למשך כל הסשן, ללא קשר לכך אם עומסי עבודה פועלים באופן פעיל. ראה אורך סשן למידע נוסף על מעברי מצב הסשן.
-
שימוש של אצווה נמדד כזמן המצטבר שה-QPU נעול לביצוע כל העבודות באצווה.
-
שימוש של עבודה בודדת נמדד כזמן שה-QPU נעול לביצוע העבודה.
שים לב שעבודות שנכשלו או בוטלו נחשבות לשימוש שלך בנסיבות מסוימות - ראה את הסעיף עבודות שנכשלו ובוטלו לפרטים.
עבור משתמשי תוכנית Pay-As-You-Go Plan, ראה ניהול עלויות לפרטים על הגדרת מגבלת עלות.
שימוש עבור עבודות שנכשלו ובוטלו
כאשר עבודה נכשלת או מבוטלת, השימוש המדווח הוא כדלקמן:
-
Job mode או batch mode: אם הכישלון או הביטול אירעו עקב שגיאת מערכת, השימוש המדווח הוא אפס. עבור עבודות שנכשלו עקב שגיאת משתמש או כאשר משתמש ביטל עבודה, השימוש המדווח הוא כל צריכה שהתרחשה עד לאותה נקודה, כולל התקורה שנגרמה להכנת ה-QPU להרצת העבודה.
-
Session mode: השימוש המדווח הוא זמן השעון האמיתי שבו הסשן פעיל, ללא קשר למספר העבודות שנכשלות או מבוטלות.
שאילתה על השימוש בפועל של עומס עבודה
לאחר שעומס עבודה הסתיים, ישנן מספר דרכים לצפות בשימוש בפועל שלו:
-
ב-
qiskit-ibm-runtimeגרסה 0.30 ואילך, הרץjob.usage()עבור עבודה בודדת, אוbatch.usage()אוsession.usage()כשמשתמשים ב-batch mode או ב-session mode. אם אתה משתמש בגרסה ישנה יותר שלqiskit-ibm-runtime(>= 0.23 ו-< 0.30), ניתן עדיין למצוא את השימוש ב-session.details()["usage_time"]וב-batch.details()["usage_time"]. -
השתמש ב-
GET /sessions/{id}כדי לראות את השימוש עבור אצווה או session ספציפיים (נקודת הקצה זהה עבור שני מצבי ההרצה). -
השתמש ב-
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, ולכן האורך הכולל משתנה ממעגל למעגל. מדידה, לדוגמה, עשויה להימשך פי 56 יותר זמן משערx. ניתן להשתמש ב-backend.target[<instruction>][<qubit>].durationכדי למצוא את משך הזמן המדויק לכל הוראה. אורך מעגל טיפוסי הוא ככל הנראה בין 50 ל-100 מיקרושניות. אם אתה משתמש בטכניקות דיכוי או הפחתת שגיאות עם הפרימיטיבים, ייתכן שיוכנסו הוראות נוספות למעגל שלך, מה שיגדיל את אורך המעגל הכולל.הערההאפשרות הניסיונית
scheduler_timingמחזירה את זמן המעגל הכולל, אך זה אינו הזמן המשמש לחיוב. -
<num executions>הוא המספר הכולל של מעגלים כפול מספר ה-shots, כאשר המעגלים הם אלו שנוצרו לאחר הרחבת (broadcasting) אלמנטי ה-PUB.- אם אתה משתמש בטכניקות הפחתת שגיאות עם הפרימיטיבים, ייתכן שיורצו מעגלים נוספים כחלק מתהליך ההפחתה, מה שיגדיל את המספר הכולל של הרצות. בנוסף, טכניקות הפחתת שגיאות מתקדמות כגון PEA ו-PEC כרוכות בתקורה גבוהה הרבה יותר מכיוון שהן מצריכות הרצת מעגלים ללמידת רעש.
- Estimator מקבץ יחד אופרטורים נמדדים (observables) שמתחלפים ברמת הקיוביט, וכך מצמצם את מספר ההרצות.
אם אינך משתמש בטכניקות הפחתת שגיאות מתקדמות או 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.