במאמר הזה מוסבר איך ליצור אשכול Google Kubernetes Engine (GKE) שעבר אופטימיזציה ל-AI, שמשתמש במכונות וירטואליות של Compute Engine מסוג A4X, A4, A3 Ultra, A3 Mega ו-A3 High (עם 8 יחידות GPU) כדי לתמוך בעומסי עבודה של AI ו-ML.
סדרות המכונות A4X, A4, A3 Ultra, A3 Mega ו-A3 High (עם 8 יחידות GPU) נועדו לאפשר לכם להריץ אשכולות AI/ML בקנה מידה גדול, עם תכונות כמו מיקום ממוקד של עומסי עבודה, אמצעי בקרה מתקדמים לתחזוקת אשכולות ותזמון מודע-טופולוגיה. מידע נוסף מופיע במאמר סקירה כללית על ניהול אשכולות.
GKE מספק פלטפורמה יחידה להרצת מגוון רחב של עומסי עבודה בהתאם לצרכים של הארגון. זה כולל אימון מוקדם מבוזר עם ביצועים גבוהים, שיפור מודלים, הסקת מסקנות ממודלים, הצגת אפליקציות ושירותים תומכים. GKE מפחית את העומס התפעולי של ניהול פלטפורמות מרובות.
בחירת אופן היצירה של אשכול GKE שעבר אופטימיזציה באמצעות AI
כל אחת מהאפשרויות הבאות ליצירת אשכול מספקת רמות שונות של קלות וגמישות בהגדרת האשכול ובתזמון עומסי העבודה:
ליצור אשכולות עם הגדרת ברירת המחדל למשאבי מחשוב, אחסון ורשת, ועם GPUDirect RDMA-over-Converged-Ethernet (RoCE) מופעל:
- אפשר להשתמש ב-Cluster Toolkit כדי ליצור במהירות אשכולות GKE שמוכנים לייצור.
- משתמשים ב-Accelerated Processing Kit (XPK) כדי ליצור במהירות אשכולות GKE להוכחות היתכנות ולבדיקות.
לחלופין, אפשר ליצור את אשכול GKE באופן ידני כדי לבצע התאמה אישית מדויקת או להרחיב סביבות GKE קיימות של ייצור. כדי ליצור ידנית אשכול GKE שעבר אופטימיזציה באמצעות AI, אפשר לעיין באחד מהדפים הבאים:
- A4X Max: יצירת אשכול GKE מותאם אישית שעבר אופטימיזציה באמצעות AI ומשתמש ב-A4X Max.
- A4X: יצירת אשכול GKE מותאם אישית שעבר אופטימיזציה באמצעות AI ומשתמש ב-A4X.
- A4 או A3 Ultra: יצירת אשכול GKE מותאם אישית שעבר אופטימיזציה ל-AI ומשתמש ב-A4 או ב-A3 Ultra.
- A3 Mega או A3 High: יצירת אשכולות GKE Standard שמשתמשים ב-A3 Mega או ב-A3 High או יצירת אשכולות GKE Autopilot שמשתמשים ב-A3 Mega או ב-A3 High.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:
- מפעילים את ממשק Google Kubernetes Engine API. הפעלת Google Kubernetes Engine API
- אם רוצים להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה
gcloud components updateכדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
- מוודאים שיש לכם את ההרשאות הנדרשות ליצירה ולניהול של אשכול GKE וחשבונות השירות המשויכים:
- אדמין ב-Kubernetes Engine (
roles/container.admin) - אדמין של Compute (
roles/compute.admin) - אדמין לניהול נפח האחסון (
roles/storage.admin) - אדמין IAM בפרויקט (
roles/resourcemanager.projectIamAdmin) - אדמין בחשבון שירות (
roles/iam.serviceAccountAdmin) - משתמש בחשבון שירות (
roles/iam.serviceAccountUser) - Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer) - אדמין של תפקידים (
roles/iam.roleAdmin) - Secret Manager Secret Version Manager (
roles/secretmanager.secretVersionManager)
- אדמין ב-Kubernetes Engine (
בחירת אפשרות צריכה וקבלת קיבולת
בוחרים אפשרות צריכה. הבחירה צריכה להתבסס על האופן שבו רוצים לקבל ולהשתמש במשאבי GPU. מידע נוסף זמין במאמר בנושא בחירת אפשרות צריכה.
ב-GKE, כדאי לקחת בחשבון את המידע הנוסף הבא כשבוחרים אפשרות צריכה:
- אי אפשר להקצות מופעי מחשוב מסוג A4X Max ו-A4X באמצעות flex-start.
- מידע נוסף על flex-start (Preview) ו-GKE זמין במאמר מידע על זמינות של GPU עם flex-start.
- המיקום של מודעות עם גמישות בתאריכי ההתחלה נעשה בצורה קומפקטית ככל האפשר. כדי לבדוק את הטופולוגיה, אפשר לעיין במאמר הצגת הטופולוגיה הפיזית של הצמתים באשכול GKE.
- אפשר לקבל מידע על הטופולוגיה רק כשמשתמשים במכונות וירטואליות מסוג Spot אם מגדירים מיקום קומפקטי.
קבלת קיבולת. תהליך קבלת הקיבולת שונה בכל אפשרות צריכה.
כדי לקבל מידע על התהליך של אפשרות הצריכה שבחרתם, אפשר לעיין במאמר סקירה כללית של הקיבולת.
דרישות
הדרישות הבאות חלות על אשכול GKE שעבר אופטימיזציה באמצעות AI:
ב-A4X Max, צריך להשתמש באחת מהגרסאות הבאות:
- בגרסה 1.35 ואילך, צריך להשתמש ב-GKE בגרסה 1.35.0-gke.2745000 ואילך.
- בגרסה 1.34, צריך להשתמש ב-GKE בגרסה 1.34.3-gke.1318000 ואילך.
הגרסאות האלה עוזרות לוודא שמכשיר A4X Max משתמש ב:
- R580.95.05, הגרסה המינימלית של מנהל ההתקן של GPU ל-A4X Max, שמופעלת כברירת מחדל.
- ניהול זיכרון עקבי שמבוסס על מנהל התקן (CDMM), שמופעל כברירת מחדל. NVIDIA ממליצה להפעיל את המצב הזה באשכולות Kubernetes כדי לפתור בעיות של דיווח יתר על זיכרון. CDMM מאפשר לנהל את זיכרון ה-GPU דרך הדרייבר במקום דרך מערכת ההפעלה (OS). הגישה הזו עוזרת לכם להימנע מהעברת זיכרון GPU למצב אונליין במערכת ההפעלה, ומציגה את זיכרון ה-GPU כצומת Non-Uniform Memory Access (NUMA) למערכת ההפעלה. אין תמיכה ב-GPU מרובה מופעים כש-CDMM מופעל. מידע נוסף על CDMM זמין במאמר תמיכה בציוד ובתוכנה.
- GPUDirect RDMA ו-MNNVL, שמומלץ להפעיל כדי שמאגרי הצמתים של A4X Max יוכלו להשתמש ביכולות הרשת של A4X Max.
ב-A4X, צריך להשתמש באחת מהגרסאות הבאות:
- לגרסה 1.33 ואילך, צריך להשתמש בגרסה 1.33.4-gke.1036000 ואילך של GKE.
- בגרסה 1.32, צריך להשתמש ב-GKE גרסה 1.32.8-gke.1108000 ואילך.
הגרסאות האלה עוזרות לוודא ש-A4X משתמש ב:
- R580, הגרסה המינימלית של מנהל ההתקן של GPU ל-A4X, שמופעלת כברירת מחדל.
- ניהול זיכרון עקבי שמבוסס על מנהל התקן (CDMM), שמופעל כברירת מחדל. NVIDIA ממליצה להפעיל את המצב הזה באשכולות Kubernetes כדי לפתור בעיות של דיווח יתר על זיכרון. CDMM מאפשר לנהל את זיכרון ה-GPU דרך הדרייבר במקום דרך מערכת ההפעלה (OS). הגישה הזו עוזרת לכם להימנע מהעברת זיכרון GPU למצב אונליין במערכת ההפעלה, ומציגה את זיכרון ה-GPU כצומת Non-Uniform Memory Access (NUMA) למערכת ההפעלה. אין תמיכה ב-GPU מרובה מופעים כש-CDMM מופעל. מידע נוסף על CDMM זמין במאמר תמיכה בציוד ובתוכנה.
- GPUDirect RDMA ו-MNNVL, מומלץ להפעיל אותם כדי שמאגרי הצמתים של A4X יוכלו להשתמש ביכולות הרשת של A4X.
חשוב לוודא שמשתמשים בגרסה המינימלית של מנהל ההתקן של GPU, בהתאם לסוג המכונה:
- A4X Max: כדי להשתמש במכונות Bare Metal מסוג A4X Max עם כרטיסי GPU מסוג GB300, צריך לפחות את גרסת מנהל ההתקן של GPU R580.95.05. אפשר לעיין בדרישות הגרסה שצוינו קודם.
- A4X: מעבדי ה-GPU מסוג GB200 במכונות וירטואליות (VM) מסוג A4X דורשים גרסה מינימלית של מנהל ההתקן של GPU מסוג R580. צריך לעיין בדרישות לגבי הגרסה שצוינו קודם.
- A4: מעבדי ה-GPU מסוג B200 במכונות וירטואליות מסוג A4 דורשים גרסה מינימלית של מנהל ההתקן של GPU מסוג R570. כברירת מחדל, GKE מתקין אוטומטית את גרסת הדרייבר הזו בכל צמתי A4 שמריצים את הגרסה המינימלית הנדרשת ל-A4, 1.32.1-gke.1729000 ואילך.
- A3 Ultra: כדי להשתמש במעבדי ה-GPU מסוג H200 במכונות וירטואליות מסוג A3 Ultra, צריך לפחות את גרסת מנהל ההתקן של GPU R550, שזמינה ב-GKE 1.31 כגרסת מנהל ההתקן
latest. ב-A3 Ultra, צריך להגדיר אתgpu-driver-version=latestבאמצעות GKE 1.31. ב-GKE גרסה 1.31.5-gke.1169000 ואילך, GKE מתקין כברירת מחדל באופן אוטומטי גרסאות של מנהל התקן ל-GPU R550 בצמתי A3 Ultra. - A3 Mega ו-A3 High: מעבדי ה-GPU מסוג H100 במכונות וירטואליות מסוג A3 High ו-A3 Mega נתמכים על ידי גרסת ברירת המחדל של מנהל ההתקן של ה-GPU בכל גרסאות GKE הנתמכות. אפשר גם להגדיר את הערך
gpu-driver-version=latestכדי לגשת לדרייברים חדשים יותר של סביבת הייצור שזמינים בגרסאות נתמכות של GKE.
במאגרי צמתים מסוג A3 Ultra, צריך להגדיר את סוג הדיסק ל-
hyperdisk-balanced.כדי להשתמש ב-GPUDirect RDMA, צריך להשתמש בגרסאות המינימליות הבאות בהתאם לסוג המכונה:
- A4X Max: אפשר לעיין בדרישות הגרסה שצוינו קודם.
- A4X: אפשר לעיין בדרישות הגרסה שצוינו קודם.
- A4: צריך להשתמש בגרסה 1.32.2-gke.1475000 ואילך.
- A3 Ultra: שימוש בגרסה 1.31.4-gke.1183000 ואילך.
כדי להשתמש ב-GPUDirect-TCPXO (ב-A3 Mega) וב-GPUDirect-TCPX (ב-A3 High), צריך להשתמש בגרסאות GKE הבאות:
- A3 High: אפשר להשתמש בכל גרסה זמינה של GKE לפני גרסה 1.34.
- A3 Mega: אפשר להשתמש בכל גרסה זמינה של GKE.
כדי להשתמש ב-GPUDirect RDMA, הצמתים של GKE צריכים להשתמש בתמונת צומת של מערכת הפעלה שמותאמת לקונטיינרים. אין תמיכה בתמונות של צמתים ב-Ubuntu וב-Windows.
כדי ליצור אשכולות עם A4X Max ו-A4X, צריך להשתמש במודל הקצאת משאבים שמוגבל להזמנה. אין תמיכה במודלים אחרים של הקצאת הרשאות.
יצירת אשכול
כדי ליצור אשכול באמצעות Cluster Toolkit או XPK, פועלים לפי ההוראות הבאות.
יצירת אשכול באמצעות Cluster Toolkit
בקטע הזה מוסבר תהליך יצירת האשכול, כדי לוודא שהפרויקט פועל בהתאם לשיטות המומלצות ועומד בדרישות לאשכול GKE שעבר אופטימיזציה ל-AI. בקטע הזה מוסבר גם איך להשתמש ב-Terraform כדי להקצות ולנהל את התשתית של הפריסה.
A4X Max
- מפעילים את Cloud Shell. אפשר להשתמש בסביבה אחרת, אבל מומלץ להשתמש ב-Cloud Shell כי יחסי התלות כבר מותקנים מראש ב-Cluster Toolkit. אם אתם לא רוצים להשתמש ב-Cloud Shell, אתם יכולים לפעול לפי ההוראות להתקנת תלות כדי להכין סביבה אחרת.
משכפלים את Cluster Toolkit ממאגר ה-Git:
cd ~ git clone https://github.com/GoogleCloudPlatform/cluster-toolkit.gitמתקינים את Cluster Toolkit:
cd cluster-toolkit && git checkout main && makeיוצרים קטגוריה של Cloud Storage עם ניהול גרסאות מופעל כדי לאחסן את המצב של פריסת Terraform:
gcloud storage buckets create gs://BUCKET_NAME \ --default-storage-class=STANDARD \ --project=PROJECT_ID \ --location=COMPUTE_REGION_TERRAFORM_STATE \ --uniform-bucket-level-access gcloud storage buckets update gs://BUCKET_NAME --versioning
מחליפים את המשתנים הבאים:
-
BUCKET_NAME: השם של הקטגוריה החדשה ב-Cloud Storage, שצריך לעמוד בדרישות למתן שמות לקטגוריות. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
COMPUTE_REGION_TERRAFORM_STATE: האזור של Compute שבו רוצים לאחסן את המצב של פריסת Terraform.
-
ב-
examples/gke-a4x-max-bm/gke-a4x-max-bm-deployment.yamlblueprint ממאגר GitHub, ממלאים את ההגדרות הבאות בקטעיםterraform_backend_defaultsו-varsבהתאם לערכים הספציפיים של הפריסה:-
DEPLOYMENT_NAME: שם ייחודי לפריסה, באורך של 6 עד 30 תווים. אם שם הפריסה לא ייחודי בפרויקט, יצירת האשכול נכשלת. ערך ברירת המחדל הואgke-a4x-max-bm. -
BUCKET_NAME: השם של קטגוריית Cloud Storage שיצרתם בשלב הקודם. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
COMPUTE_REGION: אזור המחשוב של האשכול. -
COMPUTE_ZONE: אזור המחשוב של מאגר הצמתים של מכונות A4X Max. חשוב לשים לב שאזור הזמינות הזה חייב להיות זהה לאזור שבו המכונות זמינות בהזמנה שלכם. -
NODE_COUNT: מספר הצמתים של A4X Max במאגר הצמתים של האשכול, שצריך להיות 18 צמתים או פחות. מומלץ להשתמש ב-18 צמתים כדי לקבל את טופולוגיית ה-GPU של1x72בתת-בלוק אחד באמצעות דומיין NVLink. -
IP_ADDRESS/SUFFIX: טווח כתובות ה-IP שרוצים לאפשר להתחבר לאשכול. בלוק ה-CIDR הזה צריך לכלול את כתובת ה-IP של המכונה שבה רוצים להשתמש כדי להתקשר אל Terraform. מידע נוסף זמין במאמר בנושא איך רשתות מורשות פועלות. בשדה
extended_reservation, משתמשים באחת מהאפשרויות הבאות, בהתאם לשאלה אם רוצים לטרגט בלוקים ספציפיים בהזמנה כשמקצים את מאגר הצמתים:- כדי למקם את מאגר הצמתים בכל מקום בהזמנה, צריך לציין את שם ההזמנה (
RESERVATION_NAME). כדי לטרגט בלוק ספציפי בהזמנה, משתמשים בשמות ההזמנה והבלוק בפורמט הבא:
RESERVATION_NAME/reservationBlocks/BLOCK_NAME
אם אתם לא יודעים אילו בלוקים זמינים בהזמנה שלכם, תוכלו לעיין במאמר בנושא הצגת טופולוגיה של הזמנה.
- כדי למקם את מאגר הצמתים בכל מקום בהזמנה, צריך לציין את שם ההזמנה (
כדי לשנות הגדרות מתקדמות, עורכים את הקובץ
examples/gke-a4x-max-bm/gke-a4x-max-bm.yaml.-
יוצרים Application Default Credentials (ADC) כדי לספק גישה ל-Terraform. אם אתם משתמשים ב-Cloud Shell, אתם צריכים להיכנס ולהגדיר את פרטי הכניסה באמצעות ADC:
gcloud auth application-default loginפורסים את תוכנית ה-Blueprint כדי להקצות את התשתית של GKE באמצעות סוגי מכונות A4X Max:
cd ~/cluster-toolkit ./gcluster deploy -d \ examples/gke-a4x-max-bm/gke-a4x-max-bm-deployment.yaml \ examples/gke-a4x-max-bm/gke-a4x-max-bm.yamlכשמופיעה בקשה, לוחצים על (A)pply (החלה) כדי לפרוס את התוכנית.
- התוכנית יוצרת רשתות VPC, רשת VPC של GPU RDMA, חשבונות שירות, אשכול ומאגר צמתים.
- כדי לתמוך בתבנית העבודה
fio-bench-job-templateבתוכנית הפריסה, נוצרים משאבים שלGoogle Cloud buckets, אחסון ברשת ונפחים קבועים.
A4X
- מפעילים את Cloud Shell. אפשר להשתמש בסביבה אחרת, אבל מומלץ להשתמש ב-Cloud Shell כי יחסי התלות כבר מותקנים מראש ב-Cluster Toolkit. אם אתם לא רוצים להשתמש ב-Cloud Shell, אתם יכולים לפעול לפי ההוראות להתקנת תלות כדי להכין סביבה אחרת.
משכפלים את Cluster Toolkit ממאגר ה-Git:
cd ~ git clone https://github.com/GoogleCloudPlatform/cluster-toolkit.gitמתקינים את Cluster Toolkit:
cd cluster-toolkit && git checkout main && makeיוצרים קטגוריה של Cloud Storage עם ניהול גרסאות מופעל כדי לאחסן את המצב של פריסת Terraform:
gcloud storage buckets create gs://BUCKET_NAME \ --default-storage-class=STANDARD \ --project=PROJECT_ID \ --location=COMPUTE_REGION_TERRAFORM_STATE \ --uniform-bucket-level-access gcloud storage buckets update gs://BUCKET_NAME --versioning
מחליפים את המשתנים הבאים:
-
BUCKET_NAME: השם של הקטגוריה החדשה ב-Cloud Storage, שצריך לעמוד בדרישות למתן שמות לקטגוריות. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
COMPUTE_REGION_TERRAFORM_STATE: האזור של Compute שבו רוצים לאחסן את המצב של פריסת Terraform.
-
ב-
examples/gke-a4x/gke-a4x-deployment.yamlblueprint מתוך מאגר GitHub, ממלאים את ההגדרות הבאות בקטעיםterraform_backend_defaultsו-varsבהתאם לערכים הספציפיים של הפריסה:-
DEPLOYMENT_NAME: שם ייחודי לפריסה, באורך של 6 עד 30 תווים. אם שם הפריסה לא ייחודי בפרויקט, יצירת האשכול נכשלת. ערך ברירת המחדל הואgke-a4x. -
BUCKET_NAME: השם של קטגוריית Cloud Storage שיצרתם בשלב הקודם. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
COMPUTE_REGION: אזור המחשוב של האשכול. -
COMPUTE_ZONE: אזור המחשוב של מאגר הצמתים של מכונות A4X. חשוב לזכור שאזור הזמן הזה צריך להיות זהה לאזור הזמן שבו המכונות זמינות בהזמנה. -
NODE_COUNT: מספר צמתי A4X במאגר הצמתים של האשכול, שחייב להיות 18 צמתים או פחות. מומלץ להשתמש ב-18 צמתים כדי לקבל את טופולוגיית ה-GPU של1x72בתת-בלוק אחד באמצעות דומיין NVLink. -
IP_ADDRESS/SUFFIX: טווח כתובות ה-IP שרוצים לאפשר להתחבר לאשכול. בלוק ה-CIDR הזה צריך לכלול את כתובת ה-IP של המכונה שבה רוצים להשתמש כדי להתקשר אל Terraform. מידע נוסף זמין במאמר בנושא איך רשתות מורשות פועלות. בשדה
extended_reservation, משתמשים באחת מהאפשרויות הבאות, בהתאם לשאלה אם רוצים לטרגט בלוקים ספציפיים בהזמנה כשמקצים את מאגר הצמתים:- כדי למקם את מאגר הצמתים בכל מקום בהזמנה, צריך לציין את שם ההזמנה (
RESERVATION_NAME). כדי לטרגט בלוק ספציפי בהזמנה, משתמשים בשמות ההזמנה והבלוק בפורמט הבא:
RESERVATION_NAME/reservationBlocks/BLOCK_NAME
אם אתם לא יודעים אילו בלוקים זמינים בהזמנה שלכם, תוכלו לעיין במאמר בנושא הצגת טופולוגיה של הזמנה.
- כדי למקם את מאגר הצמתים בכל מקום בהזמנה, צריך לציין את שם ההזמנה (
כדי לשנות הגדרות מתקדמות, עורכים את הקובץ
examples/gke-a4x/gke-a4x.yaml.-
יוצרים Application Default Credentials (ADC) כדי לספק גישה ל-Terraform. אם אתם משתמשים ב-Cloud Shell, אתם צריכים להיכנס ולהגדיר את פרטי הכניסה באמצעות ADC:
gcloud auth application-default loginפורסים את תוכנית ה-Blueprint כדי להקצות את התשתית של GKE באמצעות סוגי מכונות A4X:
cd ~/cluster-toolkit ./gcluster deploy -d \ examples/gke-a4x/gke-a4x-deployment.yaml \ examples/gke-a4x/gke-a4x.yamlכשמופיעה בקשה, לוחצים על (A)pply (החלה) כדי לפרוס את התוכנית.
- התוכנית יוצרת רשתות VPC, רשת VPC של GPU RDMA, חשבונות שירות, אשכול ומאגר צמתים.
- כדי לתמוך בתבנית העבודה
fio-bench-job-templateבתוכנית הפריסה, נוצרים משאבים שלGoogle Cloud buckets, אחסון ברשת ונפחים קבועים.
A4
- מפעילים את Cloud Shell. אפשר להשתמש בסביבה אחרת, אבל מומלץ להשתמש ב-Cloud Shell כי יחסי התלות כבר מותקנים מראש ב-Cluster Toolkit. אם אתם לא רוצים להשתמש ב-Cloud Shell, אתם יכולים לפעול לפי ההוראות להתקנת תלות כדי להכין סביבה אחרת.
משכפלים את Cluster Toolkit ממאגר ה-Git:
cd ~ git clone https://github.com/GoogleCloudPlatform/cluster-toolkit.gitמתקינים את Cluster Toolkit:
cd cluster-toolkit && git checkout main && makeיוצרים קטגוריה של Cloud Storage עם ניהול גרסאות מופעל כדי לאחסן את המצב של פריסת Terraform:
gcloud storage buckets create gs://BUCKET_NAME \ --default-storage-class=STANDARD \ --project=PROJECT_ID \ --location=COMPUTE_REGION_TERRAFORM_STATE \ --uniform-bucket-level-access gcloud storage buckets update gs://BUCKET_NAME --versioning
מחליפים את המשתנים הבאים:
-
BUCKET_NAME: השם של הקטגוריה החדשה ב-Cloud Storage, שצריך לעמוד בדרישות למתן שמות לקטגוריות. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
COMPUTE_REGION_TERRAFORM_STATE: האזור של Compute שבו רוצים לאחסן את המצב של פריסת Terraform.
-
הקבצים שצריך לערוך כדי ליצור אשכול תלויים באפשרות הצריכה שבה אתם משתמשים לפריסה. בוחרים את הכרטיסייה שמתאימה למודל ההקצאה של אפשרות הצריכה.
הזמנה בלבד
ב-
examples/gke-a4/gke-a4-deployment.yamlblueprint מתוך מאגר GitHub, ממלאים את ההגדרות הבאות בקטעיםterraform_backend_defaultsו-varsבהתאם לערכים הספציפיים של הפריסה:-
DEPLOYMENT_NAME: שם ייחודי לפריסה, באורך של 6 עד 30 תווים. אם שם הפריסה לא ייחודי בפרויקט, יצירת האשכול נכשלת. ערך ברירת המחדל הואgke-a4. -
BUCKET_NAME: השם של קטגוריית Cloud Storage שיצרתם בשלב הקודם. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
COMPUTE_REGION: אזור המחשוב של האשכול. -
COMPUTE_ZONE: אזור המחשוב של מאגר הצמתים של מכונות A4. חשוב לזכור שאזור הזמן הזה צריך להיות זהה לאזור הזמן שבו המכונות זמינות בהזמנה. -
NODE_COUNT: מספר הצמתים מסוג A4 באשכול. -
IP_ADDRESS/SUFFIX: טווח כתובות ה-IP שרוצים לאפשר להתחבר לאשכול. בלוק ה-CIDR הזה צריך לכלול את כתובת ה-IP של המכונה שבה רוצים להשתמש כדי להפעיל את Terraform. מידע נוסף זמין במאמר בנושא איך רשתות מורשות פועלות. בשדה
reservation, משתמשים באחת מהאפשרויות הבאות, בהתאם לשאלה אם רוצים לטרגט בלוקים ספציפיים בהזמנה כשמקצים את מאגר הצמתים:- כדי למקם את מאגר הצמתים בכל מקום בהזמנה, צריך לציין את שם ההזמנה (
RESERVATION_NAME). כדי לטרגט בלוק ספציפי בהזמנה, משתמשים בשמות ההזמנה והבלוק בפורמט הבא:
RESERVATION_NAME/reservationBlocks/BLOCK_NAME
אם אתם לא יודעים אילו בלוקים זמינים בהזמנה שלכם, תוכלו לעיין במאמר בנושא הצגת טופולוגיה של הזמנה.
- כדי למקם את מאגר הצמתים בכל מקום בהזמנה, צריך לציין את שם ההזמנה (
כדי לשנות הגדרות מתקדמות, עורכים את
examples/gke-a4/gke-a4.yaml.Flex-start
ב-
examples/gke-a4/gke-a4-deployment.yamlblueprint מתוך מאגר GitHub, ממלאים את ההגדרות הבאות בקטעיםterraform_backend_defaultsו-varsבהתאם לערכים הספציפיים של הפריסה:-
DEPLOYMENT_NAME: שם ייחודי לפריסה, באורך של 6 עד 30 תווים. אם שם הפריסה לא ייחודי בתוך פרויקט, יצירת האשכול נכשלת. ערך ברירת המחדל הואgke-a4. -
BUCKET_NAME: השם של קטגוריית Cloud Storage שיצרתם בשלב הקודם. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
COMPUTE_REGION: אזור המחשוב של האשכול. -
COMPUTE_ZONE: אזור המחשוב של מאגר הצמתים של מכונות A4. - הסרה של
static_node_count. -
IP_ADDRESS/SUFFIX: טווח כתובות ה-IP שרוצים לאפשר להתחבר לאשכול. בלוק ה-CIDR הזה חייב לכלול את כתובת ה-IP של המכונה שבה רוצים להשתמש כדי להפעיל את Terraform. מידע נוסף זמין במאמר בנושא איך פועלות רשתות מורשות. - מסירים את השדה
reservationומחליפים אותו בשדהenable_flex_start: true. מוסיפים בשורה הבאהenable_queued_provisioning: trueאם רוצים להשתמש גם בהקצאת הרשאות בתור. מידע נוסף זמין במאמר בנושא שימוש במאגרי צמתים עם flex-start עם הקצאת משאבים בתור.
-
בתוכנית הבסיסית
examples/gke-a4/gke-a4.yamlממאגר GitHub, מבצעים את השינויים הבאים:- בבלוק
vars, מסירים אתstatic_node_count. - בבלוק
vars, מוודאים שהמספרversion_prefixהוא"1.32."ומעלה. כדי להשתמש בהפעלה גמישה ב-GKE, האשכול צריך להיות מגרסה 1.32.2-gke.1652000 ואילך. - בבלוק
vars, מחליפים את כל הבלוקreservation(כולל השורהreservationעצמה) ב-enable_flex_start: true, ואם רוצים, ב-enable_queued_provisioning: true. - בבלוק
vars, אם לא נדרשת הקצאת משאבים בתור, מסירים את השורה הבאה:kueue_configuration_path: $(ghpc_stage("./kueue-configuration.yaml.tftpl")). - בקטע
id: a4-pool, מסירים את השורה הבאה:static_node_count: $(vars.static_node_count). בקטע
id: a4-pool, מסירים את החסימה שלreservation_affinity. מחליפים את הבלוק הזה בשורות הבאות:enable_flex_start: $(vars.enable_flex_start)auto_repair: false- אם רוצים להפעיל הקצאת הרשאות בתור, מוסיפים את השורות הנוספות הבאות:
enable_queued_provisioning: $(vars.enable_queued_provisioning)autoscaling_total_min_nodes: 0
בקטע
id: workload-manager-install, מסירים את הבלוק הבא:kueue: install: true config_path: $(vars.kueue_configuration_path) config_template_vars: num_gpus: $(a3-ultragpu-pool.static_gpu_count) accelerator_type: $(vars.accelerator_type)כדי להגדיר הקצאת משאבים בתור עם התחלה גמישה:
מוסיפים את
gpu_nominal_quota: NOMINAL_QUOTAלבלוקvars. הערךgpu_nominal_quotaמשמש להגדרתnominalQuotaשל המעבדים הגרפיים במפרטClusterQueue(בשלב הבא מוסבר איך מגדירים אתClusterQueue). בדוגמה הזו,ClusterQueueמאפשר עומסי עבודה רק אם סכום הבקשות למעבדים הגרפיים קטן מהערךNOMINAL_QUOTAאו שווה לו. מידע נוסף עלClusterQueueזמין במסמך Kueue בנושא תור אשכול.מעדכנים את הבלוק
kueueכך:kueue: install: true config_path: $(vars.kueue_configuration_path) config_template_vars: num_gpus: $(vars.gpu_nominal_quota)מחליפים את התוכן של הקובץ
kueue-configuration.yaml.tftplבתוכן הבא:apiVersion: kueue.x-k8s.io/v1beta1 kind: ResourceFlavor metadata: name: "default-flavor" --- apiVersion: kueue.x-k8s.io/v1beta1 kind: AdmissionCheck metadata: name: dws-prov spec: controllerName: kueue.x-k8s.io/provisioning-request parameters: apiGroup: kueue.x-k8s.io kind: ProvisioningRequestConfig name: dws-config --- apiVersion: kueue.x-k8s.io/v1beta1 kind: ProvisioningRequestConfig metadata: name: dws-config spec: provisioningClassName: queued-provisioning.gke.io managedResources: - nvidia.com/gpu --- apiVersion: kueue.x-k8s.io/v1beta1 kind: ClusterQueue metadata: name: "dws-cluster-queue" spec: namespaceSelector: {} resourceGroups: - coveredResources: ["nvidia.com/gpu"] flavors: - name: "default-flavor" resources: - name: "nvidia.com/gpu" nominalQuota: ${num_gpus} admissionChecks: - dws-prov --- apiVersion: kueue.x-k8s.io/v1beta1 kind: LocalQueue metadata: namespace: "default" name: "dws-local-queue" spec: clusterQueue: "dws-cluster-queue" ---
בקטע
id: job-template, מחליפים את המשתנהnode_countב-2.
- בבלוק
כרטיס Spot
ב-
examples/gke-a4/gke-a4-deployment.yamlblueprint מתוך מאגר GitHub, ממלאים את ההגדרות הבאות בקטעיםterraform_backend_defaultsו-varsבהתאם לערכים הספציפיים של הפריסה:-
DEPLOYMENT_NAME: שם ייחודי לפריסה, באורך של 6 עד 30 תווים. אם שם הפריסה לא ייחודי בתוך פרויקט, יצירת האשכול נכשלת. ערך ברירת המחדל הואgke-a4. -
BUCKET_NAME: השם של קטגוריית Cloud Storage שיצרתם בשלב הקודם. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
COMPUTE_REGION: אזור המחשוב של האשכול. -
COMPUTE_ZONE: אזור המחשוב של מאגר הצמתים של מכונות A4. -
STATIC_NODE_COUNT: מספר הצמתים מסוג A4 באשכול. -
IP_ADDRESS/SUFFIX: טווח כתובות ה-IP שרוצים לאפשר להתחבר לאשכול. בלוק ה-CIDR הזה חייב לכלול את כתובת ה-IP של המכונה שבה רוצים להשתמש כדי להפעיל את Terraform. מידע נוסף זמין במאמר בנושא איך פועלות רשתות מורשות. - מחליפים את כל הבלוק
reservation(כולל השורהreservationעצמה) ב-spot: true.
-
בתוכנית הבסיסית
examples/gke-a4/gke-a4.yamlממאגר GitHub, מבצעים את השינויים הבאים:- בבלוק
vars, מחליפים את כל הבלוקreservation(כולל השורהreservationעצמה) ב-spot: true. בקטע
id: a4-pool, מסירים את החסימה שלreservation_affinity. מחליפים את הבלוק הזה בשורה הבאה:spot: $(vars.spot)
- בבלוק
-
יוצרים Application Default Credentials (ADC) כדי לספק גישה ל-Terraform. אם אתם משתמשים ב-Cloud Shell, אתם צריכים להיכנס ולהגדיר את פרטי הכניסה באמצעות ADC:
gcloud auth application-default loginפורסים את תוכנית ה-Blueprint כדי להקצות את התשתית של GKE באמצעות סוגי מכונות A4:
cd ~/cluster-toolkit ./gcluster deploy -d \ examples/gke-a4/gke-a4-deployment.yaml \ examples/gke-a4/gke-a4.yamlכשמופיעה בקשה, לוחצים על (A)pply (החלה) כדי לפרוס את התוכנית.
- התוכנית יוצרת רשתות VPC, רשת VPC של GPU RDMA, חשבונות שירות, אשכול ומאגר צמתים.
- כדי לתמוך בתבנית העבודה
fio-bench-job-templateבתוכנית הפריסה, נוצרים משאבים שלGoogle Cloud buckets, אחסון ברשת ונפחים קבועים.
A3 Ultra
- מפעילים את Cloud Shell. אפשר להשתמש בסביבה אחרת, אבל מומלץ להשתמש ב-Cloud Shell כי יחסי התלות כבר מותקנים מראש ב-Cluster Toolkit. אם אתם לא רוצים להשתמש ב-Cloud Shell, אתם יכולים לפעול לפי ההוראות להתקנת תלות כדי להכין סביבה אחרת.
משכפלים את Cluster Toolkit ממאגר ה-Git:
cd ~ git clone https://github.com/GoogleCloudPlatform/cluster-toolkit.gitמתקינים את Cluster Toolkit:
cd cluster-toolkit && git checkout main && makeיוצרים קטגוריה של Cloud Storage עם ניהול גרסאות מופעל כדי לאחסן את המצב של פריסת Terraform:
gcloud storage buckets create gs://BUCKET_NAME \ --default-storage-class=STANDARD \ --project=PROJECT_ID \ --location=COMPUTE_REGION_TERRAFORM_STATE \ --uniform-bucket-level-access gcloud storage buckets update gs://BUCKET_NAME --versioning
מחליפים את המשתנים הבאים:
-
BUCKET_NAME: השם של הקטגוריה החדשה ב-Cloud Storage, שצריך לעמוד בדרישות למתן שמות לקטגוריות. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
COMPUTE_REGION_TERRAFORM_STATE: האזור של Compute שבו רוצים לאחסן את המצב של פריסת Terraform.
-
הקבצים שצריך לערוך כדי ליצור אשכול תלויים באפשרות הצריכה שבה אתם משתמשים לפריסה. בוחרים את הכרטיסייה שמתאימה למודל ההקצאה של אפשרות הצריכה.
הזמנה בלבד
ב-
examples/gke-a3-ultragpu/gke-a3-ultragpu-deployment.yamlblueprint ממאגר GitHub, מחליפים את המשתנים הבאים בקטעיםterraform_backend_defaultsו-varsכך שיתאימו לערכים הספציפיים של הפריסה:-
DEPLOYMENT_NAME: שם ייחודי לפריסה, באורך של 6 עד 30 תווים. אם שם הפריסה לא ייחודי בפרויקט, יצירת האשכול נכשלת. -
BUCKET_NAME: השם של קטגוריית Cloud Storage שיצרתם בשלב הקודם. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
COMPUTE_REGION: אזור המחשוב של האשכול. -
COMPUTE_ZONE: אזור החישוב של מאגר הצמתים של מכונות A3 Ultra. חשוב לזכור שאזור הזמן הזה צריך להיות זהה לאזור הזמן שבו המכונות זמינות בהזמנה. -
NODE_COUNT: מספר הצמתים של A3 Ultra באשכול. -
IP_ADDRESS/SUFFIX: טווח כתובות ה-IP שרוצים לאפשר להתחבר לאשכול. בלוק ה-CIDR הזה צריך לכלול את כתובת ה-IP של המכונה שבה רוצים להשתמש כדי להפעיל את Terraform. מידע נוסף זמין במאמר בנושא איך רשתות מורשות פועלות. בשדה
reservation, משתמשים באחת מהאפשרויות הבאות, בהתאם לשאלה אם רוצים לטרגט בלוקים ספציפיים בהזמנה כשמקצים את מאגר הצמתים:- כדי למקם את מאגר הצמתים בכל מקום בהזמנה, צריך לציין את שם ההזמנה (
RESERVATION_NAME). כדי לטרגט בלוק ספציפי בהזמנה, משתמשים בשמות ההזמנה והבלוק בפורמט הבא:
RESERVATION_NAME/reservationBlocks/BLOCK_NAME
אם אתם לא יודעים אילו בלוקים זמינים בהזמנה שלכם, תוכלו לעיין במאמר בנושא הצגת טופולוגיה של הזמנה.
- כדי למקם את מאגר הצמתים בכל מקום בהזמנה, צריך לציין את שם ההזמנה (
כדי לשנות הגדרות מתקדמות, עורכים את
examples/gke-a3-ultragpu/gke-a3-ultragpu.yaml.Flex-start
ב-
examples/gke-a3-ultragpu/gke-a3-ultragpu-deployment.yamlblueprint ממאגר GitHub, מחליפים את המשתנים הבאים בקטעיםterraform_backend_defaultsו-varsכך שיתאימו לערכים הספציפיים של הפריסה:-
DEPLOYMENT_NAME: שם ייחודי לפריסה, באורך של 6 עד 30 תווים. אם שם הפריסה לא ייחודי בתוך פרויקט, יצירת האשכול נכשלת. -
BUCKET_NAME: השם של קטגוריית Cloud Storage שיצרתם בשלב הקודם. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
COMPUTE_REGION: אזור המחשוב של האשכול. -
COMPUTE_ZONE: אזור החישוב של מאגר הצמתים של מכונות A3 Ultra. - הסרה של
static_node_count. -
IP_ADDRESS/SUFFIX: טווח כתובות ה-IP שרוצים לאפשר להתחבר לאשכול. בלוק ה-CIDR הזה חייב לכלול את כתובת ה-IP של המכונה שבה רוצים להשתמש כדי להפעיל את Terraform. מידע נוסף זמין במאמר בנושא איך רשתות מורשות פועלות. - מסירים את השדה
reservationומחליפים אותו בשדהenable_flex_start: true. מוסיפים בשורה הבאהenable_queued_provisioning: trueאם רוצים להשתמש גם בהקצאת הרשאות בתור. מידע נוסף זמין במאמר בנושא שימוש במאגרי צמתים עם flex-start עם הקצאת משאבים בתור.
-
ב-
examples/gke-a3-ultragpu/gke-a3-ultragpu.yamlתוכנית האב ממאגר GitHub, מבצעים את השינויים הבאים:- בבלוק
vars, מסירים אתstatic_node_count. - בבלוק
vars, מעדכנים את המספרversion_prefixל-"1.32."ומעלה. כדי להשתמש בהפעלה גמישה ב-GKE, האשכול צריך להיות מגרסה 1.32.2-gke.1652000 ואילך. - בבלוק
vars, מחליפים את כל הבלוקreservation(כולל השורהreservationעצמה) ב-enable_flex_start: true, ואם רוצים, ב-enable_queued_provisioning: true. - בבלוק
vars, מסירים את השורה הבאה:kueue_configuration_path: $(ghpc_stage("./kueue-configuration.yaml.tftpl")). - בקטע
id: a3-ultragpu-pool, מסירים את השורה הבאה:static_node_count: $(vars.static_node_count). בקטע
id: a3-ultragpu-pool, מסירים את החסימה שלreservation_affinity. מחליפים את הבלוק הזה בשורות הבאות:enable_flex_start: $(vars.enable_flex_start)auto_repair: false- אם רוצים להפעיל הקצאת הרשאות בתור, מוסיפים את השורות הנוספות הבאות:
enable_queued_provisioning: $(vars.enable_queued_provisioning)autoscaling_total_min_nodes: 0
בקטע
id: workload-manager-install, מסירים את הבלוק הבא:config_path: $(vars.kueue_configuration_path) config_template_vars: num_gpus: $(a4-pool.static_gpu_count) accelerator_type: $(vars.accelerator_type)כדי להגדיר הקצאת משאבים בתור עם התחלה גמישה, פועלים לפי שלושת השלבים הבאים:
מוסיפים את
gpu_nominal_quota: NOMINAL_QUOTAלבלוקvars. הערךgpu_nominal_quotaמשמש להגדרתnominalQuotaשל מעבדים גרפיים במפרטClusterQueue. בדוגמה הזו,ClusterQueueמאפשר רק לעומסי עבודה להיכנס אם סכום בקשות ה-GPU קטן מהערךNOMINAL_QUOTAאו שווה לו. מידע נוסף עלClusterQueueזמין במסמך Kueue בנושא תור אשכול.מעדכנים את הבלוק
kueueכך:kueue: install: true config_path: $(vars.kueue_configuration_path) config_template_vars: num_gpus: $(vars.gpu_nominal_quota)מחליפים את התוכן של הקובץ
kueue-configuration.yaml.tftplבתוכן הבא:apiVersion: kueue.x-k8s.io/v1beta1 kind: ResourceFlavor metadata: name: "default-flavor" --- apiVersion: kueue.x-k8s.io/v1beta1 kind: AdmissionCheck metadata: name: dws-prov spec: controllerName: kueue.x-k8s.io/provisioning-request parameters: apiGroup: kueue.x-k8s.io kind: ProvisioningRequestConfig name: dws-config --- apiVersion: kueue.x-k8s.io/v1beta1 kind: ProvisioningRequestConfig metadata: name: dws-config spec: provisioningClassName: queued-provisioning.gke.io managedResources: - nvidia.com/gpu --- apiVersion: kueue.x-k8s.io/v1beta1 kind: ClusterQueue metadata: name: "dws-cluster-queue" spec: namespaceSelector: {} resourceGroups: - coveredResources: ["nvidia.com/gpu"] flavors: - name: "default-flavor" resources: - name: "nvidia.com/gpu" nominalQuota: ${num_gpus} admissionChecks: - dws-prov --- apiVersion: kueue.x-k8s.io/v1beta1 kind: LocalQueue metadata: namespace: "default" name: "dws-local-queue" spec: clusterQueue: "dws-cluster-queue" ---
בשדה
id: job-template, מחליפים את המשתנהnode_countב-2.
- בבלוק
כרטיס Spot
ב
examples/gke-a3-ultragpu/gke-a3-ultragpu-deployment.yamlהתוכנית ממאגר GitHub, ממלאים את ההגדרות הבאות בקטעיםterraform_backend_defaultsו-varsכך שיתאימו לערכים הספציפיים של הפריסה:-
DEPLOYMENT_NAME: שם ייחודי לפריסה, באורך של 6 עד 30 תווים. אם שם הפריסה לא ייחודי בתוך פרויקט, יצירת האשכול נכשלת. -
BUCKET_NAME: השם של קטגוריית Cloud Storage שיצרתם בשלב הקודם. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
COMPUTE_REGION: אזור המחשוב של האשכול. -
COMPUTE_ZONE: אזור החישוב של מאגר הצמתים של מכונות A3 Ultra. -
STATIC_NODE_COUNT: מספר הצמתים של A3 Ultra באשכול. -
IP_ADDRESS/SUFFIX: טווח כתובות ה-IP שרוצים לאפשר להתחבר לאשכול. בלוק ה-CIDR הזה חייב לכלול את כתובת ה-IP של המכונה שבה רוצים להשתמש כדי להפעיל את Terraform. מידע נוסף זמין במאמר בנושא איך פועלות רשתות מורשות. - מחליפים את כל הבלוק
reservation(כולל השורהreservationעצמה) ב-spot: true.
-
בתוכנית הבסיסית
examples/gke-a3-ultragpu/gke-a3-ultragpu.yamlממאגר GitHub, מבצעים את השינויים הבאים:- בבלוק
vars, מחליפים את כל הבלוקreservation(כולל השורהreservationעצמה) ב-spot: true. בקטע
id: a3-ultragpu-pool, מסירים את החסימה שלreservation_affinity. מחליפים את הבלוק הזה בשורה הבאה:spot: $(vars.spot)
- בבלוק
-
יוצרים Application Default Credentials (ADC) כדי לספק גישה ל-Terraform. אם אתם משתמשים ב-Cloud Shell, אתם צריכים להיכנס ולהגדיר את פרטי הכניסה באמצעות ADC:
gcloud auth application-default loginפורסים את תוכנית ה-blueprint כדי להקצות את התשתית של GKE באמצעות סוגי מכונות A3 Ultra:
cd ~/cluster-toolkit ./gcluster deploy -d \ examples/gke-a3-ultragpu/gke-a3-ultragpu-deployment.yaml \ examples/gke-a3-ultragpu/gke-a3-ultragpu.yamlכשמופיעה בקשה, לוחצים על (A)pply (החלה) כדי לפרוס את התוכנית.
- התוכנית יוצרת רשתות VPC, רשת VPC של GPU RDMA, חשבונות שירות, אשכול ומאגר צמתים.
- כדי לתמוך בתבנית העבודה
fio-bench-job-templateבתוכנית הפריסה, נוצרים משאבים שלGoogle Cloud buckets, אחסון ברשת ונפחים קבועים.
A3 Mega
- מפעילים את Cloud Shell. אפשר להשתמש בסביבה אחרת, אבל מומלץ להשתמש ב-Cloud Shell כי יחסי התלות כבר מותקנים מראש ב-Cluster Toolkit. אם אתם לא רוצים להשתמש ב-Cloud Shell, אתם יכולים להכין סביבה אחרת לפי ההוראות להתקנת תלות.
משכפלים את Cluster Toolkit ממאגר Git:
cd ~ git clone https://github.com/GoogleCloudPlatform/cluster-toolkit.gitמתקינים את Cluster Toolkit:
cd cluster-toolkit && git checkout main && makeיוצרים קטגוריה של Cloud Storage עם ניהול גרסאות מופעל כדי לאחסן את המצב של פריסת Terraform:
gcloud storage buckets create gs://BUCKET_NAME \ --default-storage-class=STANDARD \ --project=PROJECT_ID \ --location=COMPUTE_REGION_TERRAFORM_STATE \ --uniform-bucket-level-access gcloud storage buckets update gs://BUCKET_NAME --versioning
מחליפים את המשתנים הבאים:
-
BUCKET_NAME: השם של הקטגוריה החדשה ב-Cloud Storage, שצריך לעמוד בדרישות למתן שמות לקטגוריות. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
COMPUTE_REGION_TERRAFORM_STATE: האזור של Compute שבו רוצים לאחסן את המצב של פריסת Terraform.
-
הקבצים שצריך לערוך כדי ליצור אשכול תלויים באפשרות הצריכה שבה אתם משתמשים לפריסה. בוחרים את הכרטיסייה שמתאימה למודל ההקצאה של אפשרות הצריכה.
הזמנה בלבד
ב-
examples/gke-a3-megagpu/gke-a3-megagpu-deployment.yamlblueprint ממאגר GitHub, מחליפים את המשתנים הבאים בקטעיםterraform_backend_defaultsו-varsכך שיתאימו לערכים הספציפיים של הפריסה:-
DEPLOYMENT_NAME: שם ייחודי לפריסה, באורך של 6 עד 30 תווים. אם שם הפריסה לא ייחודי בפרויקט, יצירת האשכול נכשלת. -
BUCKET_NAME: השם של קטגוריית Cloud Storage שיצרתם בשלב הקודם. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
COMPUTE_REGION: אזור המחשוב של האשכול. -
COMPUTE_ZONE: אזור המחשוב של מאגר הצמתים של מכונות A3 Mega. שימו לב שאזור הזמינות הזה צריך להיות זהה לאזור הזמינות שבו המכונות זמינות בהזמנה שלכם. -
NODE_COUNT: מספר הצמתים מסוג A3 Mega באשכול. -
IP_ADDRESS/SUFFIX: טווח כתובות ה-IP שרוצים לאפשר להתחבר לאשכול. בלוק ה-CIDR הזה צריך לכלול את כתובת ה-IP של המכונה שבה רוצים להשתמש כדי להפעיל את Terraform. מידע נוסף זמין במאמר בנושא איך רשתות מורשות פועלות. בשדה
reservation, משתמשים באחת מהאפשרויות הבאות, בהתאם לשאלה אם רוצים לטרגט בלוקים ספציפיים בהזמנה כשמקצים את מאגר הצמתים:- כדי למקם את מאגר הצמתים בכל מקום בהזמנה, צריך לציין את שם ההזמנה (
RESERVATION_NAME). כדי לטרגט בלוק ספציפי בהזמנה, משתמשים בשמות ההזמנה והבלוק בפורמט הבא:
RESERVATION_NAME/reservationBlocks/BLOCK_NAME
אם אתם לא יודעים אילו בלוקים זמינים בהזמנה שלכם, תוכלו לעיין במאמר בנושא הצגת הטופולוגיה של הזמנה.
- כדי למקם את מאגר הצמתים בכל מקום בהזמנה, צריך לציין את שם ההזמנה (
כדי לשנות הגדרות מתקדמות, עורכים את
examples/gke-a3-megagpu/gke-a3-megagpu.yaml.Flex-start
ב-
examples/gke-a3-megagpu/gke-a3-megagpu-deployment.yamlblueprint ממאגר GitHub, מחליפים את המשתנים הבאים בקטעיםvarsכך שיתאימו לערכים הספציפיים של הפריסה:-
DEPLOYMENT_NAME: שם ייחודי לפריסה, באורך של 6 עד 30 תווים. אם שם הפריסה לא ייחודי בתוך פרויקט, יצירת האשכול נכשלת. -
BUCKET_NAME: השם של קטגוריית Cloud Storage שיצרתם בשלב הקודם. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
COMPUTE_REGION: אזור המחשוב של האשכול. -
COMPUTE_ZONE: אזור המחשוב של מאגר הצמתים של מכונות A3 Mega. - הסרה של
static_node_count. -
IP_ADDRESS/SUFFIX: טווח כתובות ה-IP שרוצים לאפשר להתחבר לאשכול. בלוק ה-CIDR הזה חייב לכלול את כתובת ה-IP של המכונה שבה רוצים להשתמש כדי להפעיל את Terraform. מידע נוסף זמין במאמר בנושא איך רשתות מורשות פועלות. - מסירים את השדה
reservationומחליפים אותו בשדהenable_flex_start: true. אם רוצים להשתמש גם בהקצאת הרשאות בתור, מוסיפים אתenable_queued_provisioning: trueלשורה הבאה. מידע נוסף זמין במאמר בנושא שימוש במאגרי צמתים עם flex-start עם הקצאת משאבים בתור.
-
בתוכנית הבסיסית
examples/gke-a3-megagpu/gke-a3-megagpu.yamlממאגר GitHub, מבצעים את השינויים הבאים:- בבלוק
vars, מסירים אתstatic_node_count. - בבלוק
vars, מעדכנים את המספרversion_prefixל-"1.32."ומעלה. כדי להשתמש בהפעלה גמישה ב-GKE, האשכול צריך להיות מגרסה 1.32.2-gke.1652000 ואילך. - בבלוק
vars, מחליפים את כל הבלוקreservation(כולל השורהreservationעצמה) ב-enable_flex_start: true, ואם רוצים, ב-enable_queued_provisioning: true. - בבלוק
vars, מסירים את השורה הבאה:kueue_configuration_path: $(ghpc_stage("./kueue-configuration.yaml.tftpl")). - בקטע
id: a3_megagpu_pool, מסירים את השורה הבאה:static_node_count: $(vars.static_node_count). בקטע
id: a3_megagpu_pool, מסירים את החסימה שלreservation_affinity. מחליפים את הבלוק הזה בשורות הבאות:enable_flex_start: $(vars.enable_flex_start)auto_repair: false- אם רוצים להפעיל הקצאת הרשאות בתור, מוסיפים את השורות הנוספות הבאות:
enable_queued_provisioning: $(vars.enable_queued_provisioning)autoscaling_total_min_nodes: 0
בקטע
id: workload_manager_install, מסירים את הבלוק הבא:config_path: $(vars.kueue_configuration_path) config_template_vars: num_gpus: $(a3_megagpu_pool.static_gpu_count) accelerator_type: $(vars.accelerator_type)כדי להגדיר הקצאת משאבים בתור עם התחלה גמישה, פועלים לפי שלושת השלבים הבאים:
מוסיפים את
gpu_nominal_quota: NOMINAL_QUOTAלבלוקvars. הערךgpu_nominal_quotaמשמש להגדרתnominalQuotaשל מעבדים גרפיים במפרטClusterQueue. בדוגמה הזו,ClusterQueueמאפשר רק לעומסי עבודה להיכנס אם סכום בקשות ה-GPU קטן מהערךNOMINAL_QUOTAאו שווה לו. מידע נוסף עלClusterQueueזמין במסמך Kueue בנושא תור אשכול.מעדכנים את הבלוק
kueueכך:kueue: install: true config_path: $(vars.kueue_configuration_path) config_template_vars: num_gpus: $(vars.gpu_nominal_quota)מחליפים את התוכן של הקובץ
kueue-configuration.yaml.tftplבתוכן הבא:apiVersion: kueue.x-k8s.io/v1beta1 kind: ResourceFlavor metadata: name: "default-flavor" --- apiVersion: kueue.x-k8s.io/v1beta1 kind: AdmissionCheck metadata: name: dws-prov spec: controllerName: kueue.x-k8s.io/provisioning-request parameters: apiGroup: kueue.x-k8s.io kind: ProvisioningRequestConfig name: dws-config --- apiVersion: kueue.x-k8s.io/v1beta1 kind: ProvisioningRequestConfig metadata: name: dws-config spec: provisioningClassName: queued-provisioning.gke.io managedResources: - nvidia.com/gpu --- apiVersion: kueue.x-k8s.io/v1beta1 kind: ClusterQueue metadata: name: "dws-cluster-queue" spec: namespaceSelector: {} resourceGroups: - coveredResources: ["nvidia.com/gpu"] flavors: - name: "default-flavor" resources: - name: "nvidia.com/gpu" nominalQuota: ${num_gpus} admissionChecks: - dws-prov --- apiVersion: kueue.x-k8s.io/v1beta1 kind: LocalQueue metadata: namespace: "default" name: "dws-local-queue" spec: clusterQueue: "dws-cluster-queue" ---
בשדה
id: job-template, הערך של המשתנהnode_countעם2.
- בבלוק
כרטיס Spot
- ב
examples/gke-a3-megagpu/gke-a3-megagpu-deployment.yamlתוכנית הבסיס ממאגר GitHub, ממלאים את ההגדרות הבאות בקטעיםvarsבהתאם לערכים הספציפיים של הפריסה:-
DEPLOYMENT_NAME: שם ייחודי לפריסה, באורך של 6 עד 30 תווים. אם שם הפריסה לא ייחודי בתוך פרויקט, יצירת האשכול נכשלת. -
BUCKET_NAME: השם של קטגוריית Cloud Storage שיצרתם בשלב הקודם. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
COMPUTE_REGION: אזור המחשוב של האשכול. -
COMPUTE_ZONE: אזור המחשוב של מאגר הצמתים של מכונות A3 Mega. -
STATIC_NODE_COUNT: מספר צמתי A3 Mega באשכול. -
IP_ADDRESS/SUFFIX: כתובת ה-IP -
IP_ADDRESS/SUFFIX: טווח כתובות ה-IP שרוצים לאפשר להתחבר לאשכול. בלוק ה-CIDR הזה חייב לכלול את כתובת ה-IP של המכונה שבה רוצים להשתמש כדי להפעיל את Terraform. מידע נוסף זמין במאמר בנושא איך פועלות רשתות מורשות. - מחליפים את כל הבלוק
reservation(כולל השורהreservationעצמה) ב-provisioning_model: SPOT.
-
בתוכנית
examples/gke-a3-megagpu/gke-a3-megagpu.yamlממאגר GitHub, מבצעים את השינויים הבאים:- בבלוק
vars, מחליפים את כל הבלוקreservation(כולל השורהreservationעצמה) ב-spot: true. בקטע
id: a3_megagpu_pool, מסירים את החסימה שלreservation_affinity. מחליפים את הבלוק הזה בשורה הבאה:spot: $(vars.spot)
- בבלוק
-
אופציונלי: אפשר להפעיל את Cluster Health Scanner (CHS) באשכול. CHS בודק את תקינות אשכולות ה-GPU על ידי הרצת בדיקות כדי לוודא שהאשכולות מוכנים להרצת עומסי העבודה. כדי להפעיל את CHS, מבצעים את השינויים הבאים בקובץ
examples/gke-a3-megagpu/gke-a3-megagpu-deployment.yaml:בבלוק
vars, מגדירים את השדהenable_periodic_health_checksלערךtrue.כברירת מחדל, בדיקות תקינות מופעלות בכל יום ראשון בשעה 00:00 (שעון החוף המערבי). כדי לשנות את ההגדרה הזו, בבלוק
vars, מגדירים את השדהhealth_check_scheduleלערך מתאים בפורמט cron.
קביעת לוח זמנים בפורמט cron:none * * * * * # | | | | | # | | | | day of the week (0-6) (Sunday to Saturday) # | | | month (1-12) # | | day of the month (1-31) # | hour (0-23) # minute (0-59)
יוצרים Application Default Credentials (ADC) כדי לספק גישה ל-Terraform. אם אתם משתמשים ב-Cloud Shell, אתם יכולים להריץ את הפקודה הבאה:
gcloud auth application-default loginפורסים את תוכנית ה-Blueprint כדי להקצות את התשתית של GKE באמצעות סוגי מכונות A3 Mega:
cd ~/cluster-toolkit ./gcluster deploy -d \ examples/gke-a3-megagpu/gke-a3-megagpu-deployment.yaml \ examples/gke-a3-megagpu/gke-a3-megagpu.yamlכשמופיעה בקשה, לוחצים על (A)pply (החלה) כדי לפרוס את התוכנית.
- תוכנית האב יוצרת רשתות VPC, רשת VPC של GPU RDMA, חשבונות שירות, אשכול ומאגר צמתים.
- כדי לתמוך בתבנית העבודה
fio-bench-job-templateבתוכנית הפריסה, נוצרים משאבים שלGoogle Cloud buckets, אחסון ברשת ונפחים קבועים.
יצירת אשכול והרצת עומסי עבודה באמצעות XPK
ערכת עיבוד מואץ (XPK) מאפשרת הקצאה מהירה של אשכולות ושימוש בהם. XPK יוצרת תשתית מוגדרת מראש שעברה אופטימיזציה לאימון, ומתאימה במיוחד למקרים שבהם ההתמקדות העיקרית היא בהרצת עומסי עבודה.
יצירת אשכול והרצת עומסי עבודה עם מכונות וירטואליות מסוג A3 Ultra באמצעות XPK:
- מתקינים את הכלים הנדרשים כדי לעמוד בדרישות המוקדמות של XPK.
- מעתיקים את מספר הגרסה של הגרסה האחרונה עם התג של XPK, למשל,
v0.8.0. בפקודה הבאה, מחליפים את
XPK_TAGבמספר הגרסה העדכנית של XPK. פותחים חלון של Shell במחשב Linux ומזינים את הפקודות הבאות כדי לשכפל את XPK ממאגר Git ולהתקין את החבילות הנדרשות:
## Setup virtual environment. VENV_DIR=~/venvp3 python3 -m venv $VENV_DIR source $VENV_DIR/bin/activate ## Clone the repository. git clone --branch XPK_TAG https://github.com/google/xpk.git cd xpk ## Install required packages make install && export PATH=$PATH:$PWD/binיצירת אשכול רגיל באמצעות מכונות וירטואליות מסוג A3 Ultra, A3 Mega או A3 High. אפשר להקצות את הצמתים של האשכול באמצעות קיבולת שמורה:
python3 xpk.py cluster create \ --cluster=CLUSTER_NAME \ --device-type=DEVICE_TYPE \ --zone=COMPUTE_ZONE \ --project=PROJECT_ID \ --num-nodes=NUM_NODES \ --reservation=RESERVATION_NAMEמחליפים את המשתנים הבאים:
-
CLUSTER_NAME: שם לאשכול. -
DEVICE_TYPE: סוג המכשיר שבו רוצים להשתמש.- ל-A3 Ultra, משתמשים ב-
h200-141gb-8 - ב-A3 Mega, משתמשים ב-
h100-mega-80gb-8 - ל-A3 High, משתמשים ב-
h100-80gb-8
- ל-A3 Ultra, משתמשים ב-
-
COMPUTE_ZONE: אזור החישוב של מאגר הצמתים של מכונות A3 Ultra. כדי להשתמש בקיבולת השמורה, צריך לוודא שאתם משתמשים באזור שבו שריינתם את הקיבולת. בדרך כלל מומלץ לבחור אזור שקרוב למשתמש כדי לצמצם את זמן האחזור. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
NUM_NODES: מספר צמתי העובדים במאגר הצמתים.
RESERVATION_NAME: השם של ההזמנה.XPK מציע ארגומנטים נוספים ליצירת אשכולות, כולל ארגומנטים ליצירת אשכולות פרטיים, ליצירת Vertex AI Tensorboards ולשימוש בהקצאת משאבים אוטומטית של צמתים. מידע נוסף זמין במדריך יצירת אשכול ל-XPK.
-
מוודאים שהאשכול נוצר בהצלחה:
python3 xpk.py cluster list --zone=COMPUTE_ZONE --project=PROJECT_IDאופציונלי: מריצים עומס עבודה כדי לבדוק את סביבת האשכול:
python3 xpk.py workload create \ --workload WORKLOAD_NAME --command "echo goodbye" \ --cluster CLUSTER_NAME \ --device-type=DEVICE_TYPE \ --num-nodes=WORKLOAD_NUM_NODES \ --zone=COMPUTE_ZONE \ --project=PROJECT_IDמחליפים את המשתנים הבאים:
-
WORKLOAD_NAME: שם עומס העבודה. -
CLUSTER_NAME: שם האשכול. -
DEVICE_TYPE: סוג המכשיר שבו רוצים להשתמש.- ל-A3 Ultra, משתמשים ב-
h200-141gb-8 - ב-A3 Mega, משתמשים ב-
h100-mega-80gb-8 - ל-A3 High, משתמשים ב-
h100-80gb-8
- ל-A3 Ultra, משתמשים ב-
-
WORKLOAD_NUM_NODES: מספר צמתי העובדים שמשמשים להרצת עומס העבודה. -
COMPUTE_ZONE: אזור החישוב של מאגר הצמתים של מכונות A3 Ultra. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
-
בדיקת ביצועי הרשת
מומלץ לאמת את הפונקציונליות של אשכולות שהוקצו. כדי לעשות זאת, משתמשים בבדיקות NCCL, שהן בדיקות של NVIDIA Collective Communications Library (ספריית תקשורת קולקטיבית של NVIDIA, NCCL) שעברו אופטימיזציה לסביבת Google.
הפעלת נקודות השוואה שניתנות לשחזור
אפשר לשחזר מדדים של אימון מראש של מודלים גדולים של למידת מכונה בקוד פתוח במופעי מכונות וירטואליות מסוג A4, A3 Ultra ו-A3 Mega ב-GKE.
בכל מתכון מפורטות ההוראות לביצוע המשימות הבאות:
- הכנת הסביבה.
- מריצים את ההשוואה לשוק.
- מנתחים את תוצאות ההשוואה לשוק. התוצאות כוללות את תוצאות ההשוואה לביצועים של המתחרים ויומנים מפורטים לניתוח נוסף.
כדי לראות את כל המתכונים הזמינים, אפשר לעיין במאגר GPU recipes ב-GitHub.
| מודלים | Framework | מתכון |
|---|---|---|
| Llama-3.1-70B | MaxText | עומס עבודה של 32 צמתים |
| Llama-3.1-70B | NeMo | עומס עבודה של 32 צמתים |
| Mixtral-8-7B | NeMo | עומס עבודה של 32 צמתים |
מחיקת משאבים שנוצרו על ידי Cluster Toolkit
כדי להימנע מחיובים חוזרים על המשאבים שבהם השתמשתם בדף הזה, צריך למחוק את המשאבים שהוקצו על ידי Cluster Toolkit, כולל רשתות ה-VPC ואשכול GKE:
cd ~/cluster-toolkit
./gcluster destroy CLUSTER_NAME/
מחליפים את CLUSTER_NAME בשם האשכול.
בשביל אשכולות שנוצרו באמצעות Cluster Toolkit, שם האשכול מבוסס על DEPLOYMENT_NAME.
המאמרים הבאים
- כדי לקבל מידע על תזמון עומסי עבודה באשכולות GKE באמצעות TAS ו-Kueue, אפשר לקרוא את המאמר תזמון עומסי עבודה ב-GKE באמצעות תזמון עם מודעות לטופולוגיה.
- כדי לקבל מידע על ניהול אירועים נפוצים שרלוונטיים לאשכולות GKE ולעומסי עבודה של AI, אפשר לעיין במאמר ניהול אשכולות GKE שעברו אופטימיזציה ל-AI.
- מידע על בדיקת הסביבה כדי לוודא שההגדרה והאופטימיזציה תקינות זמין במאמר בנושא סקירה כללית על אופטימיזציה של רשתות אשכולות