במאמר הזה נסביר איך להשתמש בהזמנות של Compute Engine כדי להבטיח שיהיו לכם מספיק משאבי מכונות וירטואליות (VM) להרצת משימות אימון בלי שרת (serverless).
מקומות שמורים הם תכונה של Compute Engine. הם עוזרים לוודא שמתי שתצטרכו יהיו לכם משאבים בשביל ליצור מכונות וירטואליות עם אותה חומרה (זיכרון ו-vCPU) ומשאבים אופציונליים (מעבדי CPU, מעבדי GPU, מעבדי TPU ודיסקים מקומיים של SSD).
כשיוצרים שמירת מקום, מערכת Compute Engine בודקת שהקיבולת המבוקשת זמינה בתחום (zone) שצוין. אם כן, מערכת Compute Engine שומרת את המשאבים, יוצרת את שמירת המקום וקורה הדבר הבא:
- אתם יכולים להשתמש במשאבים שהוזמנו באופן מיידי, והם יישארו זמינים עד שתמחקו את ההזמנה.
- אתם מחויבים על המשאבים שהוזמנו באותו תעריף על פי דרישה כמו על מכונות וירטואליות פעילות, כולל הנחות רלוונטיות, עד שההזמנה נמחקת. מכונה וירטואלית שצורכת מקום שמור לא מחויבת בחיובים נפרדים. החיוב מתבצע רק על המשאבים שלא נכללים בהזמנה, כמו דיסקים או כתובות IP. מידע נוסף זמין במאמר תמחור של הזמנות.
מגבלות ודרישות
כשמשתמשים בהזמנות של Compute Engine עם Vertex AI, חשוב להביא בחשבון את ההגבלות והדרישות הבאות:
- Vertex AI יכול להשתמש רק בשמירת מקום למעבדי CPU, למכונות וירטואליות של GPU או ל-TPU (גרסת Preview).
- Vertex AI לא יכול להשתמש בהזמנות של מכונות וירטואליות שצורפו אליהן באופן ידני דיסקים לאחסון מתמיד (SSD) מקומיים.
- השימוש בהזמנות של Compute Engine עם Vertex AI נתמך רק עבור אימון, היקש ו-Vertex AI Workbench (בגרסת Preview) ללא שרתים ב-Vertex AI.
- כדי להשתמש בהזמנה, המאפיינים של מכונת ה-VM בהזמנה צריכים להיות זהים בדיוק לעומס העבודה שלכם ב-Vertex AI. לדוגמה, אם בהזמנה מצוין סוג מכונה
a2-ultragpu-8g, עומס העבודה של Vertex AI יכול להשתמש בהזמנה רק אם הוא גם משתמש בסוג מכונהa2-ultragpu-8g. דרישות - כדי להשתמש בהזמנה משותפת של מכונות וירטואליות עם GPU או TPU, צריך להשתמש בה באמצעות פרויקט הבעלים או פרויקט צרכן שההזמנה משותפת איתו. איך עובד שיתוף ההזמנות
- כדי לתמוך בעדכונים קבועים של הפריסות שלכם ב-Vertex AI, מומלץ להגדיל את מספר מכונות ה-VM לפחות במכונת VM אחת נוספת לכל פריסה מקבילה.
-
Flex Start ל-Dynamic Workload Scheduler והפעלת משימות אימון במשאב מתמשך נתמכים שניהם, למעט כשמשתמשים בהזמנות של Compute Engine עם אימון Vertex AI.
חיוב
כשמשתמשים בהזמנות ב-Compute Engine, מתבצע חיוב על הפעולות הבאות:
- התמחור של Compute Engine עבור משאבי Compute Engine, כולל הנחות תמורת התחייבות לשימוש (CUD) שרלוונטיות. המחירון של Compute Engine
- עמלות על ניהול אימון ללא שרת ב-Vertex AI, בנוסף לשימוש בתשתית. מידע נוסף על התמחור של מודלים עם אימון בהתאמה אישית
לפני שמתחילים
- כדאי לעיין בדרישות ו בהגבלות לגבי הזמנות.
- כדאי לעיין בדרישות המכסה וב הגבלות לגבי הזמנות משותפות.
התרת שימוש בהזמנה
לפני שמשתמשים בשמירת מקום למעבדי CPU, למכונות וירטואליות של GPU או ל-TPU, צריך להגדיר את מדיניות השיתוף שלה כדי לאפשר ל-Vertex AI להשתמש בשמירת המקום. כדי לעשות זאת, משתמשים באחת מהשיטות הבאות:
אפשרות לצריכה בזמן יצירת הזמנה
כשיוצרים הזמנה לפרויקט יחיד או הזמנה משותפת של מכונות וירטואליות של GPU, אפשר לאפשר ל-Vertex AI להשתמש בהזמנה באופן הבא:
- אם משתמשים במסוף, בקטע Google Cloud services בוחרים באפשרות Share reservation. Google Cloud
- אם אתם משתמשים ב-Google Cloud CLI, צריך לכלול את הדגל
--reservation-sharing-policyעם הערךALLOW_ALL. - אם אתם משתמשים ב-API בארכיטקטורת REST, עליכם לכלול בגוף הבקשה את השדה
serviceShareTypeעם הערךALLOW_ALL.
התרת שימוש בהזמנה קיימת
אפשר לשנות הזמנה אוטומטית של מכונות וירטואליות עם GPU או TPU למקום שמור לעתיד רק אחרי שעת ההתחלה של ההזמנה.
כדי לאפשר ל-Vertex AI להשתמש בהזמנה קיימת, אפשר להשתמש באחת מהשיטות הבאות:
איך מוודאים שההזמנה מנוצלת
כדי לוודא שההזמנה מנוצלת, אפשר לעיין במאמר איך בודקים את ניצול ההזמנות במסמכי התיעוד של Compute Engine.יצירת משימת אימון ללא שרת (serverless) עם הזמנה
משתמשים ב-API בארכיטקטורת REST כדי ליצור משימת אימון בלי שרת (serverless) ב-Vertex AI שצורכת הזמנה של מכונות וירטואליות של GPU ב-Compute Engine.
REST
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- LOCATION: האזור שבו יופעלו הקונטיינר או חבילת Python.
- PROJECT_ID: הפרויקט שבו נוצרה ההזמנה. כדי להשתמש בהזמנה משותפת מפרויקט אחר, צריך לשתף את ההזמנה עם הפרויקט הזה. מידע נוסף זמין במאמר בנושא שינוי פרויקטים של צרכנים בהזמנה משותפת.
-
JOB_NAME: חובה. שם מוצג ל
CustomJob. - MACHINE_TYPE: סוג המכונה שבה יש להשתמש עבור העבודה. הגדרת ברירת המחדל היא
n1-standard-2. מידע נוסף על סוגי המכונות הנתמכים זמין במאמר הגדרת משאבי מחשוב לאימון מותאם אישית. - ACCELERATOR_TYPE: סוג המאיץ לצירוף למכונה. מידע נוסף על סוג ה-GPU שכל סוג מכונה תומך בו זמין במאמר מעבדי GPU לעומסי עבודה של מחשוב.
- ACCELERATOR_COUNT: מספר המאיצים לצירוף למכונה.
- מגדירים את משימת ההכשרה בהתאמה אישית:
RESERVATION_AFFINITY_TYPE: הערך חייב להיות
ANY,SPECIFIC_RESERVATIONאוNONE.-
ANYאומר שהמכונות הווירטואליות שלcustomJobיכולות להשתמש באופן אוטומטי בכל הזמנה עם מאפיינים תואמים. -
SPECIFIC_RESERVATION– המכונות הווירטואליות שלSPECIFIC_RESERVATIONיכולות להשתמש רק בהזמנה שהמכונות הווירטואליות מיועדות ספציפית אליה לפי שם.customJob - הערך
NONEמציין שהמכונות הווירטואליות שלcustomJobלא יכולות לצרוך הזמנה כלשהי. ציון שלNONEזהה להשמטה של מפרט שיוך להזמנה.
-
- ZONE: האזור שבו נוצרה ההזמנה.
- RESERVATION_NAME: השם של ההזמנה.
- DISK_TYPE: אופציונלי. סוג דיסק האתחול שבו רוצים להשתמש למשימה,
pd-standard(ברירת מחדל) אוpd-ssd. מידע נוסף על סוגי דיסקים - DISK_SIZE: אופציונלי. הגודל ב-GB של דיסק האתחול שבו רוצים להשתמש למשימה. ערך ברירת המחדל הוא 100.
- REPLICA_COUNT: מספר העותקים המשוכפלים של העובדים לשימוש. ברוב המקרים, צריך להגדיר את הערך הזה ל-
1עבור מאגר העובדים הראשון. - אם אפליקציית האימון פועלת בקונטיינר בהתאמה אישית, צריך לציין את הפרטים הבאים:
- CUSTOM_CONTAINER_IMAGE_URI: ה-URI של קובץ אימג' של קונטיינר ב-Artifact Registry או ב-Docker Hub, שיופעל בכל רפליקה של עובד.
- 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",
"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.
המאמרים הבאים
- מידע נוסף על הזמנות של משאבים אזוריים ב-Compute Engine
- איך משתמשים בהזמנות עם Vertex AI online inference
- איך משתמשים בהזמנות עם Vertex AI batch inference
- איך רואים את ההזמנות
- איך עוקבים אחרי השימוש בהזמנות