Instanzen mit GPU-Beschleunigern ausführen

Auf dieser Seite wird beschrieben, wie Sie die Hardwarebeschleuniger für Grafikprozessoren (GPU) von NVIDIA für Container-Optimized OS-VM-Instanzen (virtuelle Maschine) verwenden.

Übersicht

Mit Compute Engine können Sie VM-Instanzen mit Container-Optimized OS erstellen, an die GPUs angehängt sind. Sie können nur zwei Maschinenfamilien verwenden, wenn Sie GPUs in Compute Engine ausführen: beschleunigungsoptimiert und N1 für allgemeine Zwecke.

  • Bei beschleunigungsoptimierten Maschinentypen ist jedem Maschinentyp ein bestimmtes NVIDIA-GPU-Modell angehängt.

    • Bei beschleunigungsoptimierten A4-Maschinentypen sind NVIDIA B200-GPUs angehängt.
    • Bei beschleunigungsoptimierten A3 Ultra-Maschinentypen sind NVIDIA H200-GPUs mit 141 GB angehängt.
    • Bei beschleunigungsoptimierten A3-Maschinentypen sind NVIDIA H100-GPUs mit 80 GB angehängt.
    • Bei beschleunigungsoptimierten A2-Maschinentypen sind NVIDIA A100-GPUs angehängt. Diese sind in den Optionen A100 mit 40 GB sowie A100 mit 80 GB verfügbar.
    • Bei beschleunigungsoptimierten G2-Maschinentypen sind NVIDIA L4-GPUs angehängt.
  • Bei N1-Maschinentypen für allgemeine Zwecke können Sie die folgenden GPUs anhängen:

GPUs bieten Rechenleistung für Deep-Learning-Aufgaben wie Bilderkennung, Natural Language Processing und andere rechenintensive Aufgaben wie Videotranscodierung und Bildverarbeitung.

Cloud de Confiance by S3NS bietet Ihnen eine nahtlose Ausführung Ihrer GPU-Arbeitslasten in Containern auf VM-Instanzen mit Container-Optimized OS, sodass Sie verschiedene andere Container-Optimized OS-Funktionen wie Sicherheit und Zuverlässigkeit nutzen können.

Weitere Informationen zu den Anwendungsfällen für GPUs finden Sie unter Cloud-GPUs.

Informationen zur Verwendung von GPUs in Google Kubernetes Engine (GKE) finden Sie unter GPUs in GKE ausführen.

Voraussetzungen

Für die Ausführung von GPUs auf Container-Optimized OS-VM-Instanzen gelten folgende Anforderungen:

  • Container-Optimized OS-x86-Images:Nur x86-basierte Container-Optimized OS-Images unterstützen die Ausführung von GPUs. Arm-basierte Container-Optimized OS-Images unterstützen diese Funktion nicht.

  • Container-Optimized OS-Version: Damit GPUs auf Container-Optimized OS-VM Instanzen ausgeführt werden können, muss der Container-Optimized OS-Release-Meilenstein ein LTS-Meilenstein und die Meilensteinnummer mindestens 85 sein.

  • GPU-Kontingent: Sie müssen ein Compute Engine-GPU-Kontingent in der ausgewählten Zone haben, bevor Sie VM-Instanzen für Container-Optimized OS mit GPUs erstellen können. Auf der Seite Kontingente in der Console können Sie prüfen, ob in Ihrem Projekt ein ausreichendes GPU-Kontingent vorhanden ist. Weitere Informationen finden Sie unter Kontingente in der Cloud de Confiance Console.

    Wenn Sie ein höheres GPU-Kontingent benötigen, können Sie in der Cloud de Confiance Console eine Aufstockung des GPU-Kontingents anfordern . Falls Sie ein Abrechnungskonto eingerichtet haben, erhält Ihr Projekt nach dem Einreichen Ihrer Kontingentanfrage automatisch ein GPU-Kontingent.

  • NVIDIA-GPU-Treiber:Sie müssen NVIDIA GPU-Treiber manuell auf Ihren VM-Instanzen mit Container-Optimized OS installieren. In diesem Abschnitt wird erläutert, wie Sie die Treiber auf VM-Instanzen von Container-Optimized OS installieren.

