סקירה כללית
כדי להפחית את העלות של הפעלת משימות אימון בלי שרת (serverless), אפשר להשתמש ב-VM במודל Spot. מכונות וירטואליות מסוג Spot הן מכונות וירטואליות (VM) שהן עודף קיבולת של Compute Engine. מכונות וירטואליות מסוג Spot נהנות מהנחות משמעותיות, אבל Compute Engine עשוי להפסיק או למחוק (לשחרר) מכונות וירטואליות מסוג Spot בכל שלב כדי לפנות קיבולת.
מידע נוסף זמין במאמר מכונות וירטואליות מסוג Spot.
מגבלות ודרישות
כשמשתמשים במכונות וירטואליות מסוג Spot עם Agent Platform, חשוב להביא בחשבון את המגבלות והדרישות הבאות:
- כל ההגבלות על מכונות וירטואליות מסוג Spot חלות כשמשתמשים במכונות וירטואליות מסוג Spot עם Agent Platform.
- השימוש במכונות וירטואליות מסוג Spot עם Agent Platform נתמך רק לאימון ולהיקש בלי שרת (serverless).
- אי אפשר להשתמש במכונות וירטואליות מסוג Spot עם TPU Pods.
- אי אפשר לשלוח את העבודה דרך מסוף Google Cloud .
חיוב
אם עומסי העבודה שלכם סובלניים לתקלות ויכולים לעמוד בפני אפשרות של קדימות למכונות וירטואליות, מכונות וירטואליות מסוג Spot יכולות להפחית באופן משמעותי את עלויות החישוב. אם חלק מהמכונות הווירטואליות מפסיקות לפעול במהלך העיבוד, העבודה מתבצעת לאט יותר אבל לא מפסיקה לגמרי. מכונות וירטואליות מסוג Spot משלימות את משימות העיבוד באצווה בלי להעמיס עומס נוסף על המכונות הווירטואליות הקיימות, ובלי לדרוש תשלום מלא על מכונות וירטואליות רגילות נוספות. ראו טיפול בהפקעה.
כשמשתמשים במכונות וירטואליות מסוג Spot, החיוב מתבצע לפי משך העבודה וסוג המכונה. לא משלמים על הזמן שבו העבודה נמצאת בתור או נדחית.
טיפול בזכות קדימה
Compute Engine יכול להחזיר לעצמו מכונות וירטואליות מסוג Spot בכל שלב.
לכן, כדי להפיק את המרב מהשימוש ב-VM במודל Spot, עבודת האימון בלי שרת (serverless) צריכה להיות עמידה בכשלים.
כשמכונות וירטואליות מסוג Spot נדחקות, משימת האימון בלי שרת נכשלת עם השגיאה STOCKOUT, ו-Compute Engine מנסה להפעיל מחדש את המשימה עד שש פעמים.
כדי ללמוד איך להפיק את המרב ממכונות וירטואליות זמניות במודל Spot, אפשר לעיין במאמר בנושא שיטות מומלצות לשימוש במכונות וירטואליות זמניות במודל Spot.
הנה כמה מהשיטות שבהן אפשר להשתמש כדי להפוך את משימת האימון בלי שרת (serverless) לעמידה בפני תקלות:
- כדאי ליצור נקודות לשמירה על ההתקדמות כדי לשמור את ההתקדמות במשחק. אם מאחסנים מעת לעת את ההתקדמות של המודל, אפשר לוודא שמשימת אימון בלי שרת (serverless) שהופסקה תוכל להתחדש מנקודת הביקורת האחרונה שאוחסנה, במקום להתחיל מחדש.
- שימוש ב-Elastic Horovod. אימון גמיש מאפשר ל-Horovod להרחיב את משאבי המחשוב בלי צורך בהפעלה מחדש או בהמשך מנקודות ביקורת. מידע נוסף זמין במאמר בנושא Elastic Horovod.
- שימוש בסקריפט לכיבוי. כש-Compute Engine מבצעת דחיקה של מכונת VM מסוג Spot, אתם יכולים להשתמש בסקריפט כיבוי שמנסה לבצע פעולות ניקוי לפני הדחיקה של מכונת ה-VM. מידע נוסף זמין במאמר בנושא טיפול בהפקעה באמצעות סקריפט כיבוי.
לפני שמתחילים
מכינים את אפליקציית האימון ללא שרת:
- כדי להשתמש בקונטיינר מוכן מראש, אפשר לעיין במאמר יצירת אפליקציית אימון של Python לקונטיינר מוכן מראש.
- כדי להשתמש בקונטיינר בהתאמה אישית, אפשר לעיין במאמר בנושא יצירת קובץ אימג' של קונטיינר בהתאמה אישית לאימון.
הגדרת משימת אימון לשימוש במכונות וירטואליות מסוג Spot
אתם יכולים להגדיר את משימת האימון בלי שרת (serverless) כך שתשתמש ב-VM במודל Spot על ידי ציון אסטרטגיית SPOT בהגדרת התזמון.
REST
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- LOCATION: האזור שבו יופעלו הקונטיינר או חבילת Python.
- PROJECT_ID: מזהה הפרויקט. .
-
JOB_NAME: שדה חובה. שם מוצג ל
CustomJob. - מגדירים את משימת האימון בהתאמה אישית:
- MACHINE_TYPE: סוג המכונה. אפשר לעיין בסוגי המכונות שזמינים לאימון.
- REPLICA_COUNT: מספר העותקים של העובדים לשימוש. ברוב המקרים, צריך להגדיר את הערך הזה ל-
1עבור מאגר העובדים הראשון. - אם אפליקציית האימון פועלת בקונטיינר בהתאמה אישית, צריך לציין את הפרטים הבאים:
- CUSTOM_CONTAINER_IMAGE_URI: ה-URI של קובץ אימג' של קונטיינר Docker עם קוד האימון. איך יוצרים תמונה מותאמת אישית של קונטיינר
- 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.
ה-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"
}
},
"replicaCount": REPLICA_COUNT,
// 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": {
"strategy": "SPOT"
}
}
}
כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:
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
התשובה מכילה מידע על המפרטים וגם על JOB_ID.
Python
במאמר התקנת Agent Platform SDK ל-Python מוסבר איך להתקין או לעדכן את Agent Platform SDK ל-Python. מידע נוסף מופיע במאמרי העזרה של Agent Platform SDK for Python API.
customJob = aiplatform.CustomJob(
display_name=TEST_CASE_NAME,
worker_pool_specs=worker_pool_spec,
staging_bucket=OUTPUT_DIRECTORY
)
customJob.run(
scheduling_strategy=aiplatform.compat.types.custom_job.Scheduling.Strategy.SPOT
)
המאמרים הבאים
- מידע נוסף על מכונות וירטואליות מסוג Spot
- למידע נוסף על מכונות וירטואליות (VM) של Compute Engine באופן כללי, אפשר לקרוא את המאמר בנושא מכונות וירטואליות.
- איך יוצרים מכונות וירטואליות מסוג Spot ומשתמשים בהן
- שימוש במכונות וירטואליות מסוג Spot עם Vertex AI Inference