היבט הוספת צומת משלכם של Google Distributed Cloud (תוכנה בלבד) בשרת פיזי מאפשר לכם לנצל את החומרה המתקדמת שלכם, כולל מכונות עם מעבדי GPU, כדי להשיג את הביצועים והגמישות הטובים ביותר עבור האשכולות שלכם.
במאמר הזה מוסבר איך להתקין את NVIDIA GPU Operator ולהשתמש בו כדי להגדיר אשכולות Bare Metal שנוצרו באמצעות Google Distributed Cloud לשימוש עם GPU של NVIDIA.
ה-NVIDIA GPU Operator משתמש ב-Operator Framework כדי לנהל את רכיבי התוכנה של NVIDIA שנדרשים להקצאה ולניהול של מכשירי GPU. מומלץ להשתמש באופרטור NVIDIA GPU כדי ליהנות מהגמישות ומהיתרונות הבאים:
בחירה של סוג ה-GPU: התוכנה בלבד של Google Distributed Cloud תואמת למגוון רחב של סוגי GPU שנתמכים על ידי הגרסה העדכנית של NVIDIA GPU Operator.
בחירה של מערכת הפעלה נתמכת: צמתי עובדים באשכול יכולים להשתמש בכל מערכת הפעלה נתמכת עם מעבדי GPU של NVIDIA, ויש לכם אפשרות להשתמש במנהלי התקנים (דרייברים) של GPU שהותקנו מראש או בהתקנה דינמית של דרייברים באמצעות NVIDIA GPU Operator.
בחירה בין מודלים של פריסה: אתם יכולים להשתמש ב-GPU של NVIDIA בכל סוג של אשכול עם צמתי עבודה: אשכולות משתמשים, אשכולות עצמאיים או אשכולות היברידיים.
הדף הזה מיועד לאדמינים ולמפעילים בתחום ה-IT שמנהלים את מחזור החיים של תשתית טכנולוגית בסיסית. מידע נוסף על תפקידים נפוצים ודוגמאות למשימות שאנחנו מתייחסים אליהן בתוכן זמין במאמר תפקידי משתמשים ומשימות נפוצים ב-GKE. Google Cloud
לפני שמתחילים
לפני שמבצעים את השלבים שמפורטים בקטעים הבאים, צריך לוודא שהדרישות הבאות מוכנות:
קלאסטר תפעולי: צריך לוודא שיש לכם קלאסטר פיזי שנוצר באמצעות Google Distributed Cloud.
NVIDIA GPUs: מוודאים שיחידות ה-GPU של NVIDIA מותקנות בצמתי העובדים של האשכול. בקטע הבא בנושא התקנת NVIDIA GPU Operator מפורטים שלבים לאימות התקנת ה-GPU וזיהויו על ידי מערכת ההפעלה.
גרסת דרייבר תואמת של NVIDIA: גרסת הדרייבר של NVIDIA שבה אתם משתמשים צריכה להיות תואמת ל-GPU, למערכת ההפעלה ולגרסת CUDA שבה האפליקציות שלכם משתמשות. יש לכם את האפשרויות הבאות להתקנת דרייבר של NVIDIA:
כדי להתקין את הגרסה המתאימה של מנהל ההתקן (דרייבר) של NVIDIA GPU, צריך להשתמש ב-NVIDIA GPU Operator, כמו שמתואר בקטעים הבאים.
משתמשים בדרייבר של NVIDIA שהותקן מראש בקובץ אימג' של המערכת.
כדי להתקין את הדרייבר של NVIDIA באופן ידני, פועלים לפי ההוראות שבמדריך למתחילים להתקנת דרייבר של NVIDIA.
Helm מגרסה 3.0.0 ואילך: מתקינים את ממשק שורת הפקודה של Helm לניהול חבילות בתחנת העבודה של האדמין. משתמשים ב-Helm כדי להתקין את NVIDIA GPU Operator. אפשר להריץ את הפקודות הבאות כדי להוריד ולהתקין את כלי שורת הפקודה של Helm:
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 \ && chmod 700 get_helm.sh \ && ./get_helm.sh
התקנה ואימות של NVIDIA GPU Operator
השלבים הבאים מנחים אתכם בתהליך ההתקנה של NVIDIA GPU Operator באשכול Bare Metal, ועוזרים לכם לוודא שהוא פועל עם ה-GPU שלכם:
כדי לקבל רשימה של אפיקי PCI במערכת עם השם NVIDIA, מריצים את הפקודה הבאה במכשירי GPU שמחוברים דרך PCIe (Peripheral Component Interconnect Express):
sudo lspci | grep NVIDIAהפלט אמור להיראות כך:
25:00.0 3D controller: NVIDIA Corporation Device 20b5 (rev a1)אתם יכולים להשתמש בכלי שורת הפקודה של NVIDIA System Management Interface (
nvidia-smi) בצומת נתון כדי לקבל מידע מפורט יותר על מכשירי ה-GPU:nvidia-smiהפלט אמור להיראות כך:
+---------------------------------------------------------------------------------------+ | NVIDIA-SMI 535.183.01 Driver Version: 535.183.1 CUDA Veersion 12.2 | |-----------------------------------------+----------------------+----------------------| | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+======================+======================| | 0 NVIDIA A100 80GB PCIe Off | 00000000:25:00.0 Off | 0 | | N/A 30C P0 44W / 300W | 0MiB / 81920MiB | 0% Default | | | | Disabled | +-----------------------------------------+----------------------+----------------------+ +---------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=======================================================================================| | No running processes found | +---------------------------------------------------------------------------------------+מוסיפים את מאגר NVIDIA Helm בתחנת העבודה של האדמין:
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \ && helm repo updateמתקינים את NVIDIA GPU Operator.
כשמתקינים את NVIDIA GPU Operator, יש שלוש וריאציות בסיסיות של פקודות:
מתקינים את NVIDIA GPU Operator עם הגדרות ברירת המחדל:
helm install --wait --generate-name \ -n gpu-operator --create-namespace \ nvidia/gpu-operator \ --set cdi.enabled=true \ --set cdi.default=trueמשתמשים בדגל
--setכדי להעביר קבוצה של צמדי מפתח/ערך שמופרדים בפסיקים, כדי לציין אפשרויות הגדרה:helm install --wait --generate-name \ -n gpu-operator --create-namespace \ nvidia/gpu-operator \ --set cdi.enabled=true \ --set cdi.default=true \ --set OPTION_1_NAME=OPTION_1_VALUE,OPTION_2_NAME=OPTION_2_VALUEרשימה מפורטת של אפשרויות ההגדרה מופיעה במאמר Common Chart Customization Options במסמכי התיעוד של NVIDIA. מידע על הלוגיסטיקה של השימוש בדגל
--setמופיע במאמר הפורמט והמגבלות של--setבמסמכי התיעוד של Helm.אם כבר התקנתם את הדרייבר של NVIDIA GPU בצמתים, צריך להשבית את התקנת הדרייבר:
כברירת מחדל, NVIDIA GPU Operator פורס את מנהל ההתקן העדכני או שצוין של ה-GPU בכל צמתי העובדים של ה-GPU באשכול. כדי להשתמש בקונטיינר של מנהל ההתקן (דרייבר) של NVIDIA GPU, כל צמתי העובדים עם GPU צריכים להריץ את אותה גרסת מערכת הפעלה. כדי לעקוף את הבעיה, אפשר להתקין ידנית דרייברים של GPU בצמתים ולהריץ את הפקודה
helm installעם--set driver.enabled=falseכדי למנוע את הפריסה של דרייברים על ידי NVIDIA GPU Operator.helm install --wait --generate-name \ -n gpu-operator --create-namespace \ nvidia/gpu-operator \ --set cdi.enabled=true \ --set cdi.default=true \ --set driver.enabled=false
תרחישי פריסה נפוצים ופקודות לדוגמה מופיעים במאמר תרחישי פריסה נפוצים במסמכי העזרה של NVIDIA.
אימות ייצוא משאבי ה-GPU:
אחרי שמפעילים את NVIDIA GPU Operator עם מנהל התקנים (דרייבר) של GPU ותוסף למכשיר, צריך לוודא שמספר ה-GPU מוגדר בצורה נכונה בשדה
Allocatableשל משאב הצומת.kubectl describe node GPU_NODE_NAME | grep Allocatable -A7מחליפים את
GPU_NODE_NAMEבשם של מכונת הצומת עם ה-GPU שאתם בודקים.הפלט אמור להיראות כך:
Allocatable: cpu: 127130m ephemeral-storage: 858356868519 hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 509648288Ki nvidia.com/gpu: 1 pods: 250כדי לוודא שה-GPU פועל, מריצים את עבודת ה-GPU לדוגמה הבאה, שמריצה את הפקודה
nvidia-smi:export NODE_NAME=GPU_NODE_NAME cat <<EOF | kubectl create --kubeconfig=CLUSTER_KUBECONFIG -f - apiVersion: batch/v1 kind: Job metadata: name: test-job-gpu spec: template: spec: runtimeClassName: nvidia containers: - name: nvidia-test image: nvidia/cuda:12.0.0-base-ubuntu22.04 command: ["nvidia-smi"] resources: limits: nvidia.com/gpu: 1 nodeSelector: kubernetes.io/hostname: ${NODE_NAME} restartPolicy: Never EOFמחליפים את
CLUSTER_KUBECONFIGבנתיב של קובץ ה-kubeconfig של האשכול.בודקים את היומנים של פלט עבודת הדגימה:
kubectl logs job/test-job-gpu --kubeconfig=CLUSTER_KUBECONFIGהפלט אמור להיראות כך:
+---------------------------------------------------------------------------------------+ | NVIDIA-SMI 535.183.01 Driver Version: 535.183.1 CUDA Veersion 12.2 | |-----------------------------------------+----------------------+----------------------| | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+======================+======================| | 0 NVIDIA A100 80GB PCIe Off | 00000000:25:00.0 Off | 0 | | N/A 30C P0 44W / 300W | 0MiB / 81920MiB | 0% Default | | | | Disabled | +-----------------------------------------+----------------------+----------------------+ +---------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=======================================================================================| | No running processes found | +---------------------------------------------------------------------------------------+
מגבלות
ההגבלות הבאות חלות כשמשתמשים ב-NVIDIA GPU Operator עם אשכולות שנוצרו באמצעות Google Distributed Cloud:
אם מתקינים גרסה עדכנית של NVIDIA GPU Operator, יכול להיות שההגדרות של containerd שהוחלו על ידי האופרטור יימחקו במהלך עדכונים או שדרוגים של אשכולות או של מאגרי צמתים.
משתמשים בממשק של מכשיר קונטיינר (CDI) לעומסי עבודה של GPU. בגרסאות קודמות של Google Distributed Cloud שמשתמשות ב-containerd 1.6, יכול להיות שחלק מהיכולות של CDI לא יהיו זמינות.
מאגרי צמתים של מאזן עומסים מריצים אוטומטית משימת עדכון כל 7 ימים. הפעולה הזו מחליפה את ההגדרות של containerd, כולל אלה שנוספו על ידי NVIDIA GPU Operator.
שיטות מומלצות
כדי לצמצם את הסיכוי לקונפליקטים ולבעיות בהגדרות של NVIDIA, מומלץ לנקוט באמצעי הזהירות הבאים:
לפני שמשדרגים או מעדכנים את האשכול או את מאגרי הצמתים, צריך לגבות את קובץ ההגדרות של containerd,
/etc/containerd/config.toml. הקובץ הזה מכיל את הגדרות זמן הריצה שלnvidia. אחרי שהשדרוג או העדכון מסתיימים בהצלחה, צריך לשחזר את הקובץconfig.tomlולהפעיל מחדש את containerd כדי ששינויים בהגדרות ייכנסו לתוקף.כדי למנוע בעיות או התנגשויות אפשריות בהגדרת containerd, אל תשתמשו בצמתי GPU כצמתי מאזן עומסים (
loadBalancer.nodePoolSpec).
תמיכה
אם אתם צריכים עזרה נוספת בנוגע לשימוש ב-GPU עם Google Distributed Cloud, אתם יכולים לפנות אל תמיכת הלקוחות של Cloud.
אם יש בעיות בהגדרה או בשימוש בחומרת GPU במערכת ההפעלה, אפשר לפנות ישירות לספק החומרה או לתמיכה של NVIDIA, אם רלוונטי.
דעתך חשובה לנו.