בחירת compute profile
managed workflows רצים על compute profiles. compute profile הוא שילוב קבוע של vCPUs, זיכרון ו-GPUs, בדומה למשאבים שמבקשים ממתזמן HPC. כשמעלים workflow, ממפים את הגדלים שלו, כמו S ו-M, ל-profiles, וכל הרצה בוחרת אחד מהגדלים האלה. אז ה-job רץ על node משלו עם ה-profile הזה, ושומר עליו עד שה-job מסתיים.
| Profile | vCPUs | זיכרון (GB) | GPUs |
|---|---|---|---|
8x32 | 8 | 32 | אין |
16x128 | 16 | 128 | אין |
48x768 | 48 | 768 | אין |
128x1500 | 128 | 1500 | אין |
24x120x1l40s | 24 | 120 | 1 L40S |
20x320x2a100 | 20 | 320 | 2 A100 |
80x1200x8a100 | 80 | 1200 | 8 A100 |
160x1792x8h100 | 160 | 1792 | 8 H100 |
מזהה profile הוא מהצורה {cpu}x{memory}, כשהזיכרון ב-GB, או {cpu}x{memory}x{count}{gpu} ל-profile עם GPUs. לדוגמה, ל-24x120x1l40s יש 24 vCPUs, 120 GB זיכרון ו-GPU אחד מסוג NVIDIA L40S.
בדיקת profiles זמינים
כדי לראות אילו profiles זמינים, קראו ל-compute_profiles():
run_workflow_remotely.ipynb
from qiskit_ibm_catalog import ManagedWorkflowClient
client = ManagedWorkflowClient()
print(client.compute_profiles())
8x32 (8 vCPU / 32 GB)
16x128 (16 vCPU / 128 GB)
48x768 (48 vCPU / 768 GB)
128x1500 (128 vCPU / 1500 GB)
24x120x1l40s (24 vCPU / 120 GB / 1l40s)
20x320x2a100 (20 vCPU / 320 GB / 2a100)
80x1200x8a100 (80 vCPU / 1200 GB / 8a100)
160x1792x8h100 (160 vCPU / 1792 GB / 8h100)
חיפוש profile לפי המשאבים שלו
במקום להקליד מזהה profile, אפשר לתאר את המשאבים שה-workflow שלכם צריך באמצעות compute_profile(), ולהשתמש בתוצאה כערך ב-sizes_map. העבירו את cpu ואת memory ב-GB, והעבירו gpu ל-profile עם GPU:
run_workflow_remotely.ipynb
profile = client.compute_profile(cpu=24, memory=120, gpu="1l40s")
print(profile) # 24x120x1l40s
sizes_map = {"S": "8x32", "L": profile}
sizes_map מקבל מזהי profile ואת ה-profiles ש-compute_profile() מחזירה, ואפשר לשלב את שניהם במפה אחת. כדי לבדוק מזהה profile לפני ההעלאה, העבירו אותו ל-compute_profile(), למשל client.compute_profile("16x128"). אם אף profile לא מתאים, השגיאה מציגה את ה-profiles הזמינים.
compute_profiles() מחזירה רשימה, ולכן אפשר גם לסנן אותה בעצמכם. לדוגמה, הקוד הבא מוצא את ה-profiles עם GPU:
run_workflow_remotely.ipynb
gpu_profiles = [p for p in client.compute_profiles() if p.gpu]
הגדרת compute profile ברירת מחדל ל-workflow שלכם
רוב ה-workflows מתחילים עם גודל אחד. מפו אותו ל-profile באמצעות sizes_map, והפכו אותו לברירת המחדל באמצעות default_size, כשאתם מעלים את ה-workflow:
run_workflow_remotely.ipynb
from qiskit_ibm_catalog import ManagedWorkflow, ManagedWorkflowClient
client = ManagedWorkflowClient()
my_workflow = client.upload(
ManagedWorkflow(
title="my-workflow",
entrypoint="my_workflow.py",
working_dir="./source_files/",
sizes_map={"M": "16x128"},
default_size="M",
)
)
כל הרצה של ה-workflow משתמשת ב-profile הזה, ולכן אין צורך להעביר גודל כשמריצים אותו:
run_workflow_remotely.ipynb
job = my_workflow.run(circuits=circuits) # Runs on 16x128
שיטה מומלצת: התאימו את הגדלים לגדלי הבעיה
workflow פותר בעיות ספציפיות, והוא עשוי לדרוש compute profiles שונים ככל שהבעיות גדלות במסה ובמורכבות. עם sizes_map לכל workflow, אפשר לעשות את הדברים הבאים:
-
לתת לבעיות גדולות מספיק משאבי חישוב כדי לרוץ עד הסוף.
-
למנוע מבעיות קטנות להשתמש ב-node גדול יותר ממה שהן צריכות.
אפשר לבסס את הגדלים על הגורמים שקובעים את השימוש בזיכרון וב-CPU של ה-workflow שלכם, כמו גודל ה-subspace, מספר ה-batches או מספר ה-qubits.
הגדרת הגדלים
אפשר למפות עד ארבעה גדלים, לבעיות קטנות (S), בינוניות (M), גדולות (L) וגדולות מאוד (XL). לדוגמה, הקוד הבא מגדיר workflow עם שלושה גדלים:
run_workflow_remotely.ipynb
sizes_map = {"S": "8x32", "M": "16x128", "L": "128x1500"}
my_workflow = client.upload(
ManagedWorkflow(
title="my-workflow",
entrypoint="my_workflow.py",
working_dir="./source_files/",
sizes_map=sizes_map,
default_size="M",
)
)
כללי גדלים
תוויות הגודל חייבות להיות S, M, L או XL, ולכן workflow יכול להגדיר עד ארבעה גדלים. managed workflow מתאים תוויות באותיות גדולות או קטנות, ושומר אותן באותיות גדולות. שני גדלים יכולים להצביע על אותו profile.
workflow דוחה את ההעלאה הראשונה במקרים הבאים:
-
תווית אינה
S,M,LאוXL. -
הגדרתם
sizes_mapבליdefault_size, אוdefault_sizeבליsizes_map. -
default_sizeאינו אחת מהתוויות ב-sizes_map. -
ערך ב-
sizes_mapאינו compute profile זמין.
שינוי גדלים בהעלאה מחדש
כשמעלים את ה-workflow שוב עם אותו title, ה-managed workflow מטפל בגדלים כך:
-
אם הגדרתם
sizes_map, הגדלים החדשים מחליפים את כל הגדלים השמורים. -
אם השמטתם את
sizes_map, ה-workflow שומר את הגדלים השמורים ואת ברירת המחדל. -
כדי לשנות רק את ברירת המחדל, הגדירו
default_sizeבליsizes_map. הערך שלdefault_sizeחייב להיות אחד מהגדלים השמורים.
הגדירו default_size בכל פעם שאתם מגדירים sizes_map. העלאה מחדש לא דורשת default_size. אם הגדלים החדשים לא כוללים את ברירת המחדל הישנה, ל-workflow אין ברירת מחדל, וכל הרצה בלי function_size נכשלת.
בחירת גודל לכל הרצה
העבירו function_size ל-run() כדי לבחור אחד מהגדלים של ה-workflow ל-job הזה. אם משמיטים אותו, ה-job משתמש בגודל ברירת המחדל של ה-workflow:
run_workflow_remotely.ipynb
print(my_workflow.sizes()) # {'S': '8x32', 'M': '16x128', 'L': '128x1500'}
print(my_workflow.get_default_size()) # 'M'
job = my_workflow.run(function_size="L", circuits=circuits) # Runs on 128x1500
job = my_workflow.run(circuits=circuits) # Runs on the default size, M
sizes() ו-get_default_size() מחזירות את הגדלים ששמורים מהרגע שטענתם את ה-workflow. כדי לראות גדלים שהשתנו אחרי שטענתם את ה-workflow, טענו אותו שוב.
כדי לקרוא את הגודל ואת ה-compute profile של ה-job, קראו ל-get_function_size() ול-get_compute_profile() בקוד ה-workflow שלכם:
source_files/my_workflow.py
from qiskit_serverless import get_compute_profile, get_function_size
print(get_function_size()) # 'L'
print(get_compute_profile()) # '128x1500'
פתרון בעיות בגדלים
| בעיה | סיבה |
|---|---|
ההעלאה נכשלת עם Invalid size '...'. Valid sizes are: S, M, L, XL. | תווית ב-sizes_map אינה אחת מארבע התוויות הנתמכות. |
ההעלאה נכשלת עם Unknown compute profile '...' for size '...'. | ערך ב-sizes_map אינו profile זמין. בדקו את המזהה באמצעות compute_profiles(), או השתמשו ב-compute_profile() כדי לחפש אותו. |
compute_profile() נכשלת עם No compute profile matches ... | אין profile עם בדיוק המשאבים האלה. ל-profile עם GPU, העבירו גם gpu. בחרו profile מהרשימה בשגיאה. |
ההעלאה נכשלת עם 'default_size' is required when 'sizes' is provided. | ההעלאה הראשונה מגדירה sizes_map בלי default_size. |
run() נכשלת עם Unknown function size '...' for this function. Available sizes: ... | ה-workflow לא מגדיר את הגודל שהעברתם ל-function_size. |
run() נכשלת עם This function has no size. | העלאה מחדש החליפה את הגדלים והסירה את ברירת המחדל. העלו שוב עם default_size, או העבירו function_size. |