היבט bring your own node בתוכנת Distributed Cloud רק ל-Bare Metal מאפשר לכם לנצל את החומרה המתקדמת שלכם, כולל מכונות עם מעבדי GPU, כדי להשיג את הביצועים והגמישות הטובים ביותר עבור האשכולות שלכם.
במאמר הזה מוסבר איך להתקין את NVIDIA GPU Operator ולהשתמש בו כדי להגדיר אשכולות Bare Metal שנוצרו באמצעות Google Distributed Cloud לשימוש עם GPU של NVIDIA.
ה-NVIDIA GPU Operator משתמש ב-Operator Framework כדי לנהל את רכיבי התוכנה של NVIDIA שנדרשים להקצאה ולניהול של מכשירי GPU. מומלץ להשתמש באופרטור NVIDIA GPU כדי ליהנות מהגמישות והיתרונות הבאים:
בחירה של סוג ה-GPU: תוכנת Distributed Cloud תואמת רק למגוון רחב של סוגי GPU שנתמכים על ידי NVIDIA GPU Operator העדכני.
בחירה של מערכת הפעלה נתמכת: צמתי עובד באשכול יכולים להשתמש בכל מערכת הפעלה (OS) נתמכת עם מעבדי GPU של NVIDIA, ויש לכם אפשרות להשתמש במנהלי התקנים (דרייברים) של GPU שהותקנו מראש או בהתקנה דינמית של דרייברים באמצעות NVIDIA GPU Operator.
בחירה בין מודלים של פריסה: אתם יכולים להשתמש ב-GPU של NVIDIA בכל סוג של אשכול עם צמתי עבודה: אשכולות משתמשים, אשכולות עצמאיים או אשכולות היברידיים.
הדף הזה מיועד לאדמינים ולמפעילים בתחום ה-IT שמנהלים את מחזור החיים של תשתית טכנולוגית בסיסית. מידע נוסף על תפקידים נפוצים ודוגמאות למשימות שאנחנו מתייחסים אליהן בתוכן של Google Cloud זמין במאמר תפקידי משתמשים נפוצים ומשימות ב-GKE.
לפני שמתחילים
לפני שמבצעים את השלבים שבקטעים הבאים, צריך לוודא שהדרישות הבאות מוכנות:
קלאסטר תפעולי: צריך לוודא שיש לכם קלאסטר פיזי שנוצר באמצעות Google Distributed Cloud.
יחידות GPU של NVIDIA: מוודאים שיחידות ה-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 Customer Care.
אם יש בעיות שקשורות להגדרה או לשימוש בחומרת GPU במערכת ההפעלה, אפשר לפנות לספק החומרה או ישירות לתמיכה של NVIDIA, אם רלוונטי.
המשוב שלך חשוב לנו.