Instanzen mit GPU-Beschleunigern ausführen

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

Übersicht

In Compute Engine können Sie Container-Optimized OS-VM-Instanzen erstellen, die mit NVIDIA Tesla K80-, P100-, P4-, V100- und T4-GPUs ausgestattet sind. GPUs bieten Rechenleistung für Deep-Learning-Aufgaben wie Bilderkennung, Natural Language Processing und andere rechenintensive Aufgaben wie Videotranscodierung und Bildverarbeitung.

Google bietet Nutzern eine nahtlose Ausführung ihrer GPU-Arbeitslasten in Docker-Containern auf VM-Instanzen mit Container-Optimized-OS, sodass Nutzer verschiedene andere Container-Optimized OS-Funktionen wie Sicherheit und Zuverlässigkeit nutzen können. ,

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

Informationen zum Verwenden 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:

  • Version des Container-Optimized OS: Um GPUs auf Container-Optimized OS-VM-Instanzen auszuführen, muss der Meilenstein-Release des Container-Optimized OS ein LTS-Meilenstein und die Meilensteinnummer mindestens 85 sein.

  • GPU-Kontingent: Sie müssen ein Compute Engine-GPU-Kontingent in Ihrer gewünschten Zone haben, bevor Sie VM-Instanzen für Container-Optimized OS mit GPUs erstellen können. Auf der Seite Kontingente der Google Cloud Console können Sie prüfen, ob in Ihrem Projekt ein ausreichendes GPU-Kontingent vorhanden ist.

    Wenn Sie ein höheres GPU-Kontingent benötigen, müssen Sie in der Cloud 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.

Erste Schritte: GPUs auf Container-Optimized OS ausführen

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

Zuerst benötigen Sie eine VM-Instanz mit Container-Optimized OS und GPUs. Sie können entweder eine Container-Optimized OS-VM-Instanz mit einer GPU erstellen oder GPUs auf einer vorhandenen Container-Optimized OS-VM-Instanz hinzufügen. Denken Sie beim Erstellen von VM-Instanzen 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-Treiberversion identifizieren

Jede Version eines Container-Optimized OS-Images hat eine standardmäßig unterstützte NVIDIA GPU-Treiberversion. In den Versionshinweisen zu den wichtigsten LTS-Meilensteinen für Container-Optimized OS finden Sie die standardmäßig unterstützte Version.

Sie können auch alle unterstützten GPU-Treiberversionen prüfen. Führen Sie dazu folgenden Befehl auf Ihrer VM-Instanz unter dem Container-Optimized OS aus:

cos-extensions list

CUDA-Toolkit installieren

Wenn Ihre Anwendungen CUDA verwenden, installieren Sie das CUDA-Toolkit von NVIDIA in Ihren Docker-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 über Shell-Befehle installieren

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

cos-extensions install gpu

Treiber über Startskripts installieren

Sie können GPU-Treiber auch mithilfe von Startskripts installieren. Sie können das Startskript angeben, wenn Sie VM-Instanzen erstellen, das Skript auf laufende VM-Instanzen anwenden und die VMs dann neu starten, um die Option zu aktivieren. Auf diese Weise 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

cos-extensions install gpu

Treiber über cloud-init installieren

"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.

Installation prüfen

Sie können die folgenden Befehle auf Ihren Container-Optimized OS-VM-Instanzen ausführen, um die Installation der GPU-Treiber manuell zu prüfen. Die Ausgabe des Befehls zeigt die GPU-Geräteinformationen, z. B. den Gerätestatus und die 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

Docker-Container für die Nutzung von GPUs konfigurieren

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

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 \
  gcr.io/google_containers/cuda-vector-add:v0.1

Sie können Ihre Docker-Container über cloud-init ausführen, um die Abhängigkeit zwischen der Treiberinstallation und den Docker-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

CUDA-Bibliotheken

Die NVIDIA-Gerätetreiber, die Sie auf Ihren Container-Optimized OS-VM-Instanzen installieren, enthalten die CUDA-Bibliotheken.

Das vorherige Beispiel zeigt außerdem, wie Sie CUDA-Bibliotheken und Aufgaben zur Fehlerbehebung in Docker-Containern unter /usr/local/nvidia/lib64 bzw. /usr/local/nvidia/bin bereitstellen.

CUDA-Anwendungen, die in Docker-Containern ausgeführt werden, die NVIDIA-GPUs nutzen, müssen CUDA-Bibliotheken dynamisch erkennen. Hierfür muss /usr/local/nvidia/lib64 in der Umgebungsvariable LD_LIBRARY_PATH angegeben werden.

Verwenden Sie Ubuntu-basierte CUDA Docker-Basis-Images für CUDA-Anwendungen unter dem Container-Optimized OS, wobei LD_LIBRARY_PATH bereits entsprechend festgelegt ist.

Security

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 Open-Source-Tool cos-gpu-installer, 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 gcloud-Befehlszeilentool können Sie ebenfalls GPUs auflisten, 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 von 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 sind nicht für Container-Optimized OS qualifiziert und der Zeitplan der 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 bei Cloud Customer Care stellen.

Nächste Schritte