אם עומס העבודה שלכם דורש עיבוד מבוזר של כמה צמתים, כדאי להשתמש בהפעלה גמישה עם הקצאת משאבים בתור. מידע נוסף זמין במאמר הרצת עומס עבודה רחב היקף עם הפעלה גמישה באמצעות הקצאת משאבים בתור.
המדריך הזה מיועד למהנדסי למידת מכונה (ML), למנהלי פלטפורמות ולמפעילים, ולמומחי נתונים ו-AI שרוצים להשתמש ביכולות של Kubernetes לניהול קונטיינרים כדי להריץ עומסי עבודה של אצווה. מידע נוסף על תפקידים נפוצים ועל משימות לדוגמה שאנחנו מתייחסים אליהן בתוכן של Google Cloud , זמין במאמר תפקידים נפוצים של משתמשי GKE ומשימות.
תמחור Flex-start
מומלץ להשתמש ב-Flex-start אם נפח העבודה שלכם דורש הקצאה דינמית של משאבים לפי הצורך, למשך עד שבעה ימים עם הזמנות לטווח קצר, ללא ניהול מורכב של מכסות וגישה חסכונית. התכונה 'התחלה גמישה' מבוססת על Dynamic Workload Scheduler והחיוב מתבצע לפי התמחור של Dynamic Workload Scheduler:
- הנחה (עד 53%) על vCPU, GPU ו-TPU.
- התשלום מתבצע לפי שימוש.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:
- מפעילים את ממשק ה-API של Google Kubernetes Engine. הפעלת Google Kubernetes Engine API
- אם רוצים להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה
gcloud components updateכדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
- מוודאים שיש לכם אשכול Autopilot או אשכול רגיל שפועלת בו גרסה 1.33.0-gke.1712000 ואילך.
- מוודאים שאתם מכירים את המגבלות של התחלה גמישה (Flex-start).
- כשמשתמשים באשכול רגיל, צריך לוודא שיש לפחות מאגר צמתים אחד בלי הפעלה של flex-start כדי שהאשכול יפעל בצורה תקינה.
- מוודאים שיש לכם מכסת שימוש ב-GPU עם אפשרות קדימה במיקומי הצמתים.
אם אין לכם אשכול או שהאשכול לא עומד בדרישות, אתם יכולים ליצור אשכול אזורי רגיל באמצעות ה-CLI של gcloud. מוסיפים את הדגלים הבאים כדי לקבל מידע על תחילת שימוש גמישה:
--location=us-central1 \
--node-locations=us-central1-a,us-central1-b \
--machine-type=g2-standard-8
כשיוצרים מאגר צמתים עם התחלה גמישה, משתמשים בדגלים שצוינו קודם ובדגל --accelerator type=nvidia-l4,count=1.
אם יש לכם אשכול Standard שעומד בדרישות, בהמשך המאמר מוסבר איך לבחור סוג של מאיץ GPU וסוג מכונה לאשכול.
בחירת סוג של מאיץ GPU
אם אתם משתמשים באשכול במצב Autopilot, דלגו על הקטע הזה ועברו אל הקטע הפעלת עומס עבודה של אצווה.
הזמינות של GPU היא ספציפית לכל אזור. צריך למצוא סוג של מאיץ GPU שזמין באזור שבו נמצא אשכול Standard. אם יש לכם אשכול אזורי רגיל, האזור שבו סוג מאיץ ה-GPU זמין חייב להיות באזור שבו נמצא האשכול. כשיוצרים את מאגר הצמתים, מציינים את סוג המאיץ ואת האזורים של הצמתים. אם מציינים סוג של מאיץ שלא זמין במיקום של האשכול, יצירת מאגר הצמתים נכשלת.
מריצים את הפקודות הבאות כדי לקבל את המיקום של האשכול ואת סוג מאיץ ה-GPU הנתמך.
כדי לראות את המיקום של המקבץ:
gcloud container clusters listהפלט אמור להיראות כך:
NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS STACK_TYPE example-cluster-1 us-west2 1.33.2-gke.1111000 34.102.3.122 e2-medium 1.33.2-gke.1111000 9 RUNNING IPV4הצגת רשימה של סוגי מאיצי ה-GPU הזמינים, לא כולל תחנות עבודה וירטואליות במיקום:
gcloud compute accelerator-types list | grep CONTROL_PLANE_LOCATION | grep -v "Workstation"מחליפים את
CONTROL_PLANE_LOCATIONבמיקום של האשכול.לדוגמה, כדי לקבל רשימה של סוגי מאיצי GPU באזור
us-west2, מריצים את הפקודה הבאה:gcloud compute accelerator-types list | grep us-west2 | grep -v "Workstation"הפלט אמור להיראות כך:
nvidia-b200 us-west2-c NVIDIA B200 180GB nvidia-tesla-p4 us-west2-c NVIDIA Tesla P4 nvidia-tesla-t4 us-west2-c NVIDIA T4 nvidia-tesla-p4 us-west2-b NVIDIA Tesla P4 nvidia-tesla-t4 us-west2-b NVIDIA T4
צריך לבחור סוג מכונה תואם
אם אתם משתמשים באשכול במצב Autopilot, דלגו על הקטע הזה ועברו אל הקטע הפעלת עומס עבודה של אצווה.
אחרי שתדעו אילו מעבדי GPU זמינים במיקום של האשכול, תוכלו לקבוע את סוגי המכונות התואמים. Google Cloud מגביל את השימוש במעבדי GPU לסדרות מכונות ספציפיות. כדי למצוא סוג מכונה:
- אפשר לעיין בטבלה מודלים של GPU שזמינים.
- מאתרים את השורה של סוג מאיץ ה-GPU שבחרתם.
- בודקים את העמודה 'סדרת המכונה' באותה שורה. בעמודה הזו מצוין באיזו סדרת מכונות צריך להשתמש.
- כדי לראות את השמות של סוגי המכונות שאפשר לציין, לוחצים על הקישור בסדרת המכונות.
היוצא מן הכלל היחיד הוא סדרת מכונות N1, שבה יש הנחיות נוספות לגבי סוגי מכונות N1 שאפשר להשתמש בהם עם סוג המאיץ שבחרתם.
לפני שמשתמשים במכונה שעברה אופטימיזציה לשימוש במאיץ, צריך לוודא שהיא נתמכת במצב הקצאת משאבים עם הפעלה גמישה, כמו שמוצג בזמינות של אפשרויות צריכה לפי סוג המכונה.
קביעת מספר המאיצים
אם אתם משתמשים באשכול במצב Autopilot, דלגו על הקטע הזה ועברו אל הקטע הפעלת עומס עבודה של אצווה.
כדי ליצור מאגר צמתים, צריך לקבוע את מספר המאיצים שיוצמדו לכל צומת במאגר. הערכים התקינים תלויים בסוג המאיץ ובסוג המכונה. לכל סוג מכונה יש מגבלה על מספר ה-GPU שהוא יכול לתמוך בו. כדי לקבוע באיזה ערך להשתמש (בנוסף לערך ברירת המחדל 1):
- מידע נוסף זמין במאמר בנושא סוגי מכונות עם GPU.
- בטבלה, חפשו את סוג המאיץ עבור סדרת המכונות שלכם.
- משתמשים בערך שבעמודה 'מספר יחידות ה-GPU'.
יצירת מאגר צמתים עם flex-start
אם אתם משתמשים באשכול במצב Autopilot, דלגו על הקטע הזה ועברו אל הקטע הפעלת עומס עבודה של אצווה.
כדי ליצור מאגר צמתים עם הפעלה גמישה באשכול קיים מסוג Standard, אפשר להשתמש ב-CLI של gcloud או ב-Terraform.
gcloud
יוצרים מאגר צמתים עם flex-start:
gcloud container node-pools create NODE_POOL_NAME \ --cluster CLUSTER_NAME \ --location CONTROL_PLANE_LOCATION \ --project PROJECT_ID \ --accelerator type=ACCELERATOR_TYPE,count=COUNT \ --machine-type MACHINE_TYPE \ --max-run-duration MAX_RUN_DURATION \ --flex-start \ --node-locations NODE_ZONES \ --num-nodes 0 \ --enable-autoscaling \ --total-min-nodes 0 \ --total-max-nodes 5 \ --location-policy ANY \ --reservation-affinity none \ --no-enable-autorepairמחליפים את מה שכתוב בשדות הבאים:
-
NODE_POOL_NAME: השם שבחרתם למאגר הצמתים. -
CLUSTER_NAME: השם של אשכול Standard שרוצים לשנות. -
CONTROL_PLANE_LOCATION: אזור המחשוב של מישור הבקרה של האשכול. PROJECT_ID: מזהה הפרויקט.-
ACCELERATOR_TYPE: הסוג הספציפי של המאיץ (לדוגמה,nvidia-tesla-t4ל-NVIDIA T4) לצירוף למופעים. -
COUNT: מספר המאיצים לצירוף למופעים. ערך ברירת המחדל הוא1. -
MACHINE_TYPE: סוג המכונה שבה רוצים להשתמש לצמתים. -
MAX_RUN_DURATION: אופציונלי. זמן הריצה המקסימלי של צומת בשניות, עד ברירת המחדל של שבעה ימים. המספר שאתם מזינים חייב להסתיים ב-s. לדוגמה, כדי לציין יום אחד, מזינים86400s. -
NODE_ZONES: רשימה מופרדת בפסיקים של אזור אחד או יותר שבהם GKE יוצר את מאגר הצמתים.
בפקודה הזו, הדגל
--flex-startמורה ל-gcloudליצור מאגר צמתים עם מכונות וירטואליות (VM) מסוג Flex-start.GKE יוצר מאגר צמתים עם צמתים שמכילים שתי מכונות מסוג המאיץ שצוין. במאגר הצמתים אין צמתים בהתחלה, והתכונה 'התאמה אוטומטית לעומס' מופעלת
-
בודקים את הסטטוס של התחלה גמישה במאגר הצמתים:
gcloud container node-pools describe NODE_POOL_NAME \ --cluster CLUSTER_NAME \ --location CONTROL_PLANE_LOCATION \ --format="get(config.flexStart)"אם האפשרות flex-start מופעלת במאגר הצמתים, השדה
flexStartמוגדר ל-True.
Terraform
אפשר להשתמש ב-flex-start עם GPU באמצעות מודול Terraform.
- מוסיפים את הבלוק הבא להגדרות של Terraform:
resource "google_container_node_pool" " "gpu_dws_pool" {
name = "gpu-dws-pool"
queued_provisioning {
enabled = false
}
}
node_config {
machine_type = "MACHINE_TYPE"
accelerator_type = "ACCELERATOR_TYPE"
accelerator_count = COUNT
node_locations = ["NODE_ZONES"]
flex_start = true
}
מחליפים את מה שכתוב בשדות הבאים:
-
MACHINE_TYPE: סוג המכונה שבה רוצים להשתמש לצמתים. -
ACCELERATOR_TYPE: הסוג הספציפי של המאיץ (לדוגמה,nvidia-tesla-t4עבור NVIDIA T4) לצירוף למופעים. -
COUNT: מספר המאיצים לצירוף למופעים. ערך ברירת המחדל הוא1. -
NODE_ZONES: רשימה מופרדת בפסיקים של אזור אחד או יותר שבהם GKE יוצר את מאגר הצמתים.
Terraform קורא לממשקי API של Google Cloud כדי ליצור אשכול עם מאגר צמתים שמשתמש במכונות וירטואליות עם כרטיסי GPU שניתנות להפעלה גמישה. במאגר הצמתים יש בהתחלה אפס צמתים, והוא מוגדר עם התאמה אוטומטית לעומס. מידע נוסף על Terraform זמין במפרט המשאבים של google_container_node_pool ב-terraform.io.
אימות הסטטוס של התחלה גמישה במאגר הצמתים
מריצים את הפקודה הבאה:
gcloud container node-pools describe NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--location CONTROL_PLANE_LOCATION \
--format="get(config.flexStart)"
אם האפשרות flex-start מופעלת במאגר הצמתים, השדה flexStart מוגדר ל-True.
הרצת עומס עבודה באצווה
בקטע הזה, יוצרים שני Kubernetes Jobs שכל אחד מהם דורש GPU אחד. ב-Kubernetes, רכיב Job controller יוצר פוד אחד או יותר ומוודא שהם מבצעים משימה ספציפית בהצלחה.בGoogle Cloud מסוף, מפעילים סשן של Cloud Shell על ידי לחיצה על
Activate Cloud Shell. סשן ייפתח בחלונית התחתונה של מסוף Google Cloud .
יוצרים קובץ בשם
dws-flex-start.yaml:apiVersion: batch/v1 kind: Job metadata: name: job-1 spec: template: spec: nodeSelector: cloud.google.com/gke-flex-start: "true" cloud.google.com/gke-accelerator: ACCELERATOR_TYPE containers: - name: container-1 image: gcr.io/k8s-staging-perf-tests/sleep:latest args: ["10s"] # Sleep for 10 seconds resources: requests: nvidia.com/gpu: 1 limits: nvidia.com/gpu: 1 restartPolicy: OnFailure --- apiVersion: batch/v1 kind: Job metadata: name: job-2 spec: template: spec: nodeSelector: cloud.google.com/gke-flex-start: "true" cloud.google.com/gke-accelerator: ACCELERATOR_TYPE containers: - name: container-2 image: gcr.io/k8s-staging-perf-tests/sleep:latest args: ["10s"] # Sleep for 10 seconds resources: requests: nvidia.com/gpu: 1 limits: nvidia.com/gpu: 1 restartPolicy: OnFailureהחלת מניפסט
dws-flex-start.yaml:kubectl apply -f dws-flex-start.yamlמוודאים שהעבודות פועלות באותו צומת:
kubectl get pods -l "job-name in (job-1,job-2)" -o wideהפלט אמור להיראות כך:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES job-1 0/1 Completed 0 19m 10.(...) gke-flex-zonal-a2 <none> <none> job-2 0/1 Completed 0 19m 10.(...) gke-flex-zonal-a2 <none> <none>
הסרת המשאבים
כדי לא לצבור חיובים בחשבון Google Cloud על המשאבים שבהם השתמשתם בדף הזה, אתם יכולים למחוק את הפרויקט שמכיל את המשאבים או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת הפרויקט
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
מחיקת המשאב הספציפי
מחיקת המשרות:
kubectl delete job -l "job-name in (job-1,job-2)"מוחקים את מאגר הצמתים:
gcloud container node-pools delete NODE_POOL_NAME \ --location CONTROL_PLANE_LOCATIONמחיקת האשכול:
gcloud container clusters delete CLUSTER_NAME
המאמרים הבאים
- מידע נוסף על יחידות GPU ב-GKE
- מידע נוסף על הקצאת משאבים אוטומטית של צמתים
- מידע נוסף על שיטות מומלצות להרצה של עומסי עבודה באצווה ב-GKE