במאמר הזה מוסבר איך להשתמש בהזמנות של Compute Engine כדי להבטיח שלמשימות האימון ללא שרת (serverless) יהיו משאבי המכונות הווירטואליות (VM) הנדרשים להפעלה.
הזמנות הן תכונה של Compute Engine. אתם יכולים לשמור מקום כדי לוודא שמתי שתצטרכו יהיו לכם משאבים בשביל ליצור מכונות וירטואליות עם אותה חומרה (זיכרון ו-vCPU) ומשאבים אופציונליים (מעבדי CPU, GPU, TPU ודיסקים מקומיים של SSD).
כשיוצרים מקום שמור, המערכת של Compute Engine בודקת אם הקיבולת שביקשתם זמינה באזור שציינתם. אם כן, המשאבים נשמרים ב-Compute Engine, הבקשה נוצרת וקורים הדברים הבאים:
- אתם יכולים להשתמש במשאבים ששוריינו באופן מיידי, והם יישארו זמינים עד שתמחקו את ההזמנה.
- החיוב על המשאבים השמורים הוא לפי אותו תעריף על פי דרישה כמו של מכונות וירטואליות פועלות, כולל הנחות רלוונטיות, עד למחיקת ההזמנה. מכונה וירטואלית שמשתמשת במקום שמור לא צוברת חיובים נפרדים. החיוב הוא רק על המשאבים שמחוץ להזמנה, כמו דיסקים או כתובות IP. למידע נוסף, קראו את המאמר תמחור של הזמנות.
מגבלות ודרישות
כשמשתמשים בהזמנות של Compute Engine עם Agent Platform, חשוב להביא בחשבון את המגבלות והדרישות הבאות:
- ב-Agent Platform אפשר להשתמש רק במקומות שמורים ל-CPU, למכונות וירטואליות של GPU או ל-TPU (גרסת טרום-השקה (Preview)).
- Agent Platform לא יכולה לצרוך הקצאות של מכונות וירטואליות שמחוברים אליהן ידנית דיסקים מסוג Local SSD.
- אפשר להשתמש במקומות שמורים ב-Compute Engine ב-Agent Platform רק לאימון בלי שרת (serverless), להסקת מסקנות ול-Gemini Enterprise Agent Platform Workbench (גרסת טרום-השקה).
- כדי להשתמש במכונה הווירטואלית שהזמנתם, המאפיינים שלה צריכים להיות זהים לאלה של עומס העבודה בפלטפורמת הסוכנים. לדוגמה, אם בהזמנה מצוין סוג מכונה
a2-ultragpu-8g, עומס העבודה של Agent Platform יכול לצרוך את ההזמנה רק אם הוא משתמש גם בסוג מכונהa2-ultragpu-8g. לדרישות - כדי להשתמש במכונות וירטואליות של GPU או ב-TPU שהוקצו במשותף, צריך להשתמש בהם באמצעות הפרויקט הבעלים או פרויקט צרכן שההקצאה משותפת איתו. איך פועלות הזמנות משותפות
- כדי לתמוך בעדכונים שוטפים של פריסות Agent Platform, מומלץ להגדיל את מספר המכונות הווירטואליות במכונה וירטואלית אחת נוספת לפחות לכל פריסה בו-זמנית.
-
אפשר להשתמש ב-Flex Start ל-מתזמן משימות לפריסת workload דינמית (DWS) ולהריץ משימות אימון במשאב לטווח ארוך, חוץ ממקרים שבהם משתמשים במקומות שמורים ב-Compute Engine עם אימון ב-Agent Platform.
חיוב
כשאתם משתמשים במקומות שמורים ב-Compute Engine, אתם מחויבים על:
- תמחור של Compute Engine למשאבים של Compute Engine, כולל הנחות רלוונטיות תמורת התחייבות לשימוש (CUD). למחירון של Compute Engine
- עמלות ניהול אימונים ללא שרת (serverless) ב-Agent Platform, בנוסף לשימוש בתשתית. התמחור של מודלים עם אימון בהתאמה אישית
לפני שמתחילים
- בודקים את הדרישות ו ההגבלות לגבי הזמנות.
- בודקים את דרישות המכסה ואת המגבלות של הזמנות משותפות.
איך מאפשרים שימוש בהזמנה
לפני שמשתמשים במקום שמור למעבדי CPU, למכונות וירטואליות של GPU או למעבדי TPU, צריך להגדיר את מדיניות השיתוף כך שתאפשר ל-Agent Platform להשתמש במקום השמור. כדי לעשות את זה, משתמשים באחת מהשיטות הבאות:
אישור צריכה בזמן יצירת הזמנה
כשיוצרים הזמנה לפרויקט יחיד או הזמנה משותפת של מכונות וירטואליות של GPU, אפשר לאפשר ל-Agent Platform להשתמש בהזמנה באופן הבא:
- אם משתמשים במסוף Cloud de Confiance , בקטע Google Cloud services בוחרים באפשרות Share reservation.
- אם משתמשים ב-Google Cloud CLI, צריך לכלול את הדגל
--reservation-sharing-policyשמוגדר ל-ALLOW_ALL. - אם משתמשים ב-API בארכיטקטורת REST, בגוף הבקשה צריך לכלול את השדה
serviceShareTypeעם הערךALLOW_ALL.
איך משתמשים בהזמנה קיימת
אפשר לשנות מקום שמור לעתיד שנוצר אוטומטית למכונות וירטואליות עם GPU או TPU רק אחרי שעת ההתחלה של המקום השמור.
כדי לאפשר ל-Agent Platform להשתמש בהזמנה קיימת, אפשר להשתמש באחת מהשיטות הבאות:
איך בודקים אם נעשה שימוש בהזמנה
כדי לוודא שההזמנה מנוצלת, קראו את המאמר אימות ניצול ההזמנות במסמכי התיעוד של Compute Engine.יצירת משימת אימון ללא שרת (serverless) עם הזמנה
משתמשים ב-API בארכיטקטורת REST כדי ליצור משימת אימון ללא שרת (serverless) שצורכת הקצאה של מכונות וירטואליות עם GPU ב-Compute Engine.
איך פועלים השיוך והאימות של ההזמנות
כששולחים משימת אימון בהתאמה אישית שמציינת הגדרה של reservationAffinity, פלטפורמת Agent מאמתת את הגדרת ההזמנה לפני שהיא מוסיפה את המשימה לתור:
- ב-
ANY_RESERVATION:- באזור של המשימה צריכה להיות לפחות הזמנה אחת שנוצלה באופן אוטומטי, והיא צריכה להיות משותפת עם Agent Platform (וגם עם הפרויקט שלכם, אם ההזמנה נמצאת בפרויקט מארח אחר).
- השדות
keyו-valuesב-reservationAffinityצריכים להיות מושמטים או ריקים.
- ב-
SPECIFIC_RESERVATION:- בשדה
keyצריך להגדיר את הערךcompute.googleapis.com/reservation-name, ובשדהvaluesצריך לציין הקצאה קיימת אחת באזור בתוך אזור המשימה. - המקום השמור שציינתם צריך להיות מוגדר לטירגוט ספציפי (ולא לצריכה אוטומטית), וצריך לשתף אותו עם Agent Platform (ועם הפרויקט שלכם, אם המקום השמור נמצא בפרויקט מארח אחר).
- בשדה
אם אחת מבדיקות האימות האלה נכשלת, ה-API דוחה מיד את הבקשה ומחזיר שגיאת INVALID_ARGUMENT. האימות המקדים לא בודק את התאימות של סוג המכונה או את הקיבולת הזמינה של ההזמנה בזמן שליחת המשימה.
בטבלה הבאה מוסבר איך Agent Platform מטפלת במשימת אימון, בהתאם למצב ההזמנה ול-reservationAffinityType:
| תרחיש | התנהגות עם ANY_RESERVATION |
התנהגות עם SPECIFIC_RESERVATION |
|---|---|---|
| יש מקום שמור שתואם למאפייני המכונה, ויש בו קיבולת פנויה | המשימה מתקבלת, מנותבת לאזור של ההזמנה וצורכת את ההזמנה. | המשימה מתקבלת וצורכת את ההזמנה שצוינה. |
| ההזמנה קיימת ותואמת למאפייני המכונה, אבל היא מלאה | המשימה מתקבלת ומועברת לאזור שבו נמצאת ההזמנה התואמת. מכיוון שהקיבולת השמורה מוצתה, Agent Platform מנסה להקצות קיבולת על פי דרישה. | המשימה מתקבלת, אבל אם לא מתפנה קיבולת בהזמנה המטורגטת, Agent Platform. היא לא חוזרת לקיבולת על פי דרישה. |
| ההזמנה קיימת, אבל היא לא משותפת עם Agent Platform או עם פרויקט הצרכן |
המשימה נכשלת מיד עם השליחה ומוצגת השגיאה INVALID_ARGUMENT (אלא אם קיימת באזור הזמנה אחרת שנגישה ומוקצית באופן אוטומטי).
|
המשימה נכשלת מיד עם השליחה ומופיעה השגיאה INVALID_ARGUMENT.
|
| אין הזמנה נגישה באזור של המשימה |
המשימה נכשלת מיד עם השליחה ומופיעה השגיאה INVALID_ARGUMENT. הוא לא חוזר לקיבולת על פי דרישה.
|
המשימה נכשלת מיד עם השליחה ומופיעה השגיאה INVALID_ARGUMENT.
|
REST
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- LOCATION: האזור שבו יופעלו הקונטיינר או חבילת Python.
- PROJECT_ID: הפרויקט שבו נוצרה ההזמנה. כדי להשתמש בהזמנה משותפת מפרויקט אחר, צריך לשתף את ההזמנה עם הפרויקט הזה. מידע נוסף זמין במאמר שינוי הפרויקטים של הצרכנים בהזמנה משותפת.
-
JOB_NAME: שדה חובה. השם המוצג של
CustomJob. - MACHINE_TYPE: סוג המכונה שבה משתמשים למשימה. הגדרת ברירת המחדל היא
n1-standard-2. מידע נוסף על סוגי המכונות הנתמכים זמין במאמר הגדרת משאבי מחשוב לאימון בהתאמה אישית. - ACCELERATOR_TYPE: סוג המאיץ שרוצים לצרף למכונה. למידע נוסף על סוג ה-GPU שכל סוג מכונה תומך בו, קראו את המאמר מעבדי GPU לעומסי עבודה של Compute.
- ACCELERATOR_COUNT: מספר המאיצים שרוצים לצרף למכונה.
- מגדירים את משימת האימון בהתאמה אישית:
RESERVATION_AFFINITY_TYPE: הערך חייב להיות
ANY_RESERVATION,SPECIFIC_RESERVATIONאוNO_RESERVATION.ANY_RESERVATIONפירושו שהמכונות הווירטואליות שלcustomJobיכולות להשתמש באופן אוטומטי בכל הזמנה עם מאפיינים תואמים.-
SPECIFIC_RESERVATIONפירושו שהמכונות הווירטואליות שלcustomJobיכולות להשתמש רק במקום שהמכונות הווירטואליות מטרגטות באופן ספציפי לפי שם. -
NO_RESERVATIONפירושו שהמכונות הווירטואליות שלcustomJobלא יכולות להשתמש באף מקום שמור. ההשפעה של ציוןNO_RESERVATIONזהה להשפעה של השמטת מפרט של זיקה להזמנה.
- ZONE: האזור שבו נוצרה ההזמנה.
- RESERVATION_NAME: שם ההזמנה.
- DISK_TYPE: אופציונלי. סוג דיסק האתחול שבו משתמשים במשימה,
pd-standard(ברירת המחדל) אוpd-ssd. מידע נוסף על סוגי דיסקים - DISK_SIZE: אופציונלי. גודל דיסק האתחול ב-GB שמשמש למשימה. ערך ברירת המחדל הוא 100.
- REPLICA_COUNT: מספר הרפליקות של ה-worker שבהן צריך להשתמש. ברוב המקרים,
צריך להגדיר את הערך
1במאגר ה-Workers הראשון. - אם אפליקציית האימון פועלת בקונטיינר בהתאמה אישית, צריך לציין את הפרטים הבאים:
- CUSTOM_CONTAINER_IMAGE_URI: ה-URI של קובץ אימג' של קונטיינר ב-Artifact Registry או ב-Docker Hub, שצריך להריץ בכל רפליקה של Worker.
- CUSTOM_CONTAINER_COMMAND: אופציונלי. הפקודה שמופעלת כשהקונטיינר מופעל. הפקודה הזו מבטלת את נקודת הכניסה שמוגדרת כברירת מחדל בקונטיינר.
- CUSTOM_CONTAINER_ARGS: אופציונלי. הארגומנטים שיועברו כשמפעילים את הקונטיינר.
- אם אפליקציית האימון היא חבילת Python שפועלת בקונטיינר מוגדר מראש, צריך לציין את הפרטים הבאים:
- EXECUTOR_IMAGE_URI: ה-URI של קובץ האימג' של הקונטיינר שמריץ את הקוד שסופק. קונטיינרים זמינים מובנים לאימון
- PYTHON_PACKAGE_URIS: רשימה מופרדת בפסיקים של מזהי URI של Cloud Storage, שמציינים את קובצי חבילת Python שהם תוכנית האימון והחבילות התלויות שלה. המספר המקסימלי של מזהי URI של חבילות הוא 100.
- PYTHON_MODULE: השם של מודול Python שצריך להריץ אחרי התקנת החבילות.
- PYTHON_PACKAGE_ARGS: אופציונלי. ארגומנטים של שורת הפקודה שיועברו למודול Python.
- TIMEOUT: אופציונלי. זמן הריצה המקסימלי של המשימה.
- מציינים את LABEL_NAME ו-LABEL_VALUE לכל התוויות שרוצים להחיל על המשימה הייעודית הזו.
ה-method של ה-HTTP וכתובת ה-URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs
גוף בקשת JSON:
{
"displayName": "JOB_NAME",
"jobSpec": {
"workerPoolSpecs": [
{
"machineSpec": {
"machineType": "MACHINE_TYPE",
"acceleratorType": "ACCELERATOR_TYPE",
"acceleratorCount": ACCELERATOR_COUNT,
"reservationAffinity": {
"reservationAffinityType": "RESERVATION_AFFINITY_TYPE",
// Use the following key and values only if
// the reservationAffinityType is SPECIFIC_RESERVATION.
"key": "compute.googleapis.com/reservation-name",
"values": [
"projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME"
]
},
},
"replicaCount": REPLICA_COUNT,
"diskSpec": {
"bootDiskType": DISK_TYPE,
"bootDiskSizeGb": DISK_SIZE
},
// Union field task can be only one of the following:
"containerSpec": {
"imageUri": CUSTOM_CONTAINER_IMAGE_URI,
"command": [
CUSTOM_CONTAINER_COMMAND
],
"args": [
CUSTOM_CONTAINER_ARGS
]
},
"pythonPackageSpec": {
"executorImageUri": EXECUTOR_IMAGE_URI,
"packageUris": [
PYTHON_PACKAGE_URIS
],
"pythonModule": PYTHON_MODULE,
"args": [
PYTHON_PACKAGE_ARGS
]
}
// End of list of possible types for union field task.
}
// Specify one workerPoolSpec for single replica training, or multiple workerPoolSpecs
// for distributed training.
],
"scheduling": {
"timeout": TIMEOUT
}
},
"labels": {
LABEL_NAME_1": LABEL_VALUE_1,
LABEL_NAME_2": LABEL_VALUE_2
}
}
כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:
curl
שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs"
PowerShell
שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs" | Select-Object -Expand Content
התשובה מכילה מידע על המפרטים וגם את TRAININGPIPELINE_ID.