הפעלת מכונות עם מאיצי GPU

בדף הזה מוסבר איך להשתמש במאיצי חומרה של מעבדים גרפיים (GPU) של NVIDIA במופעים של מכונות וירטואליות (VM) של מערכת הפעלה שמותאמת לקונטיינרים.

סקירה כללית

באמצעות Compute Engine, אתם יכולים ליצור מכונות וירטואליות שמופעל בהן מערכת הפעלה שמותאמת לקונטיינרים עם מעבדי GPU שמחוברים אליהן. כשמריצים יחידות GPU ב-Compute Engine, אפשר להשתמש רק בשתי משפחות של מכונות: משפחה שעברה אופטימיזציה להאצה ומשפחה לשימוש כללי מסוג N1.

מעבדי 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 שנבחר.

אפשר גם להוסיף יחידות 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.

המאמרים הבאים