VM erstellen

In den folgenden Abschnitten wird erläutert, wie GPUs auf Container-Optimized OS-VMs ausgeführt werden.

Zuerst benötigen Sie eine VM-Instanz mit Container-Optimized OS und GPUs. Die Methode zum Erstellen einer VM hängt vom ausgewählten GPU-Modell ab.

Sie können auch vorhandenen Container-Optimized OS-VM-Instanzen GPUs hinzufügen.

Denken Sie beim Erstellen von VMs daran, Images oder Image-Familien aus dem Image-Projekt cos-cloud auszuwählen.

Führen Sie den folgenden Befehl aus, um alle GPUs zu prüfen, die Ihren aktuellen VM-Instanzen mit Container-Optimized OS zugeordnet sind:

gcloud compute instances describe INSTANCE_NAME \
    --project=PROJECT_ID \
    --zone ZONE \
    --format="value(guestAccelerators)"

Dabei gilt:

  • INSTANCE_NAME ist der Name der neuen VM-Instanz.
  • PROJECT_ID ist Ihre Projekt-ID.
  • zone ist die Zone der VM-Instanz.

NVIDIA-GPU-Gerätetreiber installieren

Nachdem Sie eine Instanz mit einer oder mehreren GPUs erstellt haben, benötigt Ihr System Gerätetreiber, damit Ihre Anwendungen auf das Gerät zugreifen können. In dieser Anleitung wird beschrieben, wie Sie NVIDIA-eigenständige Treiber auf Container-Optimized OS-VM-Instanzen installieren können.

Container-Optimized OS stellt dasintegrierte Dienstprogramm cos-extensions zur Vereinfachung der Installation von NVIDIA-Treibern bereit. Durch Ausführen des Dienstprogramms stimmen Nutzer der NVIDIA-Lizenzvereinbarung zu.

GPU-Treiberversionen identifizieren

Jede Version eines Container-Optimized OS-Images enthält eine Liste der unterstützten NVIDIA-GPU-Treiberversionen für jeden GPU-Typ sowie einen Standardtreiber für jeden Typ. Eine vollständige Liste der unterstützten Versionen finden Sie in den Versionshinweisen zu den wichtigsten LTS-Meilensteinen für Container-Optimized OS.

Sie können auch alle GPU-Treiberversionen prüfen, die von der GPU auf Ihrer Container-Optimized OS-VM-Instanz unterstützt werden. Führen Sie dazu folgenden Befehl aus:

sudo cos-extensions list

Erforderliche CUDA-Toolkit-Version identifizieren

Wenn Ihre Anwendungen CUDA verwenden, installieren Sie das CUDA-Toolkit von NVIDIA in Ihren Containern. Für jede CUDA-Version ist mindestens eine GPU-Treiberversion oder eine neuere Version erforderlich. Informationen zum Prüfen der für Ihre CUDA-Version erforderlichen Mindest-GPU-Treiberversion finden Sie unter CUDA-Toolkit und kompatible Treiberversionen. Achten Sie darauf, dass die von Ihnen verwendete Container-Optimized OS-Version die GPU-Treiberversion für die von Ihnen verwendete CUDA-Version hat.

Treiber installieren

Sie können GPUs entweder mit Shell-Befehlen, Startskripts oder cloud-init installieren. Alle drei Methoden verwenden den Befehl sudo cos-extensions install gpu, um den Standard-GPU-Treiber für Ihre Container-Optimized OS-LTS-Version zu installieren.

Shell

