אם עומס העבודה שלכם דורש עיבוד מבוזר של כמה צמתים, כדאי להשתמש בהפעלה גמישה עם הקצאת משאבים בתור. מידע נוסף זמין במאמר הרצת עומס עבודה רחב היקף עם הפעלה גמישה באמצעות הקצאת משאבים בתור.
המדריך הזה מיועד למהנדסי למידת מכונה (ML), לאדמינים ולאופרטורים של פלטפורמות ולמומחים בתחום הנתונים וה-AI שרוצים להשתמש ביכולות של Kubernetes לניהול קונטיינרים כדי להריץ עומסי עבודה של אצווה. מידע נוסף על תפקידים נפוצים ועל משימות לדוגמה שאנחנו מתייחסים אליהן ב Google Cloud תוכן, זמין במאמר תפקידי משתמשים נפוצים ומשימות ב-GKE.
תמחור Flex-start
מומלץ להשתמש ב-Flex-start אם נפח העבודה שלכם מחייב הקצאה דינמית של משאבים לפי הצורך, למשך עד שבעה ימים עם הזמנות לטווח קצר, ללא ניהול מורכב של מכסות וגישה חסכונית. התכונה 'התחלה גמישה' מבוססת על Dynamic Workload Scheduler והחיוב מתבצע לפי התמחור של Dynamic Workload Scheduler:
- הנחה (עד 53%) על vCPU, GPU ו-TPU.
- אתם משלמים לפי השימוש.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:
- מפעילים את ממשק Google Kubernetes Engine API. הפעלת Google Kubernetes Engine API
- כדי להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את gcloud CLI. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה
gcloud components updateכדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
- מוודאים שיש לכם אשכול Autopilot או אשכול Standard שפועלת בו גרסה 1.33.0-gke.1712000 ואילך.
- חשוב לוודא שאתם מכירים את המגבלות של תחילת שיעור גמישה.
- כשמשתמשים באשכול רגיל, צריך לוודא שיש לפחות מאגר צמתים אחד בלי הפעלה של 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. אם יש לכם אשכול אזורי מסוג 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 models available מפורטים המודלים הזמינים של יחידות ה-GPU.
- מאתרים את השורה של סוג מאיץ ה-GPU שבחרתם.
- בודקים את העמודה 'סדרת המכונה' באותה שורה. בעמודה הזו מצוין באיזו סדרת מכונות צריך להשתמש.
- כדי לראות את השמות של סוגי המכונות שאפשר לציין, לוחצים על הקישור בסדרת המכונות.
היוצא מן הכלל היחיד הוא סדרת מכונות N1, שבה יש הנחיות נוספות לגבי סוגי מכונות N1 שאפשר להשתמש בהם עם סוג המאיץ שבחרתם.
לפני שמשתמשים במכונה שעברה אופטימיזציה לשימוש במאיץ, צריך לוודא שהיא נתמכת במצב הקצאת משאבים של flex-start, כמו שמוצג בזמינות אפשרויות הצריכה לפי סוג המכונה.
קביעת מספר המאיצים
אם אתם משתמשים באשכול במצב 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 \ --consolidation-delay=CONSOLIDATION_DELAYמחליפים את מה שכתוב בשדות הבאים:
-
NODE_POOL_NAME: השם שבחרתם למאגר הצמתים. -
CLUSTER_NAME: השם של אשכול Standard שרוצים לשנות. -
CONTROL_PLANE_LOCATION: האזור של שירותי Compute למישור הבקרה של האשכול. PROJECT_ID: מזהה הפרויקט.-
ACCELERATOR_TYPE: הסוג הספציפי של המאיץ (לדוגמה,nvidia-tesla-t4עבור NVIDIA T4) לצירוף למופעים. -
COUNT: מספר המאיצים לצירוף למופעים. ערך ברירת המחדל הוא1. -
MACHINE_TYPE: סוג המכונה לשימוש בצמתים. -
MAX_RUN_DURATION: אופציונלי. זמן הריצה המקסימלי של צומת בשניות, עד ברירת המחדל של שבעה ימים. המספר שאתם מזינים חייב להסתיים ב-s. לדוגמה, כדי לציין יום אחד, מזינים86400s. -
CONSOLIDATION_DELAY: אופציונלי. משך הזמן שבו Cluster Autoscaler ממתין לפני שהוא יכול להקטין את מספר הצמתים שלא נעשה בהם שימוש מלא. ההגדרה הזו מאפשרת להשהות את ההקטנה של מספר הצמתים ולשמור את מאגר הצמתים לשימוש חוזר מאוחר יותר על ידי Pods אחרים. המספר שאתם מזינים חייב להסתיים ב-s. לדוגמה, כדי לציין שעה אחת, מזינים3600s. זמין ב-GKE מגרסה1.34.1-gke.2364000ואילך. -
NODE_ZONES: רשימה מופרדת בפסיקים של אזור אחד או יותר שבהם GKE יוצר את מאגר הצמתים.
בפקודה הזו, הדגל
--flex-startמורה ל-gcloudליצור מאגר צמתים עם מכונות וירטואליות (VM) מסוג Flex-start.GKE יוצר מאגר צמתים עם צמתים שמכילים שתי מכונות מסוג המאיץ שצוין. במאגר הצמתים אין צמתים בהתחלה, והתכונה 'שינוי גודל אוטומטי' מופעלת
-
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 קורא ל-APIs כדי ליצור אשכול עם מאגר צמתים שמשתמש במכונות וירטואליות עם GPUs שניתנות להפעלה גמישה. Google Cloud במאגר הצמתים יש בהתחלה אפס צמתים, והוא מוגדר עם שינוי גודל אוטומטי. מידע נוסף על 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, בקר משימות יוצר פוד אחד או יותר ועוזר לוודא שהם מבצעים משימה ספציפית בהצלחה.בGoogle Cloud מסוף, לוחצים על
הפעלת Cloud Shell כדי להפעיל סשן של 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 על המשאבים שבהם השתמשתם בדף הזה, אתם יכולים למחוק את הפרויקט שמכיל את המשאבים או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת הפרויקט
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
מחיקת המשאב הספציפי
מחיקת המשרות:
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