בדף הזה מוסבר איך ליצור אשכול Google Kubernetes Engine (GKE) שעבר אופטימיזציה ל-AI, שמשתמש במכונות וירטואליות (VM) מסוג A4 או A3 Ultra כדי לתמוך בעומסי העבודה של ה-AI וה-ML. ל-A4X, אפשר לעיין במאמר בנושא יצירת אשכול GKE מותאם אישית שעבר אופטימיזציה באמצעות AI ומשתמש ב-A4X.
סדרות המכונות A4 ו-A3 Ultra נועדו לאפשר לכם להריץ אשכולות AI/ML בקנה מידה גדול, עם תכונות כמו מיקום ממוקד של עומסי עבודה, אמצעי בקרה מתקדמים לתחזוקת אשכולות ותזמון מודע-טופולוגיה. מידע נוסף מופיע במאמר סקירה כללית על ניהול אשכולות.
GKE מספק פלטפורמה יחידה להרצת מגוון רחב של עומסי עבודה בארגונים, וכך מצמצם את העומס התפעולי שנובע מניהול של כמה פלטפורמות. אתם יכולים להריץ עומסי עבודה כמו אימון מוקדם מבוזר עם ביצועים גבוהים, כוונון עדין של מודלים, הסקת מסקנות ממודלים, שירותי אפליקציות ושירותי תמיכה.
בדף הזה מוסבר איך ליצור אשכול GKE באמצעות Google Cloud CLI כדי להגדיר את האשכול בצורה גמישה ככל האפשר בהתאם לצרכים של עומס העבודה. אפשר גם להשתמש ב-Cluster Toolkit כדי לפרוס במהירות את האשכול עם הגדרות ברירת מחדל שמשקפות שיטות מומלצות לתרחישי שימוש רבים. הוראות מפורטות מופיעות במאמר יצירת אשכול GKE שעבר אופטימיזציה ל-AI עם הגדרת ברירת מחדל.
אפשרויות להגדרת אשכולות עם GPUDirect RDMA
כדי ליצור את האשכול באמצעות Google Cloud CLI, אפשר לבחור באחת מאפשרויות ההגדרה הבאות של האשכול:
- אם אתם לא מתכננים להריץ עומסי עבודה של AI מבוזר: צרו אשכול GKE בלי להשתמש ב-GPUDirect RDMA.
- אם אתם מתכננים להריץ עומסי עבודה מבוזרים של AI: צריך ליצור אשכול GKE עם GPUDirect RDMA.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:
- מפעילים את ממשק ה-API של Google Kubernetes Engine. הפעלת Google Kubernetes Engine API
- אם רוצים להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה
gcloud components updateכדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות ליצירה ולניהול של אשכול GKE, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:
- אדמין ב-Kubernetes Engine (
roles/container.admin) - עריכה ב-Cloud Build (
roles/cloudbuild.builds.editor) - אדמין ב-Compute (
roles/compute.admin) - אדמין IAM בפרויקט (
roles/resourcemanager.projectIamAdmin) - אדמין בחשבון שירות (
roles/iam.serviceAccountAdmin) - משתמש בחשבון שירות (
roles/iam.serviceAccountUser) - צרכן שימוש בשירות (
roles/serviceusage.serviceUsageConsumer)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
בחירת אפשרות צריכה וקבלת קיבולת
בוחרים אפשרות צריכה. הבחירה צריכה להתבסס על האופן שבו רוצים לקבל ולהשתמש במשאבי GPU. מידע נוסף זמין במאמר בנושא בחירת אפשרות צריכה.
ב-GKE, כדאי לקחת בחשבון את המידע הנוסף הבא כשבוחרים אפשרות צריכה:
- מידע נוסף על flex-start (Preview) ו-GKE זמין במאמר מידע על זמינות של GPU עם flex-start.
- התחלה גמישה משתמשת במיקום קומפקטי על בסיס המאמץ הטוב ביותר. כדי לבדוק את הטופולוגיה, אפשר לעיין במאמר הצגת הטופולוגיה הפיזית של הצמתים באשכול GKE.
- אפשר לקבל מידע על הטופולוגיה רק כשמשתמשים במכונות וירטואליות מסוג Spot אם מגדירים מיקום קומפקטי.
קבלת קיבולת. כך מקבלים קיבולת לאפשרות התשלום לפי צריכה.
דרישות
הדרישות הבאות חלות על אשכול GKE שעבר אופטימיזציה באמצעות AI:
- כדי להשתמש במודל הקצאת המשאבים עם התחלה גמישה, צריך להשתמש ב-GKE מגרסה 1.32.2-gke.1652000 ואילך.
חשוב לוודא שמשתמשים בגרסת מנהל ההתקן המינימלית של GPU, בהתאם לסוג המכונה:
- A4: מעבדי ה-GPU מסוג B200 במכונות וירטואליות מסוג A4 דורשים לפחות את גרסת מנהל ההתקן של GPU מסוג R570. ב-GKE, כברירת מחדל, מותקנת אוטומטית גרסת הדרייבר הזו בכל צמתי A4 שמריצים את הגרסה המינימלית הנדרשת ל-A4, שהיא 1.32.1-gke.1729000 ואילך.
- A3 Ultra: כדי להשתמש במעבדי ה-GPU מסוג H200 במכונות וירטואליות של A3 Ultra, צריך לפחות את גרסת מנהל ההתקן של GPU R550, שזמינה בגרסה 1.31 של GKE בתור גרסת מנהל ההתקן
latest. במכונות וירטואליות מסוג A3 Ultra, צריך להגדיר את הערך של השדהgpu-driver-version=latestעם GKE בגרסה 1.31. ב-GKE מגרסה 1.31.5-gke.1169000 ואילך, מערכת GKE מתקינה אוטומטית גרסאות של מנהלי התקנים של GPU מסוג R550 בצמתי A3 Ultra כברירת מחדל, כולל כשמשמיטים את הדגלgpu-driver-version.
כדי להשתמש ב-GPUDirect RDMA, צריך לעמוד בדרישות הנוספות הבאות:
- משתמשים בגרסאות המינימליות הבאות, בהתאם לסוג המכונה:
- A4: צריך להשתמש בגרסה 1.32.2-gke.1475000 ואילך.
- A3 Ultra: שימוש בגרסה 1.31.4-gke.1183000 ואילך.
- הצמתים של GKE צריכים להשתמש בקובץ אימג' של צומת של מערכת הפעלה שמותאמת לקונטיינרים. אין תמיכה בתמונות של צמתים ב-Ubuntu וב-Windows.
- עומס העבודה ב-GKE צריך להשתמש בכל יחידות ה-GPU הזמינות, וה-Pod צריך להשתמש בכל כרטיסי ממשק הרשת המשני (NIC) הזמינים בצומת GKE יחיד. אי אפשר לשתף RDMA בין כמה Pods בצומת GKE יחיד.
- במסגרת ההגדרה הזו מופעלת בדיקת NCCL. כדי להריץ את בדיקת NCCL הזו, צריך מכסת מכונות וירטואליות של
2לפחות (כלומר, 16 יחידות GPU אם משתמשים בסוגי המכונותa4-highgpu-8gאוa3-ultragpu-8g). - GPUDirect RDMA לא תואם ל-NCCL Fast Socket או ל-GPUDirect TCPX/TCPXO. אל תפעילו את NCCL Fast Socket ואל תתקינו את הפלאגין TCPX/TCPXO באשכולות שמשתמשים ב-GPUDirect RDMA.
- משתמשים בגרסאות המינימליות הבאות, בהתאם לסוג המכונה:
חשוב לוודא שאתם משתמשים במיקום שבו סוג המכונה שבחרתם זמין. מידע נוסף זמין במאמר בנושא מיקומי GPU.
יצירת אשכול GKE שעבר אופטימיזציה ל-AI
כדי ליצור אשכול GKE שעומד בדרישות לאשכולות GKE שעברו אופטימיזציה ל-AI, פועלים לפי ההוראות בקטע הזה. אפשר לבחור אם ליצור אשכול עם GPUDirect RDMA או בלי.
שיקולים ליצירת אשכול
כשיוצרים אשכול, חשוב לקחת בחשבון את המידע הבא:
- בוחרים מיקום של אשכול:
- חשוב לוודא שאתם משתמשים במיקום שבו יש זמינות לסוג המכונה שבחרתם. מידע נוסף זמין במאמר בנושא מיקומי GPU.
- כדי להזמין כמות גדולה של מכונות, אפשר ליצור אשכול אזורי. במקרה כזה, מחליפים את הדגל
--regionבדגל--zone=COMPUTE_ZONE, כאשרCOMPUTE_ZONEהוא התחום של מישור הבקרה. - עבור עומסי עבודה שפועלים ביותר מ-1,000 צמתים ושנדרש להם זמן אחזור נמוך ברשת בין הצמתים, אפשר ליצור אשכול אזורי.
כדי למקם פיזית את הצמתים הרגישים לביצועים, צריך ליצור מאגרי צמתים של GPU באזור אחד באמצעות הדגל
--node-locations.
- בוחרים גרסת מנהל התקן:
- גרסת הדרייבר יכולה להיות אחת מהאפשרויות הבאות:
-
default: התקנת גרסת ברירת המחדל של הדרייבר לגרסת הצומת של GKE. מידע נוסף על הדרישות לגבי גרסאות ברירת מחדל של מנהלי התקנים זמין בקטע דרישות. -
latest: התקנת הגרסה האחרונה של מנהל ההתקן שזמינה לגרסת GKE שלכם. האפשרות הזו זמינה רק לצמתים שמשתמשים במערכת הפעלה שמותאמת לקונטיינרים. -
disabled: דילוג על התקנה אוטומטית של מנהל התקן. צריך להתקין מנהל התקן באופן ידני אחרי שיוצרים את מאגר הצמתים.
-
- מידע נוסף על גרסאות ברירת המחדל והגרסאות האחרונות של מנהלי ההתקנים של GPU לגרסאות של צומתי GKE זמין במאמר בנושא התקנה ידנית של מנהלי התקנים של NVIDIA GPU.
- גרסת הדרייבר יכולה להיות אחת מהאפשרויות הבאות:
בחירת שיוך להזמנה:
- תוכלו למצוא מידע על ההזמנה, כמו שם ההזמנה או שם של בלוק ספציפי בהזמנה. כדי לראות את הערכים האלה, אפשר לעיין במאמר בנושא הצגת בקשות לשמירת מקום לעתיד.
- הדגל
--reservation-affinityיכול לקבל את הערכיםspecificאוany. עם זאת, כדי להשיג ביצועים גבוהים בעומסי עבודה מבוזרים של AI, מומלץ להשתמש בהזמנה ספציפית. כשמשתמשים בהזמנה ספציפית, כולל הזמנות משותפות, צריך לציין את הערך של הדגל
--reservationבפורמט הבא:projects/PROJECT_ID/reservations/RESERVATION_NAME/reservationBlocks/BLOCK_NAMEמחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
RESERVATION_NAME: השם של ההזמנה. -
BLOCK_NAME: השם של בלוק ספציפי בהזמנה.
-
יצירת אשכול ללא GPUDirect RDMA
כדי ליצור אשכול ללא GPUDirect RDMA, פועלים לפי ההוראות הבאות כדי ליצור אשכול עם מאגר צמתים שמוגדר כברירת מחדל על בסיס CPU ומאגרי צמתים נוספים עם GPU. הגישה הזו מאפשרת למאגר הצמתים שמוגדר כברירת מחדל להריץ שירותים אחרים.
יוצרים את האשכול:
gcloud container clusters create CLUSTER_NAME \ --cluster-version=CLUSTER_VERSION \ --region=COMPUTE_REGIONמחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של האשכול החדש. -
CLUSTER_VERSION: הגרסה של האשכול החדש. מידע נוסף על הגרסה של GKE שתומכת בהגדרה שלכם זמין בקטע דרישות. -
COMPUTE_REGION: האזור של האשכול החדש. אם אתם מתכננים ליצור אשכול אזורי, אתם צריכים להשתמש בדגל--zoneבמקום בדגל--region. לדוגמה:--zone=COMPUTE_ZONE. מחליפים אתCOMPUTE_ZONEבאזור של מישור הבקרה.
-
יוצרים את מאגר הצמתים מבוסס ה-GPU באמצעות אחת מהפקודות הבאות. הפקודה שצריך להריץ תלויה באפשרות הצריכה שבה אתם משתמשים לפריסה. בוחרים את הכרטיסייה שמתאימה למודל ההקצאה של אפשרות הצריכה.
הזמנה בלבד
כדי להקצות משאבים שמוגבלים להזמנה, מריצים את הפקודה הבאה:
gcloud container node-pools create NODE_POOL_NAME \ --region COMPUTE_REGION --cluster CLUSTER_NAME \ --node-locations COMPUTE_ZONE \ --accelerator type=GPU_TYPE,count=AMOUNT,gpu-driver-version=DRIVER_VERSION \ --machine-type MACHINE_TYPE \ --num-nodes=NUM_NODES \ --reservation-affinity=specific \ --reservation=RESERVATION_NAME/reservationBlocks/BLOCK_NAMEמחליפים את מה שכתוב בשדות הבאים:
-
NODE_POOL_NAME: שם מאגר הצמתים. -
COMPUTE_REGION: האזור של האשכול החדש. -
CLUSTER_NAME: השם של האשכול החדש. -
COMPUTE_ZONE: האזור של מאגר הצמתים.
GPU_TYPE: סוג ה-GPU המואץ:- מכונות וירטואליות מסוג A4: מזינים
nvidia-b200. - מכונות VM מסוג A3 Ultra: מזינים
nvidia-h200-141gb.
- מכונות וירטואליות מסוג A4: מזינים
AMOUNT: מספר המעבדים הגרפיים לצירוף לצמתים במאגר הצמתים. לדוגמה, בשתי המכונות הווירטואליותa4-highgpu-8gו-a3-ultragpu-8g, מספר יחידות ה-GPU הוא8.
DRIVER_VERSION: גרסת הדרייבר של NVIDIA להתקנה. אפשר להשתמש באחד מהערכים הבאים:default,latestאוdisabled.
MACHINE_TYPE: סוג המכונה ב-Compute Engine עבור הצמתים. לדוגמה, משתמשים ב-a4-highgpu-8gלמכונות וירטואליות מסוג A4 וב-a3-ultragpu-8gלמכונות וירטואליות מסוג A3 Ultra.
NUM_NODES: מספר הצמתים במאגר הצמתים.
RESERVATION_NAME: השם של ההזמנה. כדי למצוא את הערך הזה, אפשר לעיין במאמר בנושא צפייה במקום שמור לעתיד.
BLOCK_NAME: השם של בלוק ספציפי בהזמנה. הוראות לאיתור הערך הזה מופיעות במאמר איך צופים בבקשות לשמירת מקום לעתיד.
Flex-start
כדי להקצות משאבים עם גמישות בהתחלה, מריצים את הפקודה הבאה:
gcloud container node-pools create NODE_POOL_NAME \ --region COMPUTE_REGION --cluster CLUSTER_NAME \ --node-locations COMPUTE_ZONE \ --accelerator type=GPU_TYPE,count=AMOUNT,gpu-driver-version=DRIVER_VERSION \ --machine-type MACHINE_TYPE \ --flex-start --enable-autoscaling --num-nodes=0 \ --total-max-nodes TOTAL_MAX_NODES \ --no-enable-autorepair --location-policy=ANY \ --reservation-affinity=none [\ --enable-queued-provisioning]מחליפים את מה שכתוב בשדות הבאים:
-
NODE_POOL_NAME: שם מאגר הצמתים. -
COMPUTE_REGION: האזור של האשכול החדש. -
CLUSTER_NAME: השם של האשכול החדש. -
COMPUTE_ZONE: האזור של מאגר הצמתים.
GPU_TYPE: סוג ה-GPU המואץ:- מכונות וירטואליות מסוג A4: מזינים
nvidia-b200. - מכונות VM מסוג A3 Ultra: מזינים
nvidia-h200-141gb.
- מכונות וירטואליות מסוג A4: מזינים
AMOUNT: מספר המעבדים הגרפיים לצירוף לצמתים במאגר הצמתים. לדוגמה, בשתי המכונות הווירטואליותa4-highgpu-8gו-a3-ultragpu-8g, מספר יחידות ה-GPU הוא8.
DRIVER_VERSION: גרסת הדרייבר של NVIDIA להתקנה. אפשר להשתמש באחד מהערכים הבאים:default,latestאוdisabled.
MACHINE_TYPE: סוג המכונה ב-Compute Engine עבור הצמתים. לדוגמה, משתמשים ב-a4-highgpu-8gלמכונות וירטואליות מסוג A4 וב-a3-ultragpu-8gלמכונות וירטואליות מסוג A3 Ultra.
TOTAL_MAX_NODES: המספר המקסימלי של הצמתים שניתן להרחבה אוטומטית עבור כל מאגר הצמתים.כדי להשתמש בהקצאת משאבים עם גמישות בהתחלה, צריך לכלול את הדגל
--enable-queued-provisioning.מידע נוסף על שימוש בהפעלה גמישה זמין במאמר הפעלת עומס עבודה גדול באמצעות הקצאת משאבים בתור.
כרטיס Spot
כדי להקצות משאבים זמניים, מריצים את הפקודה הבאה:
gcloud container node-pools create NODE_POOL_NAME \ --region COMPUTE_REGION --cluster CLUSTER_NAME \ --node-locations COMPUTE_ZONE \ --accelerator type=GPU_TYPE,count=AMOUNT,gpu-driver-version=DRIVER_VERSION \ --machine-type MACHINE_TYPE \ --num-nodes=NUM_NODES \ --spotמחליפים את מה שכתוב בשדות הבאים:
-
NODE_POOL_NAME: שם מאגר הצמתים. -
COMPUTE_REGION: האזור של האשכול החדש. -
CLUSTER_NAME: השם של האשכול החדש. -
COMPUTE_ZONE: האזור של מאגר הצמתים.
GPU_TYPE: סוג ה-GPU המואץ:- מכונות וירטואליות מסוג A4: מזינים
nvidia-b200. - מכונות VM מסוג A3 Ultra: מזינים
nvidia-h200-141gb.
- מכונות וירטואליות מסוג A4: מזינים
AMOUNT: מספר המעבדים הגרפיים לצירוף לצמתים במאגר הצמתים. לדוגמה, בשתי המכונות הווירטואליותa4-highgpu-8gו-a3-ultragpu-8g, מספר יחידות ה-GPU הוא8.
DRIVER_VERSION: גרסת הדרייבר של NVIDIA להתקנה. אפשר להשתמש באחד מהערכים הבאים:default,latestאוdisabled.
MACHINE_TYPE: סוג המכונה ב-Compute Engine עבור הצמתים. לדוגמה, משתמשים ב-a4-highgpu-8gלמכונות וירטואליות מסוג A4 וב-a3-ultragpu-8gלמכונות וירטואליות מסוג A3 Ultra.
NUM_NODES: מספר הצמתים במאגר הצמתים.מידע נוסף על יצירת אשכולות עם מכונות Spot VM זמין במאמר הרצת עומסי עבודה עמידים בכשלים בעלויות נמוכות יותר באמצעות מכונות Spot VM.
-
מתחברים לאשכול כדי להריץ את הפקודות של
kubectlבקטעים הבאים:gcloud container clusters get-credentials CLUSTER_NAME --location=COMPUTE_REGIONמחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של האשכול.
COMPUTE_REGION: השם של אזור ה-Compute.מידע נוסף זמין במאמר התקנה של kubectl והגדרת גישה לאשכול.
-
יצירת אשכול עם GPUDirect RDMA
במקרים של עומסי עבודה מבוזרים של AI, לעיתים קרובות מקשרים בין כמה צמתים של GPU כדי שיפעלו כמחשב אחד. מכונות וירטואליות מסוג A4 ומכונות וירטואליות מסוג A3 Ultra מגיעות עם מתאם רשת Titanium ML, שמבוסס על כרטיסי רשת (NIC) מסוג NVIDIA ConnectX-7 (CX7). גם מכונות וירטואליות מסוג A4 וגם מכונות וירטואליות מסוג A3 Ultra מספקות תעבורה לא חוסמת של 3.2Tbps בין צמתים של GPU ל-GPU באמצעות RDMA over Converged Ethernet (RoCE). RoCE מאפשרת הרחבה ושיתוף פעולה בין כמה מעבדי GPU, ומספקת חוויית ענן עם ביצועים גבוהים לעומסי עבודה של AI.
מידע נוסף על יצירת אשכולות GKE באמצעות Google Cloud CLI ו-GPUDirect TCPX (מכונות וירטואליות מסוג A3 High) או TCPXO (מכונות וירטואליות מסוג A3 Mega) זמין במאמרים בנושא הגדלת רוחב הפס של רשת ה-GPU באשכולות במצב Autopilot או הגדלת רוחב הפס של רשת ה-GPU באשכולות במצב רגיל.
כדי ליצור אשכולות GKE במצב Autopilot או במצב רגיל עם GPUDirect RDMA, צריך לבצע את השלבים הבאים, שמתוארים בקטעים הבאים:
- יצירת רשתות VPC ותת-רשתות
- יצירת אשכול GKE עם רישות מרובה
- יצירת אובייקטים של רשת GKE
- התקנה של קובץ ה-RDMA הבינארי והגדרה של NCCL
- פריסה והרצה של בדיקת NCCL
- הגדרת מניפסטים של Pod ל-GPUDirect-RDMA
יצירת רשתות VPC ורשתות משנה
למכונות הווירטואליות A4 ולמכונות הווירטואליות A3 Ultra יש את ההגדרה הבאה:
- שמונה מעבדי GPU של NVIDIA B200 (A4) או H200 (A3 Ultra) לכל מכונה וירטואלית שמחוברת באמצעות NVLink
- שני מעבדי Intel Emerald Rapids
- שמונה כרטיסי רשת CX-7 במהירות 400 Gbps לרשת GPU ל-GPU
- שני כרטיסי רשת של Google Titanium (NIC) עם מהירות של 200 Gbps לשירותים חיצוניים
עומסי עבודה של AI ו-ML, כמו אימון מבוזר, דורשים האצה חזקה כדי לשפר את הביצועים על ידי קיצור הזמן שנדרש להשלמת המשימות. עבור עומסי עבודה שדורשים ביצועים גבוהים, תפוקה גבוהה וחביון נמוך, GPUDirect RDMA מצמצם את מספר הקפיצות ברשת שנדרשות להעברת מטענים אל וממעבדים גרפיים, וכך משתמש בצורה יעילה יותר ברוחב הפס הזמין ברשת. הטכנולוגיה GPUDirect RDMA מיועדת לשיפור משמעותי של קצב העברת הנתונים בהשוואה ל-GPU שלא משתמשים ב-GPUDirect.
אחד ממתאמי הרשת של Google Titanium שמשויך למעבד משתמש ברשת ברירת המחדל ב-GKE. אם יש לכם מספיק טווחי כתובות IP ברשת שמוגדרת כברירת מחדל, לא צריך ליצור רשת VPC חדשה בשביל כרטיס ה-NIC הזה.
יוצרים VPC אחד עבור כרטיס ה-NIC השני של Titanium CPU (gVNIC) ועוד VPC עבור שמונת כרטיסי ה-NIC של CX-7 RDMA באמצעות הפקודות הבאות.
מגדירים משתני סביבה בהתאם לפריסה:
export REGION="COMPUTE_REGION" export ZONE="COMPUTE_ZONE" export PROJECT="PROJECT_ID" export GVNIC_NETWORK_PREFIX="GVNIC_NETWORK_PREFIX" export RDMA_NETWORK_PREFIX="RDMA_NETWORK_PREFIX"מחליפים את המשתנים הבאים:
-
COMPUTE_REGION: האזור של האשכול. -
COMPUTE_ZONE: האזור של מאגר הצמתים. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
GVNIC_NETWORK_PREFIX: a4high-gvnicלמכונות וירטואליות מסוג A4 אוa3ultra-gvnicלמכונות וירטואליות מסוג A3 Ultra. -
RDMA_NETWORK_PREFIX: a4high-rdmaלמכונות וירטואליות מסוג A4 אוa3ultra-rdmaלמכונות וירטואליות מסוג A3 Ultra.
-
יוצרים שתי רשתות VPC:
# Create a VPC for the additional Google Titanium CPU NIC gcloud compute --project=${PROJECT} \ networks create \ ${GVNIC_NETWORK_PREFIX}-net \ --subnet-mode=custom gcloud compute --project=${PROJECT} \ networks subnets create \ ${GVNIC_NETWORK_PREFIX}-sub \ --network=${GVNIC_NETWORK_PREFIX}-net \ --region=${REGION} \ --range=192.168.0.0/24 gcloud compute --project=${PROJECT} \ firewall-rules create \ ${GVNIC_NETWORK_PREFIX}-internal \ --network=${GVNIC_NETWORK_PREFIX}-net \ --action=ALLOW \ --rules=tcp:0-65535,udp:0-65535,icmp \ --source-ranges=192.168.0.0/16 # Create HPC VPC for the RDMA NICs with 8 subnets. gcloud beta compute --project=${PROJECT} \ networks create ${RDMA_NETWORK_PREFIX}-net \ --network-profile=${ZONE}-vpc-roce \ --subnet-mode=custom # Create subnets for the HPC VPC. for N in $(seq 0 7); do gcloud compute --project=${PROJECT} \ networks subnets create \ ${RDMA_NETWORK_PREFIX}-sub-$N \ --network=${RDMA_NETWORK_PREFIX}-net \ --region=${REGION} \ --range=192.168.$((N+1)).0/24 & # offset to avoid overlap with gvnics done
יצירת אשכול GKE עם ריבוי רשתות
טייס אוטומטי
יצירת אשכול GKE Autopilot עם רשתות מרובות:
gcloud container clusters create-auto CLUSTER_NAME \ --enable-multi-networking \ --cluster-version=CLUSTER_VERSION \ --region=COMPUTE_REGIONמחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של האשכול. -
CLUSTER_VERSION: הגרסה של האשכול החדש. כדי לגלות איזו גרסה של GKE תומכת בהגדרה שלכם, אפשר לעיין בקטע דרישות. -
COMPUTE_REGION: השם של אזור ה-Compute.
-
מתחברים לאשכול כדי להריץ את הפקודות של
kubectlבקטעים הבאים:gcloud container clusters get-credentials CLUSTER_NAME --location=COMPUTE_REGIONמחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של האשכול. -
COMPUTE_REGION: השם של אזור ה-Compute.
מידע נוסף זמין במאמר התקנה של kubectl והגדרת גישה לאשכול.
-
רגילה
יצירת אשכול GKE Standard ומאגר צמתים של GPU עם ריבוי רשתות:
יוצרים את האשכול:
gcloud container clusters create CLUSTER_NAME \ --region=COMPUTE_REGION \ --cluster-version=CLUSTER_VERSION \ --enable-dataplane-v2 --enable-ip-alias --enable-multi-networking [\ --services-ipv4-cidr=SERVICE_CIDR \ --cluster-ipv4-cidr=POD_CIDR]מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של האשכול. -
CLUSTER_VERSION: הגרסה של האשכול החדש. כדי לגלות איזו גרסה של GKE תומכת בהגדרה שלכם, אפשר לעיין בקטע דרישות. -
COMPUTE_REGION: השם של אזור ה-Compute.
אופציונלי: אפשר לציין במפורש את טווחי ה-CIDR המשניים לשירותים ול-Pods. אם משתמשים בדגלים האופציונליים האלה, צריך להחליף את המשתנים הבאים:
-
SERVICE_CIDR: טווח ה-CIDR המשני לשירותים. -
POD_CIDR: טווח ה-CIDR המשני של ה-Pods.
כשמשתמשים בדגלים שלמעלה, צריך לאמת את הדברים הבאים:
- רשתות המשנה שאתם יוצרים מאפשרות לכם להוסיף מספר מספיק של צמתים לאשכול. מידע נוסף זמין במאמר בנושא תכנון כתובות IP.
- טווח ה-CIDR לא חופף לטווח תת-הרשתות של רשתות צמתים נוספות. לדוגמה, הטווחים בערכים
SERVICE_CIDR=10.65.0.0/19ו-POD_CIDR=10.64.0.0/19לא חופפים. מידע נוסף מופיע במאמר בנושא הוספת טווחי כתובות IPv4 של Pod.
-
יוצרים את מאגר הצמתים. הפקודה שצריך להריץ תלויה באפשרות הצריכה שבה אתם משתמשים לפריסה. בוחרים את הכרטיסייה שמתאימה למודל ההקצאה של אפשרות הצריכה.
הזמנה בלבד
כדי להקצות משאבים שמוגבלים להזמנה, מריצים את הפקודה הבאה:
gcloud container node-pools create NODE_POOL_NAME \ --region COMPUTE_REGION --cluster CLUSTER_NAME \ --node-locations COMPUTE_ZONE \ --accelerator type=GPU_TYPE,count=AMOUNT,gpu-driver-version=DRIVER_VERSION \ --machine-type MACHINE_TYPE \ --num-nodes=NUM_NODES \ --reservation-affinity=specific \ --reservation=RESERVATION_NAME/reservationBlocks/BLOCK_NAME \ --additional-node-network network=${GVNIC_NETWORK_PREFIX}-net,subnetwork=${GVNIC_NETWORK_PREFIX}-sub \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-0 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-1 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-2 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-3 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-4 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-5 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-6 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-7מחליפים את מה שכתוב בשדות הבאים:
-
NODE_POOL_NAME: שם מאגר הצמתים. -
COMPUTE_REGION: האזור של האשכול החדש. -
CLUSTER_NAME: השם של האשכול החדש. -
COMPUTE_ZONE: האזור של מאגר הצמתים.
GPU_TYPE: סוג ה-GPU המואץ:- מכונות וירטואליות מסוג A4: מזינים
nvidia-b200. - מכונות VM מסוג A3 Ultra: מזינים
nvidia-h200-141gb.
- מכונות וירטואליות מסוג A4: מזינים
AMOUNT: מספר המעבדים הגרפיים לצירוף לצמתים במאגר הצמתים. לדוגמה, בשתי המכונות הווירטואליותa4-highgpu-8gו-a3-ultragpu-8g, מספר יחידות ה-GPU הוא8.
DRIVER_VERSION: גרסת הדרייבר של NVIDIA להתקנה. אפשר להשתמש באחד מהערכים הבאים:default,latestאוdisabled.
MACHINE_TYPE: סוג המכונה ב-Compute Engine עבור הצמתים. לדוגמה, משתמשים ב-a4-highgpu-8gלמכונות וירטואליות מסוג A4 וב-a3-ultragpu-8gלמכונות וירטואליות מסוג A3 Ultra.
MACHINE_TYPE: סוג המכונה ב-Compute Engine עבור הצמתים. לדוגמה, משתמשים ב-a4-highgpu-8gלמכונות וירטואליות מסוג A4 וב-a3-ultragpu-8gלמכונות וירטואליות מסוג A3 Ultra.
NUM_NODES: מספר הצמתים במאגר הצמתים. עבור התחלה גמישה (Flex-start), הערך הזה צריך להיות0.
RESERVATION_NAME: השם של ההזמנה. כדי למצוא את הערך הזה, אפשר לעיין במאמר בנושא צפייה במקום שמור לעתיד.
BLOCK_NAME: השם של בלוק ספציפי בהזמנה. הוראות לאיתור הערך הזה מופיעות במאמר איך צופים בבקשות לשמירת מקום לעתיד.
Flex-start
כדי להקצות משאבים עם גמישות בהתחלה, מריצים את הפקודה הבאה:
gcloud container node-pools create NODE_POOL_NAME \ --region COMPUTE_REGION --cluster CLUSTER_NAME \ --node-locations COMPUTE_ZONE \ --accelerator type=GPU_TYPE,count=AMOUNT,gpu-driver-version=DRIVER_VERSION \ --machine-type MACHINE_TYPE \ --num-nodes=NUM_NODES \ --flex-start --num-nodes=0 --enable-autoscaling \ --total-max-nodes TOTAL_MAX_NODES \ --no-enable-autorepair --location-policy=ANY \ --reservation-affinity=none \ [--enable-queued-provisioning \] --additional-node-network network=${GVNIC_NETWORK_PREFIX}-net,subnetwork=${GVNIC_NETWORK_PREFIX}-sub \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-0 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-1 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-2 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-3 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-4 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-5 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-6 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-7מחליפים את מה שכתוב בשדות הבאים:
-
NODE_POOL_NAME: שם מאגר הצמתים. -
COMPUTE_REGION: האזור של האשכול החדש. -
CLUSTER_NAME: השם של האשכול החדש. -
COMPUTE_ZONE: האזור של מאגר הצמתים.
GPU_TYPE: סוג ה-GPU המואץ:- מכונות וירטואליות מסוג A4: מזינים
nvidia-b200. - מכונות VM מסוג A3 Ultra: מזינים
nvidia-h200-141gb.
- מכונות וירטואליות מסוג A4: מזינים
AMOUNT: מספר המעבדים הגרפיים לצירוף לצמתים במאגר הצמתים. לדוגמה, בשתי המכונות הווירטואליותa4-highgpu-8gו-a3-ultragpu-8g, מספר יחידות ה-GPU הוא8.
DRIVER_VERSION: גרסת הדרייבר של NVIDIA להתקנה. אפשר להשתמש באחד מהערכים הבאים:default,latestאוdisabled.
MACHINE_TYPE: סוג המכונה ב-Compute Engine עבור הצמתים. לדוגמה, משתמשים ב-a4-highgpu-8gלמכונות וירטואליות מסוג A4 וב-a3-ultragpu-8gלמכונות וירטואליות מסוג A3 Ultra.
MACHINE_TYPE: סוג המכונה ב-Compute Engine עבור הצמתים. לדוגמה, משתמשים ב-a4-highgpu-8gלמכונות וירטואליות מסוג A4 וב-a3-ultragpu-8gלמכונות וירטואליות מסוג A3 Ultra.
NUM_NODES: מספר הצמתים במאגר הצמתים. עבור התחלה גמישה (Flex-start), הערך הזה צריך להיות0.
TOTAL_MAX_NODES: המספר המקסימלי של הצמתים שניתן להרחבה אוטומטית עבור כל מאגר הצמתים.
כדי להשתמש בהקצאת משאבים עם גמישות בהתחלה, צריך לכלול את הדגל
--enable-queued-provisioning.מידע נוסף על שימוש בהפעלה גמישה זמין במאמר הפעלת עומס עבודה גדול באמצעות הקצאת משאבים בתור.
-
מתחברים לאשכול כדי להריץ את הפקודות של
kubectlבקטעים הבאים:gcloud container clusters get-credentials CLUSTER_NAME --location=COMPUTE_REGIONמחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של האשכול. -
COMPUTE_REGION: השם של אזור ה-Compute.
מידע נוסף זמין במאמר התקנה של kubectl והגדרת גישה לאשכול.
-
יצירת אובייקטים של רשת GKE
צריך להגדיר את רשתות ה-VPC שנוצרו בקטע הקודם באמצעות קבוצות של פרמטרים של רשת GKE. ספציפית, צריך להגדיר את כרטיס ה-NIC השני של Titanium (gVNIC) במצב NetDevice, ואת כל שמונת כרטיסי ה-NIC של CX-7 RDMA במצב RDMA.
הפקודה הזו משתמשת בשמות הבאים:
- רשת ה-VPC של כרטיס הרשת (NIC) של CPU Titanium (gVNIC) נקראת
${GVNIC_NETWORK_PREFIX}-netעם תת-רשת בשם${GVNIC_NETWORK_PREFIX}-sub - רשת ה-VPC של כרטיסי ה-NIC מסוג CX-7 RDMA נקראת
${RDMA_NETWORK_PREFIX}-netעם רשתות משנה בשם${RDMA_NETWORK_PREFIX}-sub-[0…7]
כדי ליצור את אובייקטי הרשת של GKE, מריצים את הפקודה הבאה:
kubectl apply -f - <<EOF
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: gvnic-1
spec:
vpc: ${GVNIC_NETWORK_PREFIX}-net
vpcSubnet: ${GVNIC_NETWORK_PREFIX}-sub
deviceMode: NetDevice
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: gvnic-1
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: gvnic-1
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-0
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-0
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-0
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-0
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-1
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-1
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-1
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-1
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-2
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-2
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-2
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-2
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-3
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-3
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-3
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-3
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-4
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-4
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-4
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-4
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-5
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-5
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-5
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-5
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-6
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-6
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-6
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-6
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-7
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-7
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-7
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-7
EOF
התקנה של קובץ הבינארי RDMA והגדרה של NCCL
מחילים את DaemonSet הבא כדי להתקין את הקבצים הבינאריים של RDMA ואת ספריית NCCL בכל צומת. בכל מכונה וירטואלית בסיסית, קובצי ה-RDMA הבינאריים מותקנים בספרייה /home/kubernetes/bin/gib, וספריית ה-NCCL מותקנת בספרייה /home/kubernetes/bin/nvidia/lib64.
טייס אוטומטי
במצב GKE Autopilot, מריצים את הפקודה הבאה:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/refs/heads/master/gpudirect-rdma/nccl-rdma-installer-autopilot.yaml
רגילה
במצב GKE Standard, מריצים את הפקודה הבאה:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/refs/heads/master/gpudirect-rdma/nccl-rdma-installer.yaml
הרצת בדיקות NCCL
כדי לוודא שהאשכול שהוקצה פועל כמו שצריך, אפשר להריץ בדיקת NCCL. הוראות מפורטות זמינות במאמר בנושא פריסה והפעלה של בדיקת NCCL.
הגדרת מניפסטים של Pod ל-GPUDirect RDMA
כדי להריץ את עומסי העבודה באמצעות GPUDirect RDMA, צריך להגדיר את מניפסטים של ה-Pod לפי השלבים הבאים:
מוסיפים את ההערות הבאות למטא-נתונים של ה-Pod.
טייס אוטומטי
משתמשים בהערה הבאה למצב GKE Autopilot:
metadata: annotations: networking.gke.io/default-interface: 'eth0' networking.gke.io/interfaces: | [ {"interfaceName":"eth0","network":"default"}, {"interfaceName":"eth1","network":"gvnic-1"}, {"interfaceName":"eth2","network":"rdma-0"}, {"interfaceName":"eth3","network":"rdma-1"}, {"interfaceName":"eth4","network":"rdma-2"}, {"interfaceName":"eth5","network":"rdma-3"}, {"interfaceName":"eth6","network":"rdma-4"}, {"interfaceName":"eth7","network":"rdma-5"}, {"interfaceName":"eth8","network":"rdma-6"}, {"interfaceName":"eth9","network":"rdma-7"} ]רגילה
ההערה הבאה למצב GKE Standard לא כוללת מפרט של
gvnic-1, אבל אפשר להוסיף אותו אם עומסי העבודה שלכם דורשים זאת.משתמשים בהערה הבאה למצב GKE Standard:
metadata: annotations: networking.gke.io/default-interface: 'eth0' networking.gke.io/interfaces: | [ {"interfaceName":"eth0","network":"default"}, {"interfaceName":"eth2","network":"rdma-0"}, {"interfaceName":"eth3","network":"rdma-1"}, {"interfaceName":"eth4","network":"rdma-2"}, {"interfaceName":"eth5","network":"rdma-3"}, {"interfaceName":"eth6","network":"rdma-4"}, {"interfaceName":"eth7","network":"rdma-5"}, {"interfaceName":"eth8","network":"rdma-6"}, {"interfaceName":"eth9","network":"rdma-7"} ]מציינים את סוג ה-GPU שנבחר ואת ההזמנה הספציפית באמצעות בוררי צמתים:
spec: nodeSelector: cloud.google.com/gke-accelerator: ACCELERATOR cloud.google.com/reservation-name: RESERVATION_NAME cloud.google.com/reservation-affinity: "specific"מחליפים את מה שכתוב בשדות הבאים:
-
ACCELERATOR: המאיץ שהזמנתם בהזמנת הקיבולת של Compute Engine. חובה להשתמש באחד מהערכים הבאים:-
nvidia-b200: NVIDIA B200 (180GB) למכונות וירטואליות מסוג A4 -
nvidia-h200-141gb: NVIDIA H200 (141GB) למכונות VM מסוג A3 Ultra
-
-
RESERVATION_NAME: השם של הזמנת הקיבולת ב-Compute Engine.
כדי להשתמש בהזמנות משותפות או בבלוקים ספציפיים ובלוקים משניים של הזמנות, אפשר לעיין בקטעים הרלוונטיים במאמר שימוש במשאבים שמורים בנתיב אזורי.
-
מוסיפים את אמצעי האחסון הבאים למפרט של ה-Pod:
spec: volumes: - name: library-dir-host hostPath: path: /home/kubernetes/bin/nvidia - name: gib hostPath: path: /home/kubernetes/bin/gibמוסיפים את המשאבים, משתני הסביבה וה-volume mounts הבאים לקונטיינר שמבקש יחידות GPU. הקונטיינר של עומס העבודה צריך לבקש את כל שמונת המעבדים הגרפיים:
טייס אוטומטי
במצב GKE Autopilot, מגדירים את המשאבים הבאים:
containers: - name: my-container volumeMounts: - name: library-dir-host mountPath: /usr/local/nvidia readOnly: true - name: gib mountPath: /usr/local/gib readOnly: true env: - name: LD_LIBRARY_PATH value: /usr/local/nvidia/lib64 resources: limits: nvidia.com/gpu: 8רגילה
במצב GKE Standard, מגדירים את המשאבים הבאים:
containers: - name: my-container volumeMounts: - name: library-dir-host mountPath: /usr/local/nvidia - name: gib mountPath: /usr/local/gib env: - name: LD_LIBRARY_PATH value: /usr/local/nvidia/lib64 resources: limits: nvidia.com/gpu: 8מגדירים את כל משתני הסביבה הנדרשים כדי להגדיר את NCCL באמצעות סקריפט מעטפת הבא ממכולת עומס העבודה:
source /usr/local/gib/scripts/set_nccl_env.sh
בכרטיסיות הבאות יש דוגמאות למניפסטים של פודים שהושלמו.
טייס אוטומטי
במצב GKE Autopilot, מניפסט Pod שהושלם צריך להיראות בערך כך:
apiVersion: apps/v1
kind: Pod
metadata:
name: my-pod
labels:
k8s-app: my-pod
annotations:
networking.gke.io/default-interface: 'eth0'
networking.gke.io/interfaces: |
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName":"eth1","network":"gvnic-1"},
{"interfaceName":"eth2","network":"rdma-0"},
{"interfaceName":"eth3","network":"rdma-1"},
{"interfaceName":"eth4","network":"rdma-2"},
{"interfaceName":"eth5","network":"rdma-3"},
{"interfaceName":"eth6","network":"rdma-4"},
{"interfaceName":"eth7","network":"rdma-5"},
{"interfaceName":"eth8","network":"rdma-6"},
{"interfaceName":"eth9","network":"rdma-7"}
]
spec:
...
volumes:
- name: library-dir-host
hostPath:
path: /home/kubernetes/bin/nvidia
- name: gib
hostPath:
path: /home/kubernetes/bin/gib
containers:
- name: my-container
volumeMounts:
- name: library-dir-host
mountPath: /usr/local/nvidia
readOnly: true
- name: gib
mountPath: /usr/local/gib
readOnly: true
env:
- name: LD_LIBRARY_PATH
value: /usr/local/nvidia/lib64
resources:
limits:
nvidia.com/gpu: 8
...
רגילה
במצב GKE Standard, מניפסט Pod שהושלם צריך להיראות בערך כך:
apiVersion: apps/v1
kind: Pod
metadata:
name: my-pod
labels:
k8s-app: my-pod
annotations:
networking.gke.io/default-interface: 'eth0'
networking.gke.io/interfaces: |
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName":"eth2","network":"rdma-0"},
{"interfaceName":"eth3","network":"rdma-1"},
{"interfaceName":"eth4","network":"rdma-2"},
{"interfaceName":"eth5","network":"rdma-3"},
{"interfaceName":"eth6","network":"rdma-4"},
{"interfaceName":"eth7","network":"rdma-5"},
{"interfaceName":"eth8","network":"rdma-6"},
{"interfaceName":"eth9","network":"rdma-7"}
]
spec:
...
volumes:
- name: library-dir-host
hostPath:
path: /home/kubernetes/bin/nvidia
- name: gib
hostPath:
path: /home/kubernetes/bin/gib
containers:
- name: my-container
volumeMounts:
- name: library-dir-host
mountPath: /usr/local/nvidia
- name: gib
mountPath: /usr/local/gib
env:
- name: LD_LIBRARY_PATH
value: /usr/local/nvidia/lib64
resources:
limits:
nvidia.com/gpu: 8
...
בדיקת ביצועי הרשת עבור אשכולות שמשתמשים ב-GPUDirect RDMA
מומלץ לאמת את הפונקציונליות של האשכולות שהוקצו. כדי לעשות זאת, משתמשים בבדיקות NCCL/gIB, שהן בדיקות של NVIDIA Collective Communications Library (NCCL) שעברו אופטימיזציה לסביבת Google.
המאמרים הבאים
- מידע נוסף על תזמון עומסי עבודה באשכולות GKE באמצעות תזמון שמודע לטופולוגיה (TAS) ו-Kueue זמין במאמר תזמון עומסי עבודה ב-GKE באמצעות תזמון שמודע לטופולוגיה.
- מידע נוסף על ניהול אירועים נפוצים שרלוונטיים לאשכולות GKE ולעומסי עבודה של AI זמין במאמר ניהול אשכולות GKE שעברו אופטימיזציה ל-AI.
- מידע על בדיקת הסביבה כדי לוודא שההגדרה והאופטימיזציה תקינות זמין במאמר אופטימיזציה של רשתות אשכולות באמצעות NCCL/gIB.