במאמר הזה מוסבר איך ליצור ולהריץ משימת Batch שמשתמשת במכונות וירטואליות (VM) עם יחידות Tensor Processing Unit (TPU). יחידות TPU הן מעגלים משולבים לאפליקציות ספציפיות (ASIC) שפותחו על ידי Google כדי להאיץ עומסי עבודה של למידת מכונה (ML) ובינה מלאכותית (AI). כשיוצרים משימת Batch, אפשר לציין סוג מכונת TPU כדי להאיץ עומסי עבודה של הסקת מסקנות, הערכה, כוונון ואימון של AI ו-ML שמבוססים על סקריפטים או על קונטיינרים.
למידע נוסף על יחידות TPU, קראו את המאמרים מידע על יחידות TPU ב- Google Cloud וסוגי מכונות TPU במאמרי העזרה של Compute Engine. לחלופין, אתם יכולים להאיץ את עיבוד הנתונים ואת עומסי העבודה של AI ו-ML באמצעות שימוש ביחידות GPU.
לפני שמתחילים
- אם לא השתמשתם ב-Batch בעבר, כדאי לקרוא את המאמר תחילת השימוש ב-Batch ולהפעיל את Batch על ידי השלמת הדרישות המוקדמות לפרויקטים ולמשתמשים.
-
כדי לקבל את ההרשאות שדרושות ליצירת משימה, צריך לבקש מהאדמין להקצות לכם את התפקידים הבאים ב-IAM:
- עריכת משימות באצווה (
roles/batch.jobsEditor) בפרויקט - משתמש בחשבון שירות (
roles/iam.serviceAccountUser) בחשבון השירות של המשימה, שהוא כברירת מחדל חשבון השירות שמוגדר כברירת מחדל ב-Compute Engine
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
- עריכת משימות באצווה (
הגבלות
כשמשימה משתמשת ביחידות TPU, כל המגבלות הבאות חלות בנוסף למגבלות של Compute Engine על יחידות TPU.
פרוסות TPU של מארח יחיד בלבד: Batch תומך רק ב-TPU VM עצמאיות, שנקראות פרוסות TPU של מארח יחיד. אין תמיכה בפרוסות TPU עם כמה מארחים, שכל אחת מהן מורכבת מכמה מכונות וירטואליות שמחוברות זו לזו.
אפשר להריץ משימה בפרוסה אחת או יותר של TPU עם מארח יחיד. לדוגמה, אם במשימה הערך של
taskCountמוגדר ל-4והערך שלtaskCountPerNodeמוגדר ל-1, מספר המכונות הווירטואליות שהמשימה פועלת בהן הוא 4 או פחות. בניגוד לפרוסות TPU עם כמה מארחים, כל פרוסת TPU עם מארח יחיד פועלת כמכונה וירטואלית עצמאית, ולא מספקת רשת של חיבורים בין שבבים (ICI) לתקשורת עם רוחב פס גבוה וזמן אחזור קצר.מידע נוסף על פרוסות TPU עם מארח יחיד ומארחים מרובים זמין במסמכי התיעוד של Compute Engine.
גרסאות TPU וסוגי מכונות נתמכים: Batch תומך רק בפרוסות TPU במארח יחיד (TPU VMs עצמאיים) בגרסאות ה-TPU ובסוגי המכונות הבאים:
- TPU7x (Ironwood):
tpu7x-standard-4t v6e (Trillium):
ct6e-standard-1t,ct6e-standard-4tו-ct6e-standard-8tv5p:
ct5p-hightpu-4tאפשרויות צריכה נתמכות: אי אפשר להשתמש ב-Batch עם מכונות וירטואליות מסוג Flex-start VM (מודל הקצאה
FLEX_START) למשימות שמשתמשות ב-TPU. חוץ ממכונות Flex-start VM, אתם יכולים לציין כל אפשרות צריכה שנתמכת בגרסת ה-TPU של המשימה, בהתאם לזמינות של אפשרויות הצריכה לפי גרסאות TPU במסמכי התיעוד של Compute Engine.חובה להגדיר מיקום באזור אחד: כשיוצרים משימה שמשתמשת ביחידות TPU, צריך להגביל את המשימה לאזור ספציפי. כדי לעשות את זה, מגדירים את המיקומים המותרים של המשימה (השדה
allowedLocations[]) לאזור שמכיל את גרסת ה-TPU או את ההזמנה, אם רלוונטי.תכונות שלא נתמכות: משימות שמשתמשות ב-TPU לא תומכות בתכונות הבאות:
- הפעלה גמישה של מכונות
(השדה
instanceFlexibilityPolicy) - מדיניות למיקום קומפקטי (השדה
collocation)
- הפעלה גמישה של מכונות
(השדה
למידע נוסף על כל סוג מכונת TPU, כמו דיסקים נתמכים, קראו את המאמר סוגי מכונות TPU במסמכי התיעוד של Compute Engine.
יצירת משימה שמשתמשת ביחידות TPU
כדי ליצור משימה שמשתמשת ב-TPU:
- תכנון ההגדרה של משימה שמשתמשת ב-TPU.
- יוצרים משימה עם ההגדרות שזיהיתם. בקטע יצירת משימה שמשתמשת ביחידות TPU מופיעות דוגמאות ליצירת משימה שמשתמשת ביחידות TPU.
תכנון ההגדרה של משימה שמשתמשת ב-TPU
לפני שיוצרים משימה שמשתמשת ב-TPU, צריך לבצע את הפעולות הבאות:
בחירת גרסת ה-TPU: בוחרים את גרסת ה-TPU שמתאימה לעומס העבודה. במאמר גרסאות TPU מומלצות לפי סוגי עומסי עבודה תוכלו למצוא רשימה של גרסאות TPU לפי סוג עומס העבודה.
חשוב לבחור אחת מגרסאות ה-TPU הנתמכות.
בחירת אפשרות לצריכת TPU: בוחרים את האפשרות שמתאימה לעומס העבודה, למשך הזמן ולעלות. חשוב לבחור באחת מאפשרויות הצריכה הנתמכות. בטבלה הבאה מפורטים תרחישי השימוש ודרישות המשימה לכל אפשרות צריכה.
אפשרויות צריכה ודרישות התפקיד שלהן מקושרים להזמנה (מקומות שמורים לעתיד במצב תזמון או מקומות שמורים לעתיד בגושי קיבולת)
תרחיש לדוגמה: מומלץ להשתמש באפשרויות צריכה שמוגבלות למקום שמור בשביל משימות שצריכות רמה גבוהה מאוד של הבטחה לזמינות של משאבי TPU לתקופה מסוימת. ב-Compute Engine, המשאבים האלה מתוארים בתור מקום שמור לעתיד במצב תזמון (למשך יום אחד עד 90 ימים) ומקום שמור לעתיד לגושי קיבולת (למשך שנה אחת או יותר).
פרטים: לפני שיוצרים משימה, צריך להשיג או לזהות הקצאה לגרסת ה-TPU שבחרתם ולמודל ההקצאה
RESERVATION_BOUND. אחרי שיוצרים הזמנה, היא צוברת את העלויות של המכונות הווירטואליות שצוינו באותו מחיר כמו הפעלת המכונות הווירטואליות, עד שמוחקים את ההזמנה. מכונות וירטואליות שצורכות מקום שמור לא צוברות עלויות נפרדות, אבל המקומות השמורים צוברים עלויות בלי קשר לצריכה.למידע נוסף, קראו את המאמר בחירת סוג של שמירת מקום במסמכי התיעוד של Compute Engine.
ב-Batch, המקומות השמורים שמוגבלים להזמנה משמשים למשימות שעומדות בכל התנאים הבאים:
- מגדירים את השדה
provisioningModelלערךRESERVATION_BOUND. - מטרגטים באופן ספציפי הזמנה תואמת. בשדה
reservation, מגדירים את השם המקוצר (אם ההזמנה נמצאת באותו פרויקט ובאותו אזור) או את נתיב המשאב המלא של ההזמנה, של בלוק ההזמנה או של בלוק המשנה של ההזמנה.
על פי דרישה
תרחיש לדוגמה: קל ומהיר להתנסות בשימוש על פי דרישה, ולכן זו אפשרות ברירת המחדל לצריכה ברוב המשימות. עם זאת, אנחנו לא ממליצים על on-demand אם אפשרות צריכה אחרת מתאימה יותר לסדרי העדיפויות שלכם, או אם אתם נתקלים שוב ושוב בבעיות שקשורות לזמינות המשאבים.
פרטים: בדרך כלל, הגישה למכונות הווירטואליות של Compute Engine היא על פי דרישה כברירת מחדל. האפשרות "על פי דרישה" מאפשרת לכם לגשת למשאבים (אם הם זמינים) כשתבקשו. המשאבים לא נמחקים עד שהמשימה מסתיימת או עד שמגיעים למגבלת זמן הריצה.
כברירת מחדל, ב-Batch נעשה שימוש במשאבים על פי דרישה ברוב המשימות. כדי לוודא שהמשימה משתמשת בקיבולת על פי דרישה, צריך לבצע את כל הפעולות הבאות:
- מגדירים את השדה
provisioningModelלערךSTANDARD. - מניעת שימוש במאגר. כדי למנוע ממשימה להשתמש באופן אוטומטי במשאבים ששוריינו, מגדירים את השדה
reservationלערךNO_RESERVATION. מידע נוסף זמין במאמר יצירה והרצה של משימה שלא יכולה להשתמש במכונות וירטואליות שמורות.
מכונות וירטואליות במודל Spot
תרחיש שימוש: מומלץ להשתמש ב-VM במודל Spot כדי להפחית את העלויות של עומסי עבודה עמידים בכשלים.
פרטים: אם בקשה ליצירת משימה שמשתמשת ב-VM במודל Spot מתמלאת, המכונות הווירטואליות מחויבות לפי התמחור של VM במודל Spot, שיכול להשתנות לעיתים קרובות ועשוי לספק את ההנחה הגדולה ביותר, עד 91% הנחה על תמחור על פי דרישה. עם זאת, יכול להיות ש-VM במודל Spot לא תמיד יהיו זמינות, וניתן יהיה להפסיק אותן בכל שלב.
מידע נוסף על VM במודל Spot והמלצות למשימות עם VM במודל Spot.
Batch משתמש ב-VM במודל Spot למשימות שעומדות בכל התנאים הבאים:
- מגדירים את השדה
provisioningModelלערךSPOT. - (אופציונלי) מניעת שימוש במקומות שמורים. אי אפשר להשתמש ב-VM במודל Spot עם מקומות שמורים. באופן ספציפי, המשימה יכולה להגדיר את השדה
reservationלערךNO_RESERVATION. מידע נוסף זמין במאמר יצירה והרצה של משימה שלא יכולה להשתמש במכונות וירטואליות שמורות.
בחירת אזור שבו יחידות ה-TPU שבחרתם זמינות: כדי להשתמש בגרסת TPU, צריך להגדיר את השדה
allowedLocations[]של המשימה לאזור שמכיל את יחידות ה-TPU שבחרתם, באופן הבא:- אם בחרתם באפשרות צריכה שמשתמשת בהזמנות, אתם צריכים להשתמש באזור שבו נמצאת ההזמנה.
- אחרת, בוחרים אזור שמכיל את גרסת ה-TPU בהתאם לזמינות של TPU.
בכל מקרה, האזור חייב להיות גם אחד מהאזורים הנתמכים של Batch.
לוודא שיש לפרויקט מכסת TPU מספיקה: אם אתם יוצרים משימה שמשתמשת ב-TPU עם מכונות וירטואליות על פי דרישה או במחיר Spot, אתם צריכים לוודא שיש לכם מכסת TPU מספיקה באזור שבו אתם רוצים להשתמש. כדי ליצור משימה שמשתמשת ביחידות TPU שצורכות מקום שמור ב-TPU, לא צריך מכסת TPU כי המכסה משמשת כשיוצרים את המקום השמור. במאמר מכסת TPU מפורטים שמות המכסות של TPU, ובמאמר הצגה וניהול של מכסות מוסבר איך רואים את המכסות.
בחירת סוג מכונת TPU: בוחרים סוג מכונת TPU לגרסת ה-TPU שנבחרה. אם בחרתם באפשרות צריכה שמשתמשת בהזמנות, אתם צריכים להשתמש בסוג המכונה של ההזמנה. רשימה של סוגי המכונות שזמינים לכל גרסת TPU מופיעה במאמר סוגי מכונות TPU.
בגלל המגבלות, אתם צריכים להשתמש בטופולוגיה של מארח יחיד לסוג מכונת ה-TPU.
יצירת משימה שמשתמשת ביחידות TPU
בקטעים הבאים מוסבר איך ליצור משימה לדוגמה שמשתמשת ביחידות TPU לכל אפשרות צריכה.
| אפשרות צריכה | הוראות לדוגמה למשימה |
|---|---|
| מקום שמור (מקום שמור לעתיד במצב תזמון או מקום שמור לעתיד לגושי קיבולת) | |
| מכונות וירטואליות על פי דרישה או מכונות וירטואליות במודל Spot |
שימוש ביחידות TPU עם מכונות וירטואליות על פי דרישה או במודל Spot |
שימוש ביחידות TPU עם מכונות וירטואליות על פי דרישה או במודל Spot
אתם יכולים ליצור משימה שמשתמשת ביחידות TPU עם מכונות וירטואליות על פי דרישה או VM במודל Spot, באמצעות ה-CLI של gcloud או Batch API.
gcloud
יוצרים קובץ תצורה בפורמט JSON שמציין סוג מכונת TPU נתמך עם מארח יחיד, מגדירים את מודל ההקצאה ל-
STANDARDאו ל-SPOTומריצים במיקום שבו סוג מכונת ה-TPU זמין.לדוגמה, כדי ליצור משימת סקריפט בסיסית, יוצרים קובץ JSON עם התוכן הבא:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from TPU task ${BATCH_TASK_INDEX}." } } ] }, "taskCount": 3, "parallelism": 1 } ], "allocationPolicy": { "instances": [ { "policy": { "provisioningModel": "PROVISIONING_MODEL", "machineType": "MACHINE_TYPE" } } ], "location": { "allowedLocations": [ "ALLOWED_LOCATIONS" ] } }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }מחליפים את מה שכתוב בשדות הבאים:
PROVISIONING_MODEL: מודל ההקצאה של אפשרות הצריכה:STANDARDלמכונות וירטואליות על פי דרישה אוSPOTלמכונות וירטואליות במודל Spot.
MACHINE_TYPE: סוג מכונת TPU נתמך עם מארח יחיד, לדוגמהct5p-hightpu-4t.
ALLOWED_LOCATIONS: המיקומים המותרים למשימה. במשימה שמשתמשת ב-TPU, צריך להגדיר את השדהallowedLocations[]לאזור שמציע את סוג המכונה של TPU – לדוגמה,zones/us-central1-aמציע את סוג המכונה של TPUct5p-hightpu-4t.
כדי ליצור ולהריץ את המשימה, משתמשים בפקודה
gcloud batch jobs submit:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILEמחליפים את מה שכתוב בשדות הבאים:
JOB_NAME: שם המשימה.
LOCATION: המיקום של המשימה.
JSON_CONFIGURATION_FILE: הנתיב לקובץ JSON עם פרטי ההגדרות של המשימה.
API
שולחים בקשת POST ל-method jobs.create שמציינת סוג מכונת TPU עם מארח יחיד, מגדירים את מודל ההקצאה ל-STANDARD או ל-SPOT ומריצים במיקום שבו סוג מכונת ה-TPU זמין.
לדוגמה, כדי ליצור משימת סקריפט בסיסית, שולחים את הבקשה הבאה:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world from TPU task ${BATCH_TASK_INDEX}."
}
}
]
},
"taskCount": 3,
"parallelism": 1
}
],
"allocationPolicy": {
"instances": [
{
"policy": {
"provisioningModel": "PROVISIONING_MODEL",
"machineType": "MACHINE_TYPE"
}
}
],
"location": {
"allowedLocations": [
"ALLOWED_LOCATIONS"
]
}
},
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט שלכם.
LOCATION: המיקום של המשימה.
JOB_NAME: שם המשימה.
PROVISIONING_MODEL: מודל ההקצאה של אפשרות הצריכה:STANDARDלמכונות וירטואליות על פי דרישה אוSPOTלמכונות וירטואליות במודל Spot.
MACHINE_TYPE: סוג מכונת TPU נתמך עם מארח יחיד, לדוגמהct5p-hightpu-4t.
ALLOWED_LOCATIONS: המיקומים המותרים למשימה. במשימה שמשתמשת ב-TPU, צריך להגדיר את השדהallowedLocations[]לאזור שמציע את סוג המכונה של TPU – לדוגמה,zones/us-central1-aמציע את סוג המכונה של TPUct5p-hightpu-4t.
שימוש במעבדי TPU עם אפשרויות צריכה שקשורות להזמנות
אתם יכולים ליצור משימה שמשתמשת ב-TPU עם אפשרות צריכה למודל הקצאת המשאבים שמוגבל למקומות שמורים (RESERVATION_BOUND) – מקומות שמורים עתידיים לגושי קיבולת או מקומות שמורים עתידיים במצב תזמון – באמצעות ה-CLI של gcloud או Batch API.
gcloud
יוצרים קובץ תצורה בפורמט JSON שמציין הקצאת מקום למכונה מסוג TPU עם מארח יחיד, מגדיר את מודל ההקצאה ל-
RESERVATION_BOUNDופועל באזור של הקצאת המקום.לדוגמה, כדי ליצור משימת סקריפט בסיסית, יוצרים קובץ JSON עם התוכן הבא:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from TPU task ${BATCH_TASK_INDEX}." } } ] }, "taskCount": 3, "parallelism": 1 } ], "allocationPolicy": { "instances": [ { "policy": { "provisioningModel": "RESERVATION_BOUND", "reservation": "RESERVATION", "machineType": "MACHINE_TYPE" } } ], "location": { "allowedLocations": [ "ALLOWED_LOCATIONS" ] } }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }מחליפים את מה שכתוב בשדות הבאים:
RESERVATION: מחליפים באחד מהנתיבים הבאים להזמנה:אם אתם רוצים להשתמש במקום שמור לעתיד במצב תזמון או בכל חלק של המקום השמור למקום שמור לעתיד לגושי קיבולת, ציינו את המקום השמור:
projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAMEאם אתם רוצים להשתמש בבלוק ספציפי ממקום שמור לעתיד של גושי קיבולת, ציינו את הבלוק של המקום השמור:
projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME/reservationBlocks/BLOCK_NAMEאם אתם רוצים להשתמש בבלוק משנה ספציפי ממקום שמור לעתיד של בלוקים של קיבולת, ציינו את בלוק המשנה של המקום השמור:
projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME/reservationSubBlocks/SUB_BLOCK_NAME
MACHINE_TYPE: סוג מכונת ה-TPU של ההזמנה, לדוגמהct5p-hightpu-4t.
ALLOWED_LOCATIONS: המיקומים המותרים למשימה. במשימה שמשתמשת ב-TPU שמורים, צריך להגדיר את השדהallowedLocations[]לאזור של ההזמנה. לדוגמה,zones/us-central1-aמציע את סוג המכונהct5p-hightpu-4tשל TPU.
כדי ליצור ולהריץ את המשימה, משתמשים בפקודה
gcloud batch jobs submit:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILEמחליפים את מה שכתוב בשדות הבאים:
JOB_NAME: שם המשימה.
LOCATION: המיקום של המשימה.
JSON_CONFIGURATION_FILE: הנתיב לקובץ JSON עם פרטי ההגדרות של המשימה.
API
שולחים בקשת POST ל-jobs.create method שמציינת הקצאה לסוג מכונת TPU עם מארח יחיד, מגדירה את מודל ההקצאה ל-RESERVATION_BOUND ופועלת באזור של ההקצאה.
לדוגמה, כדי ליצור משימת סקריפט בסיסית, שולחים את הבקשה הבאה:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world from TPU task ${BATCH_TASK_INDEX}."
}
}
]
},
"taskCount": 3,
"parallelism": 1
}
],
"allocationPolicy": {
"instances": [
{
"policy": {
"provisioningModel": "RESERVATION_BOUND",
"reservation": "RESERVATION",
"machineType": "MACHINE_TYPE"
}
}
],
"location": {
"allowedLocations": [
"ALLOWED_LOCATIONS"
]
}
},
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט שלכם.
LOCATION: המיקום של המשימה.
JOB_NAME: שם המשימה.
RESERVATION: מחליפים באחד מהנתיבים הבאים להזמנה:אם אתם רוצים להשתמש במקום שמור לעתיד במצב תזמון או בכל חלק של המקום השמור למקום שמור לעתיד לגושי קיבולת, ציינו את המקום השמור:
projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAMEאם אתם רוצים להשתמש בבלוק ספציפי ממקום שמור לעתיד של גושי קיבולת, ציינו את הבלוק של המקום השמור:
projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME/reservationBlocks/BLOCK_NAMEאם אתם רוצים להשתמש בבלוק משנה ספציפי ממקום שמור לעתיד של בלוקים של קיבולת, ציינו את בלוק המשנה של המקום השמור:
projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME/reservationSubBlocks/SUB_BLOCK_NAME
MACHINE_TYPE: סוג מכונת ה-TPU של ההזמנה, לדוגמהct5p-hightpu-4t.
ALLOWED_LOCATIONS: המיקומים המותרים למשימה. במשימה שמשתמשת ב-TPU שמורים, צריך להגדיר את השדהallowedLocations[]לאזור של ההזמנה. לדוגמה,zones/us-central1-aמציע את סוג המכונהct5p-hightpu-4tשל TPU.
איך מוודאים שמשאבים יהיו זמינים באמצעות שמירת מקום למכונות וירטואליות
המאמרים הבאים
- אם נתקלתם בבעיות ביצירה או בהפעלה של משימה, עיינו בקטע פתרון בעיות.
- הצגת משימות.
- מידע נוסף על אפשרויות ליצירת משימות