Nach dem Herstellen einer Verbindung zu Ihren Container-Optimized OS-VM-Instanzen, können Sie folgenden Befehl manuell ausführen, um Treiber zu installieren:

sudo cos-extensions install gpu

Startskripts

Sie können GPU-Treiber auch mithilfe von Startskripts installieren. Sie können das Startskript angeben , wenn Sie VM-Instanzen erstellen, oder das Skript auf laufende VM-Instanzen anwenden und die VMs dann neu starten. So können Sie Treiber installieren, ohne eine Verbindung zu den VMs herzustellen. Außerdem werden die GPU-Treiber bei jedem VM-Neustart konfiguriert.

Das folgende Beispiel zeigt ein Startskript zum Installieren von Treibern:

#! /bin/bash

sudo cos-extensions install gpu

Cloud-init

"cloud-init" ähnelt Startskripts, ist jedoch leistungsfähiger. Im folgenden Beispiel wird gezeigt, wie Sie GPU-Treiber über cloud-init installieren:

#cloud-config

runcmd:
  - cos-extensions install gpu

Mit cloud-init können Sie die Abhängigkeiten angeben, sodass Ihre GPU-Anwendungen erst ausgeführt werden, nachdem der Treiber installiert wurde. Weitere Informationen finden Sie im Abschnitt End-to-End: GPU-Anwendung auf Container-Optimized-OS ausführen.

Weitere Informationen zur Verwendung von cloud-init auf VM Instanzen mit Container-Optimized OS finden Sie auf der Seite Instanzen erstellen und konfigurieren.

In einigen Fällen erfüllt der in Container-Optimized OS enthaltene Standardtreiber nicht die Mindestanforderungen an den Treiber Ihres CUDA-Toolkits oder Ihres GPU-Modells. Unter Erforderliche NVIDIA-Treiber versionen finden Sie die Versionsanforderungen für bestimmte GPU-Typen.

Führen Sie den folgenden Befehl aus, um eine bestimmte GPU-Treiberversion zu installieren:

sudo cos-extensions install gpu -- -version=DRIVER_VERSION

Ersetzen Sie DRIVER_VERSION durch eine der folgenden Optionen:

  • default: Installiert den Standardtreiber, der vom Container-Optimized OS-Release festgelegt wurde. Diese Version erhält Fehlerbehebungen und Sicherheitsupdates.
  • latest: Installiert den neuesten Treiber, der im Container-Optimized OS-Release verfügbar ist. Beachten Sie, dass dies aufgrund potenzieller Hauptversionsupdates in COS-Releases zu Kompatibilitätsänderungen führen kann.
  • Vollständige Version: Verwenden Sie diese Option, um eine bestimmte Version für Arbeitslasten festzulegen, die empfindlich auf Treiberänderungen reagieren. Geben Sie beispielsweise die Version 535.183.01 an.
  • NVIDIA-Treiberzweig: Installiert den neuesten stabilen Treiber in einem bestimmten NVIDIA-Zweig, um Sicherheitsupdates und Fehlerbehebungen in diesem Zweig zu erhalten. Geben Sie beispielsweise den Zweig R535 an. Diese Option ist ab cos-gpu-installer:v2.2.1 verfügbar.

Führen Sie den Befehl zum Identifizieren von GPU-Treiberversionen aus, um die verfügbaren Versionen für jede dieser Optionen zu sehen.

Parameter an die Kernel-Module übergeben

Sie können bei der Installation bestimmte Parameter an das NVIDIA-Kernelmodul übergeben. Verwenden Sie dazu das Flag --module-arg. Dieses Flag ist nützlich, um bestimmte Treiberfunktionen zu aktivieren oder zu deaktivieren. Das Flag kann mehrmals verwendet werden, um mehrere Argumente zu übergeben.

Auf einer COS-VM können Sie beispielsweise den folgenden Befehl verwenden, um den NVIDIA-Treiber zu installieren und das Kernelmodul nvidia.ko mit dem Parameter NVreg_EnableGpuFirmware=0 zu laden.

