בדף הזה מוסבר איך להשתמש במאיצי חומרה של מעבדים גרפיים (GPU) של NVIDIA במופעים של מכונות וירטואליות (VM) של מערכת הפעלה שמותאמת לקונטיינרים.
סקירה כללית
באמצעות Compute Engine, אתם יכולים ליצור מכונות וירטואליות שמופעל בהן מערכת הפעלה שמותאמת לקונטיינרים עם מעבדי GPU שמחוברים אליהן. כשמריצים יחידות GPU ב-Compute Engine, אפשר להשתמש רק בשתי משפחות של מכונות: משפחה שעברה אופטימיזציה להאצה ומשפחה לשימוש כללי מסוג N1.
בסוגי מכונות שעברו אופטימיזציה למאיצים, לכל סוג מכונה מצורף מודל ספציפי של NVIDIA GPUs.
- למכונות מסוג A4 שעברו אופטימיזציה להאצה, מצורפים מעבדי GPU מסוג NVIDIA B200.
- לסוגי מכונות שעברו אופטימיזציה למאיצים מסוג A3 Ultra, מצורפים מעבדי GPU מסוג NVIDIA H200 141GB.
- לסוגי מכונות שעברו אופטימיזציה למאיצי A3, מצורפים מעבדי GPU של NVIDIA H100 בנפח 80GB.
- למכונות מסוג A2 שעברו אופטימיזציה להאצת ביצועים, מצורפים מעבדי GPU מסוג NVIDIA A100. האפשרויות האלה זמינות גם ב-A100 40GB וגם ב-A100 80GB.
- לסוגי מכונות שעברו אופטימיזציה למאיץ G2, מצורפים מעבדי GPU מסוג NVIDIA L4.
במכונות וירטואליות לשימוש כללי מסוג N1, אפשר לצרף את יחידות ה-GPU הבאות:
מעבדי GPU מספקים כוח מחשוב להפעלת משימות של למידה עמוקה, כמו זיהוי תמונות ועיבוד שפה טבעית, וגם משימות אחרות שדורשות הרבה כוח מחשוב, כמו קידוד מחדש של סרטונים ועיבוד תמונות.
Google Cloud מספקת חוויה חלקה להרצת עומסי עבודה של GPU בקונטיינרים במכונות וירטואליות של מערכת הפעלה שמותאמת לקונטיינרים, כדי שתוכלו ליהנות מתכונות אחרות של מערכת הפעלה שמותאמת לקונטיינרים, כמו אבטחה ומהימנות.
מידע נוסף על תרחישים לדוגמה לשימוש במעבדים גרפיים זמין במאמר מעבדים גרפיים ל-Cloud.
מידע על שימוש ב-GPU ב-Google Kubernetes Engine (GKE) זמין במאמר בנושא הפעלת GPU ב-GKE.
דרישות
כדי להריץ מעבדי GPU במכונות VM עם מערכת הפעלה שמותאמת לקונטיינרים, צריך לעמוד בדרישות הבאות:
קובצי אימג' של מערכת הפעלה שמותאמת לקונטיינרים ב-x86: רק קובצי אימג' של מערכת הפעלה שמותאמת לקונטיינרים שמבוססים על x86 תומכים בהרצת GPU. התכונה לא נתמכת בקובצי אימג' של מערכת הפעלה שמותאמת לקונטיינרים שמבוססים על Arm.
גרסת מערכת ההפעלה שמותאמת לקונטיינרים: כדי להריץ יחידות GPU במכונות וירטואליות של מערכת ההפעלה שמותאמת לקונטיינרים, אבן הדרך של מהדורת מערכת ההפעלה שמותאמת לקונטיינרים צריכה להיות אבן דרך של LTS, ומספר אבן הדרך צריך להיות 85 ומעלה.
מכסת GPU: כדי ליצור מכונות וירטואליות של מערכת הפעלה שמותאמת לקונטיינרים עם GPU, צריך לוודא שיש לכם מכסת GPU ב-Compute Engine באזור שבחרתם. כדי לוודא שיש לכם מספיק מכסת GPU בפרויקט, אפשר לעיין במאמר בנושא מכסות במסוף Google Cloud .
אם אתם צריכים מכסת GPU נוספת, אתם צריכים לבקש מכסת GPU במסוף Google Cloud . אם יש לכם חשבון לחיוב פעיל, הפרויקט יקבל באופן אוטומטי מכסת GPU אחרי שתשלחו את בקשת המכסה.
דרייברים של NVIDIA GPU: אתם צריכים להתקין בעצמכם דרייברים של NVIDIA GPU במכונות הווירטואליות של מערכת ההפעלה שמותאמת לקונטיינרים. בקטע הזה מוסבר איך להתקין את הדרייברים במכונות וירטואליות של מערכת הפעלה שמותאמת לקונטיינרים.
יצירת VM
בקטעים הבאים מוסבר איך להריץ יחידות GPU במכונות וירטואליות של מערכת הפעלה שמותאמת לקונטיינרים.
קודם כל, צריך מכונת VM עם מערכת הפעלה שמותאמת לקונטיינרים ועם מעבדי GPU. השיטה שבה משתמשים כדי ליצור מכונה וירטואלית תלויה בדגם ה-GPU שנבחר.
- כדי ליצור מכונה וירטואלית (VM) עם מערכת הפעלה שמותאמת לקונטיינרים (Container-Optimized OS) שמצורפים אליה GPU מסוג NVIDIA H100, A100 או L4, אפשר לעיין במאמר בנושא יצירת מכונה וירטואלית (VM) שמותאמת למאיץ.
- כדי ליצור מכונת VM עם מערכת הפעלה שמותאמת לקונטיינרים, שכוללת מעבדי GPU מסוג NVIDIA T4, P4, P100 או V100, אפשר לעיין במאמר בנושא יצירת מכונת VM מסוג N1 עם מעבדי GPU מצורפים.
אפשר גם להוסיף יחידות GPU למכונות וירטואליות קיימות של מערכת הפעלה שמותאמת לקונטיינרים.
כשיוצרים מכונות וירטואליות, חשוב לבחור תמונות או משפחות תמונות מcos-cloud פרויקט התמונות.
כדי לבדוק את כל יחידות ה-GPU שמצורפות למופעי מכונות וירטואליות של מערכת הפעלה שמותאמת לקונטיינרים, מריצים את הפקודה הבאה:
gcloud compute instances describe INSTANCE_NAME \
--project=PROJECT_ID \
--zone ZONE \
--format="value(guestAccelerators)"
מחליפים את מה שכתוב בשדות הבאים:
-
INSTANCE_NAME: השם של המופע החדש של המכונה הווירטואלית. -
PROJECT_ID: מזהה הפרויקט. -
zone: האזור של המופע של מכונה וירטואלית.
התקנה של דרייברים של מכשירי NVIDIA GPU
אחרי שיוצרים אינסטנס עם GPU אחד או יותר, המערכת צריכה מנהלי התקנים (drivers) כדי שהאפליקציות יוכלו לגשת למכשיר. במדריך הזה מוסבר איך להתקין דרייברים קנייניים של NVIDIA במכונות וירטואליות של מערכת הפעלה שמותאמת לקונטיינרים.
מערכת ההפעלה שמותאמת לקונטיינרים מספקת כלי מובנה cos-extensions כדי לפשט את תהליך ההתקנה של דרייבר NVIDIA. בהרצת כלי השירות, המשתמשים מסכימים לתנאי הסכם הרישיון של NVIDIA.
זיהוי גרסאות של דרייברים של GPU
לכל גרסה של תמונת מערכת הפעלה שמותאמת לקונטיינרים יש רשימה של גרסאות נתמכות של דרייבר NVIDIA GPU לכל סוג GPU, וגם דרייבר ברירת מחדל לכל סוג. רשימה מלאה של הגרסאות הנתמכות מופיעה בנתוני הגרסה של אבני הדרך העיקריות של LTS ב-מערכת הפעלה שמותאמת לקונטיינרים.
אפשר גם להריץ את הפקודה הבאה כדי לבדוק את כל הגרסאות של מנהלי ההתקנים של ה-GPU שנתמכות על ידי ה-GPU במופע של מכונת VM עם מערכת הפעלה שמותאמת לקונטיינרים:
sudo cos-extensions list
זיהוי הגרסה הנדרשת של CUDA toolkit
אם האפליקציות שלכם משתמשות ב-CUDA, אתם צריכים להתקין את ערכת הכלים של NVIDIA CUDA בקונטיינרים. כל גרסה של CUDA דורשת גרסה מינימלית של מנהל ההתקן של GPU או גרסה מאוחרת יותר. כדי לבדוק את גרסת מנהל ההתקן המינימלית של ה-GPU שנדרשת לגרסה של CUDA, אפשר לעיין במאמר בנושא CUDA Toolkit and Compatible Driver Versions. מוודאים שלגרסה של מערכת הפעלה שמותאמת לקונטיינרים שבה אתם משתמשים יש את הגרסה הנכונה של מנהל ההתקן של ה-GPU, שמתאימה לגרסה של CUDA שבה אתם משתמשים.
התקנת מנהל ההתקן
אפשר להתקין יחידות GPU באמצעות פקודות של מעטפת, סקריפטים להפעלה או cloud-init. בכל שלוש השיטות משתמשים בפקודה sudo cos-extensions install gpu כדי להתקין את דרייבר ה-GPU שמוגדר כברירת המחדל לגרסת ה-LTS של מערכת ההפעלה שמותאמת לקונטיינרים.
מעטפת
אחרי התחברות למכונות ה-VM של מערכת הפעלה שמותאמת לקונטיינרים, אפשר להריץ את הפקודה הבאה באופן ידני כדי להתקין מנהלי התקנים:
sudo cos-extensions install gpu
סקריפטים לטעינה בזמן ההפעלה
אפשר גם להתקין מנהלי התקנים של GPU באמצעות סקריפטים להפעלה. אפשר לספק את הסקריפט לטעינה בזמן ההפעלה כשיוצרים מכונות וירטואליות, או להחיל את הסקריפט על מכונות וירטואליות פעילות ואז להפעיל מחדש את מכונות ה-VM. כך אפשר להתקין מנהלי התקנים בלי להתחבר למכונות ה-VM. בנוסף, הוא מוודא שמנהלי ההתקנים של ה-GPU מוגדרים בכל הפעלה מחדש של מכונה וירטואלית.
הנה דוגמה לסקריפט לטעינה בזמן ההפעלה להתקנת מנהלי התקנים:
#! /bin/bash
sudo cos-extensions install gpu
Cloud-init
Cloud-init דומה לסקריפטים של הפעלה, אבל הוא חזק יותר. בדוגמה הבאה אפשר לראות איך מתקינים את הדרייבר של ה-GPU באמצעות cloud-init:
#cloud-config
runcmd:
- cos-extensions install gpu
באמצעות cloud-init אפשר לציין את התלות כך שהאפליקציות של ה-GPU יפעלו רק אחרי שהדרייבר יותקן. פרטים נוספים זמינים בקטע End-to-end: Running a GPU application on מערכת הפעלה שמותאמת לקונטיינרים.
מידע נוסף על השימוש ב-cloud-init במכונות וירטואליות של מערכת הפעלה שמותאמת לקונטיינרים זמין בדף יצירה והגדרה של מכונות וירטואליות.
במקרים מסוימים, מנהל ההתקן שמוגדר כברירת מחדל במערכת הפעלה שמותאמת לקונטיינרים לא עומד בדרישות המינימליות של מנהל ההתקן של ערכת הכלים CUDA או של דגם ה-GPU. במאמר גרסאות נדרשות של מנהלי התקנים (דרייברים) של NVIDIA מפורטות דרישות הגרסה לסוגים ספציפיים של GPU.
כדי להתקין גרסה ספציפית של מנהל התקן ל-GPU, מריצים את הפקודה הבאה:
sudo cos-extensions install gpu -- -version=DRIVER_VERSION
מחליפים את DRIVER_VERSION באחת מהאפשרויות הבאות:
-
default: התקנת דרייבר ברירת המחדל שמוגדר בגרסת מערכת הפעלה שמותאמת לקונטיינרים. הגרסה הזו מקבלת תיקוני באגים ועדכוני אבטחה. -
latest: מתקין את מנהל ההתקן העדכני ביותר שזמין במהדורה של מערכת ההפעלה שמותאמת לקונטיינרים. חשוב לדעת ששינוי כזה עלול לגרום לשינויים בתאימות בגלל עדכונים פוטנציאליים של גרסאות ראשיות בגרסאות של COS. - הגרסה המלאה: משתמשים באפשרות הזו כדי להצמיד גרסה ספציפית לעומסי עבודה שרגישים לשינויים במנהל ההתקן. לדוגמה, מציינים את הגרסה
535.183.01. - NVIDIA driver branch: מתקין את הדרייבר היציב העדכני ביותר בענף ספציפי של NVIDIA כדי להישאר מעודכנים לגבי עדכוני אבטחה ותיקוני באגים בענף הזה. לדוגמה, מציינים את הענף
R535. האפשרות הזו זמינה החל מגרסהcos-gpu-installer:v2.2.1.
כדי לראות את הגרסאות הזמינות לכל אחת מהאפשרויות האלה, מריצים את הפקודה לזיהוי גרסאות של מנהלי התקנים של GPU.
העברת פרמטרים למודולים של ליבת המערכת
אפשר להעביר פרמטרים ספציפיים למודול הליבה של NVIDIA במהלך ההתקנה באמצעות הדגל --module-arg. הדגל הזה שימושי להפעלה או להשבתה של תכונות מסוימות של הנהג. אפשר להשתמש בדגל כמה פעמים כדי להעביר כמה ארגומנטים.
לדוגמה, במכונה וירטואלית של COS, אפשר להשתמש בפקודה הבאה כדי להתקין את מנהל ההתקן של NVIDIA ולטעון את מודול הליבה nvidia.ko עם הפרמטר NVreg_EnableGpuFirmware=0.
sudo cos-extensions install gpu -- --module-arg nvidia.NVreg_EnableGpuFirmware=0
טעינה מראש של מנהל ההתקן
אתם יכולים לטעון מראש את הדרייבר של ה-GPU במופע של מערכת הפעלה שמותאמת לקונטיינרים גם כשלא מחובר מכשיר GPU. האפשרות הזו שימושית להכנת סביבות או לבדיקת הגדרות לפני חיבור של חומרה פיזית של GPU.
כדי לטעון מראש את מנהל ההתקן של ה-GPU, מריצים את הפקודה הבאה:
sudo cos-extensions install gpu -- -no-verify -target-gpu=GPU_DEVICE
הפקודה הזו נתמכת החל מגרסה cos-gpu-installer:v2.3.0. אלה הסימונים הרלוונטיים:
-no-verify: מוריד ומכין את קובצי הדרייבר, אבל מדלג על טעינת מודול הליבה ועל אימות ההתקנה.
-target-gpu: מציין את מכשיר ה-GPU כדי לוודא שהדרייבר הנכון נטען מראש, וכך למנוע בעיות תאימות כשמכשיר ה-GPU יצורף בהמשך. מחליפים אתGPU_DEVICEבדגם GPU ספציפי (לדוגמה,NVIDIA_L4) שמופיע בסקירה הכללית. אם לא מציינים את-target-gpu, מנהל התקן ברירת המחדל של ה-GPU ייטען מראש.
אימות ההתקנה
אפשר להריץ את הפקודות הבאות במופעי מכונות וירטואליות של מערכת הפעלה שמותאמת לקונטיינרים כדי לאמת ידנית את ההתקנה של מנהלי ההתקנים של ה-GPU. הפלט של הפקודה מציג את פרטי מכשירי ה-GPU, כמו מצב המכשירים וגרסת מנהל ההתקן.
# Make the driver installation path executable by re-mounting it.
sudo mount --bind /var/lib/nvidia /var/lib/nvidia
sudo mount -o remount,exec /var/lib/nvidia
/var/lib/nvidia/bin/nvidia-smi
הגדרת קונטיינרים לשימוש ב-GPU
אחרי שמתקינים את מנהלי ההתקנים של ה-GPU, אפשר להגדיר את הקונטיינרים כך שישתמשו ב-GPU. בדוגמה הבאה אפשר לראות איך מריצים אפליקציית CUDA במאגר Docker שמשתמש ב-/dev/nvidia0:
docker run \
--volume /var/lib/nvidia/lib64:/usr/local/nvidia/lib64 \
--volume /var/lib/nvidia/bin:/usr/local/nvidia/bin \
--device /dev/nvidia0:/dev/nvidia0 \
--device /dev/nvidia-uvm:/dev/nvidia-uvm \
--device /dev/nvidiactl:/dev/nvidiactl \
registry.k8s.io/cuda-vector-add:v0.1
אפשר להריץ את הקונטיינרים באמצעות cloud-init כדי לציין את התלות בין התקנת מנהל ההתקן לבין הקונטיינרים. פרטים נוספים זמינים בקטע End-to-end: Running a GPU application on מערכת הפעלה שמותאמת לקונטיינרים.
מקצה לקצה: הפעלת אפליקציית GPU במערכת הפעלה שמותאמת לקונטיינרים
בדוגמה הבאה מקצה לקצה מוצג איך להשתמש ב-cloud-init כדי להגדיר מכונות וירטואליות של מערכת הפעלה שמותאמת לקונטיינרים (Container-Optimized OS) שמקצות קונטיינר של אפליקציית GPU myapp:latest אחרי התקנת הדרייבר של ה-GPU:
#cloud-config
users:
- name: myuser
uid: 2000
write_files:
- path: /etc/systemd/system/install-gpu.service
permissions: 0644
owner: root
content: |
[Unit]
Description=Install GPU drivers
Wants=gcr-online.target docker.socket
After=gcr-online.target docker.socket
[Service]
User=root
Type=oneshot
ExecStart=cos-extensions install gpu
StandardOutput=journal+console
StandardError=journal+console
- path: /etc/systemd/system/myapp.service
permissions: 0644
owner: root
content: |
[Unit]
Description=Run a myapp GPU application container
Requires=install-gpu.service
After=install-gpu.service
[Service]
User=root
Type=oneshot
RemainAfterExit=true
ExecStart=/usr/bin/docker run --rm -u 2000 --name=myapp --device /dev/nvidia0:/dev/nvidia0 myapp:latest
StandardOutput=journal+console
StandardError=journal+console
runcmd:
- systemctl daemon-reload
- systemctl start install-gpu.service
- systemctl start myapp.service
מידע על ספריות NVIDIA CUDA-X
CUDA® היא פלטפורמת מחשוב מקבילי ומודל תכנות למעבדי GPU של NVIDIA. כדי להשתמש באפליקציות של CUDA, הספריות צריכות להיות בתמונה שבה אתם משתמשים. כדי להוסיף את ספריות NVIDIA CUDA-X, אפשר לבצע אחת מהפעולות הבאות:
משתמשים בתמונה עם ספריות NVIDIA CUDA-X מותקנות מראש. לדוגמה, אפשר להשתמש בקונטיינרים של למידה עמוקה של Google. בקונטיינרים האלה מותקנים מראש ה-frameworks העיקריים של מדעי הנתונים, הספריות והכלים של NVIDIA CUDA-X. לחלופין, תמונת CUDA של NVIDIA מכילה רק את ספריות NVIDIA CUDA-X.
ליצור תמונה משלכם ולהשתמש בה. במקרה כזה, צריך לכלול את
/usr/local/cuda-XX.X/lib64, שמכיל את ספריות NVIDIA CUDA-X, ואת/usr/local/nvidia/lib64, שמכיל את מנהלי ההתקנים של NVIDIA, במשתנה הסביבהLD_LIBRARY_PATH. במקרה של/usr/local/cuda-XX.X/lib64, שם הספרייה תלוי בגרסת האימג' שבה השתמשתם. לדוגמה, הספריות וכלי הניפוי באגים של NVIDIA CUDA-X בקונטיינרים של Docker יכולים להיות בנתיבים/usr/local/cuda-11.0/lib64ו-/usr/local/nvidia/bin, בהתאמה.
אבטחה
בדומה למודולים אחרים של ליבת המערכת במערכת הפעלה שמותאמת לקונטיינרים, מנהלי התקנים של GPU חתומים באופן מוצפן ומאומתים באמצעות מפתחות שמוטמעים בליבת מערכת ההפעלה שמותאמת לקונטיינרים. בניגוד לכמה הפצות אחרות, מערכת ההפעלה Container-Optimized OS לא מאפשרת למשתמשים לרשום את מפתח בעלי המכונה (MOK) שלהם ולהשתמש במפתחות כדי לחתום על מודולים מותאמים אישית של ליבת מערכת ההפעלה. הסיבה לכך היא לשמור על השלמות של ליבת מערכת ההפעלה שמותאמת לקונטיינרים ולצמצם את שטח הפנים להתקפה.
הגבלות
הגבלות על גרסאות של מערכת הפעלה שמותאמת לקונטיינרים
רק גרסה 85 ואילך של מערכת הפעלה שמותאמת לקונטיינרים LTS תומכות בכלי cos-extensions שמוזכר בקטע התקנת מנהלי התקנים (דרייברים) של מכשיר NVIDIA GPU. בגרסאות קודמות של מערכת הפעלה שמותאמת לקונטיינרים, אפשר להשתמש בכלי הקוד הפתוח cos-gpu-installer כדי להתקין מנהלי התקנים של GPU באופן ידני.
הגבלות על מכונות וירטואליות
למכונות וירטואליות עם GPU יש הגבלות ספציפיות שגורמות להן להתנהג באופן שונה מסוגים אחרים של מכונות וירטואליות. מידע נוסף מופיע בדף בנושא הגבלות על GPU ב-Compute Engine.
מכסה וזמינות
מעבדי GPU זמינים באזורים ותחומים ספציפיים. כשמבקשים הקצאת מכסות ל-GPU, צריך לקחת בחשבון את האזורים שבהם מתכוונים להריץ את מכונות ה-VM של מערכת הפעלה שמותאמת לקונטיינרים.
רשימה מלאה של האזורים והתחומים הרלוונטיים מופיעה במאמר GPU ב-Compute Engine. אפשר גם לראות את יחידות ה-GPU שזמינות באזור באמצעות Google Cloud CLI.
gcloud compute accelerator-types list
תמחור
למידע על תמחור של GPU, אפשר לעיין בדף התמחור של Compute Engine.
יכולת תמיכה
לכל גרסת הפצה של מערכת הפעלה שמותאמת לקונטיינרים יש לפחות גרסה אחת נתמכת של מנהל התקן (דרייבר) של NVIDIA GPU. צוות מערכת הפעלה שמותאמת לקונטיינרים בודק את התאימות של דרייברים נתמכים של GPU לגרסה של מערכת הפעלה שמותאמת לקונטיינרים לפני שהיא יוצאת לשוק. יכול להיות שגרסאות חדשות של הדרייברים של NVIDIA GPU יהיו זמינות מעת לעת. גרסאות מסוימות של דרייברים של GPU לא יעמדו בדרישות של מערכת הפעלה שמותאמת לקונטיינרים, ואין ערובה לכך שהן יעמדו בדרישות בלוח הזמנים שנקבע.
כשצוות מערכת הפעלה שמותאמת לקונטיינרים משיק גרסה חדשה בגרסת אבן דרך, אנחנו מנסים לתמוך בגרסה העדכנית ביותר של דרייבר ל-GPU בענף הדרייבר המתאים. העדכון הזה נועד לתקן פגיעויות (CVE) שזוהו בדרייברים של GPU בהקדם האפשרי.
אם לקוח של מערכת הפעלה שמותאמת לקונטיינרים מזהה בעיה שקשורה לדרייברים של NVIDIA GPU, הלקוח צריך לפנות ישירות ל-NVIDIA לקבלת תמיכה. אם הבעיה לא ספציפית לדרייבר, המשתמשים יכולים לפתוח בקשה ב-Cloud Customer Care.
המאמרים הבאים
- מידע נוסף על הפעלת קונטיינרים במופע של מכונה וירטואלית עם מערכת הפעלה שמותאמת לקונטיינרים
- מידע נוסף על יחידות GPU ב-Compute Engine
- מידע נוסף על בקשה להגדלת מכסת ה-GPU