sudo cos-extensions install gpu -- --module-arg nvidia.NVreg_EnableGpuFirmware=0

Treiber vorab laden

Sie können den GPU-Treiber auf Ihrer Container-Optimized OS-Instanz vorab laden, auch wenn kein GPU-Gerät angehängt ist. Dies ist nützlich, um Umgebungen vorzubereiten oder Konfigurationen zu testen, bevor Sie physische GPU-Hardware anhängen.

Führen Sie den folgenden Befehl aus, um den GPU-Treiber vorab zu laden:

sudo cos-extensions install gpu -- -no-verify -target-gpu=GPU_DEVICE

Dieser Befehl wird ab cos-gpu-installer:v2.3.0 unterstützt. Die folgenden Flags gelten:

  • -no-verify: Lädt die Treiberdateien herunter und bereitet sie vor, überspringt aber das Laden des Kernelmoduls und die Installationsprüfung.

  • -target-gpu: Gibt das GPU-Gerät an, um sicherzustellen, dass der richtige Treiber vorab geladen wird. So werden Kompatibilitätsprobleme verhindert, wenn das GPU-Gerät später angehängt wird. Ersetzen Sie GPU_DEVICE durch ein bestimmtes GPU-Modell (z. B. NVIDIA_L4), das in der Übersicht aufgeführt ist. Wenn -target-gpu nicht angegeben ist, wird der Standard-GPU-Treiber vorab geladen.

Installation überprüfen

Sie können auf Ihren VM-Instanzen mit Container-Optimized OS folgende Befehle ausführen, um die Installation der GPU-Treiber manuell zu prüfen: Die Ausgabe des Befehls zeigt die GPU-Geräteinformationen, z. B. Gerätestatus und Treiberversion.

# 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

Container für die Nutzung von GPUs konfigurieren

Nachdem die GPU-Treiber installiert sind, können Sie Container so konfigurieren, dass sie GPUs verwenden. Das folgende Beispiel zeigt, wie Sie eine CUDA-Anwendung in einem Docker-Container ausführen, der /dev/nvidia0 verwendet:

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

Sie können Ihre Container über cloud-init ausführen, um die Abhängigkeit zwischen der Treiberinstallation und den Containern anzugeben. Weitere Informationen finden Sie im Abschnitt End-to-End: GPU-Anwendung auf Container-Optimized-OS ausführen.

End-to-End: GPU-Anwendung auf Container-Optimized OS ausführen

Im folgenden End-to-End-Beispiel wird gezeigt, wie Sie mithilfe von cloud-init Container-Optimized OS-VM-Instanzen konfigurieren, die einen GPU-Anwendungscontainer myapp:latest bereitstellen, nachdem der GPU-Treiber installiert wurde:

#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

Informationen zu NVIDIA CUDA-X-Bibliotheken

CUDA® ist die NVIDIA-Plattform für paralleles Computing und das Programmiermodell für GPUs. Zur Verwendung von CUDA-Anwendungen müssen die Bibliotheken in dem von Ihnen verwendeten Image vorhanden sein. Sie haben folgende Möglichkeiten, die NVIDIA CUDA-X-Bibliotheken hinzuzufügen:

  • Verwenden Sie ein Image mit den vorinstallierten NVIDIA CUDA-X-Bibliotheken. Sie können beispielsweise Deep Learning Container von Google verwenden. In diesen Containern werden die wichtigsten Data-Science-Frameworks, die NVIDIA CUDA-X-Bibliotheken und die Tools vorinstalliert. Alternativ enthält das CUDA-Image von NVIDIA nur die NVIDIA CUDA-X-Bibliotheken.

  • Erstellen und verwenden Sie ein eigenes Image. Fügen Sie in diesem Fall /usr/local/cuda-XX.X/lib64 mit den NVIDIA CUDA-X-Bibliotheken und /usr/local/nvidia/lib64 mit den NVIDIA-Gerätetreibern in die Umgebungsvariable LD_LIBRARY_PATH ein. Der Name des Verzeichnisses hängt bei /usr/local/cuda-XX.X/lib64 von der Version des verwendeten Images ab. Zum Beispiel können sich NVIDIA CUDA-X-Bibliotheken und Dienstprogramme zur Fehlerbehebung in Docker-Containern unter /usr/local/cuda-11.0/lib64 bzw. /usr/local/nvidia/bin befinden.

Sicherheit

Wie andere Kernel-Module auf Container-Optimized OS sind GPU-Treiber kryptografisch verschlüsselt und werden durch Schlüssel verifiziert, die in den Container-Optimized OS-Kernel eingebunden sind. Im Gegensatz zu anderen Distributionen ist es bei Container-Optimized OS nicht möglich, dass Nutzer ihren Computerinhaberschlüssel (MOK) registrieren und damit benutzerdefinierte Kernel-Module signieren. Dadurch werden die Integrität des Kernels des Container-Optimized OS sichergestellt und die Angriffsoptionen reduziert.

Beschränkungen

Versionseinschränkungen des Container-Optimized OS

Nur das Container-Optimized OS LTS-Meilenstein-Release 85 und höher unterstützen das cos-extensions Dienstprogramm, das im Abschnitt NVIDIA-GPU-Treiber installieren erwähnt wird. Verwenden Sie für frühere Meilenstein-Releases von Container-Optimized OS das cos-gpu-installer Open-Source-Tool, um GPU-Treiber manuell zu installieren.

Einschränkungen für VM-Instanzen

VM-Instanzen mit GPUs unterliegen bestimmten Beschränkungen. Daher verhalten sie sich anders als andere Instanztypen. Weitere Informationen finden Sie auf der Compute Engine-Seite GPU-Einschränkungen.

Kontingent und Verfügbarkeit

GPUs sind in bestimmten Regionen und Zonen verfügbar. Berücksichtigen Sie also bei Ihrer GPU-Kontingent die Regionen, in denen Sie Ihre VM-Instanzen mit Container-Optimized-OS ausführen möchten.

Eine vollständige Liste der betreffenden Regionen und Zonen finden Sie unter GPUs in Compute Engine. Mit dem Google Cloud CLI können Sie auch GPUs aufrufen, die in Ihrer Zone verfügbar sind.

gcloud compute accelerator-types list

Preise

GPU-Preiseinformationen finden Sie auf der Seite Compute Engine-Preise.

Support

Jede Release-Version des Container-Optimized OS hat mindestens eine unterstützte NVIDIA GPU-Treiberversion. Das Container-Optimized-OS-Team erfüllt die unterstützten GPU-Treiber vor der Veröffentlichung mit der Version des Container-Optimized-OS, um sicherzustellen, dass sie kompatibel sind. Es werden gelegentlich neue Versionen der NVIDIA-GPU-Treiber bereitgestellt. Einige GPU-Treiberversionen werden nicht für Container-Optimized OS qualifiziert. Der Zeitplan für die Qualifizierung wird nicht garantiert.

Wenn das Container-Optimized OS-Team eine neue Version per Release-Meilenstein veröffentlicht, versuchen wir, die neueste GPU-Treiberversion im entsprechenden Treiberzweig zu unterstützen. Damit werden Sicherheitslücken behoben, die in GPU-Treibern festgestellt werden.

Wenn ein Kunde mit Container-Optimized-OS ein Problem feststellt, das sich auf die NVIDIA-GPU-Treiber bezieht, muss der Kunde direkt mit NVIDIA zusammenarbeiten. Wenn das Problem nicht treiberspezifisch ist, können Nutzer eine Anfrage beim Cloud Customer Care stellen.

Nächste Schritte