NVIDIA-GPUs einrichten und verwenden

Mit der Funktion Bring Your Own Node von Google Distributed Cloud (nur Software) auf Bare Metal können Sie Ihre fortschrittliche Hardware, einschließlich Maschinen mit GPUs, nutzen, um die beste Leistung und Flexibilität für Ihre Cluster zu erzielen.

In diesem Dokument wird beschrieben, wie Sie den NVIDIA GPU Operator installieren und verwenden, um mit Google Distributed Cloud erstellte Bare-Metal-Cluster für die Verwendung mit NVIDIA-GPUs einzurichten.

Der NVIDIA GPU-Operator verwendet das Operator Framework, um die NVIDIA-Softwarekomponenten zu verwalten, die zum Bereitstellen und Verwalten von GPU-Geräten erforderlich sind. Wir empfehlen die Verwendung des NVIDIA GPU-Operators aus folgenden Gründen:

  • Auswahl des GPU-Typs: Google Distributed Cloud (nur Software) ist mit einer Vielzahl von GPU-Typen kompatibel, die vom neuesten NVIDIA GPU Operator unterstützt werden.

  • Auswahl des unterstützten Betriebssystems: Für Cluster-Worker-Knoten kann jedes unterstützte Betriebssystem mit NVIDIA-GPUs verwendet werden. Sie haben die Möglichkeit, vorinstallierte GPU-Treiber oder die dynamische Treiberinstallation mit dem NVIDIA GPU Operator zu verwenden.

  • Auswahl von Bereitstellungsmodellen: Sie können NVIDIA-GPUs für jeden Clustertyp mit Worker-Knoten verwenden: Nutzercluster, eigenständige Cluster oder Hybridcluster.

Diese Seite richtet sich an IT-Administratoren und ‑Betreiber, die den Lebenszyklus der zugrunde liegenden technischen Infrastruktur verwalten. Weitere Informationen zu gängigen Rollen und Beispielaufgaben, auf die wir in Google Cloud -Inhalten verweisen, finden Sie unter Häufig verwendete GKE-Nutzerrollen und -Aufgaben.

Hinweise

Bevor Sie die Schritte in den folgenden Abschnitten ausführen, müssen Sie die folgenden Voraussetzungen erfüllen:

  • Betriebscluster: Sie benötigen einen funktionsfähigen Bare-Metal-Cluster, der mit Google Distributed Cloud erstellt wurde.

  • NVIDIA-GPUs: Prüfen Sie, ob die NVIDIA-GPUs auf den Worker-Knoten Ihres Clusters installiert sind. Der folgende Abschnitt zur Installation des NVIDIA GPU-Operators enthält Schritte, mit denen Sie prüfen können, ob die GPUs richtig installiert sind und von Ihrem Betriebssystem erkannt werden.

  • Kompatible NVIDIA-Treiberversion: Die von Ihnen verwendete NVIDIA-Treiberversion muss mit Ihrer GPU, Ihrem Betriebssystem und der CUDA-Version kompatibel sein, die von Ihren Anwendungen verwendet wird. Sie haben die folgenden Optionen für die Installation von NVIDIA-Treibern:

    • Verwenden Sie den NVIDIA GPU Operator, um die richtige Version des NVIDIA GPU-Treibers zu installieren, wie in den folgenden Abschnitten beschrieben.

    • Verwenden Sie den NVIDIA-Treiber, der in Ihrem Betriebssystem-Image vorinstalliert ist.

    • Folgen Sie der Anleitung im NVIDIA Driver Installation Quickstart Guide, um den NVIDIA-Treiber manuell zu installieren.

  • Helm-Version 3.0.0 oder höher: Installieren Sie die Helm-Befehlszeile für die Paketverwaltung auf Ihrer Administrator-Workstation. Sie verwenden Helm, um den NVIDIA GPU-Operator zu installieren. Mit den folgenden Befehlen können Sie das Helm-Befehlszeilentool herunterladen und installieren:

    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 installieren und überprüfen

Die folgenden Schritte führen Sie durch die Installation des NVIDIA GPU-Operators in Ihrem Bare-Metal-Cluster und helfen Ihnen, zu bestätigen, dass er mit Ihren GPUs funktioniert:

  1. Führen Sie für GPU-Geräte, die über Peripheral Component Interconnect Express (PCIe) verbunden sind, den folgenden Befehl aus, um eine Liste der System-PCI-Busse mit „NVIDIA“ im Namen zu erhalten:

    sudo lspci | grep NVIDIA
    

    Die Ausgabe sieht etwa so aus:

    25:00.0 3D controller: NVIDIA Corporation Device 20b5 (rev a1)
    
  2. Mit dem Befehlszeilentool nvidia-smi (NVIDIA System Management Interface) können Sie auf einem bestimmten Knoten detailliertere Informationen zu den GPU-Geräten abrufen:

    nvidia-smi
    

    Die Ausgabe sieht etwa so aus:

    +---------------------------------------------------------------------------------------+
    | 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                                                           |
    +---------------------------------------------------------------------------------------+
    
  3. Fügen Sie das NVIDIA-Helm-Repository auf der Administrator-Workstation hinzu:

    helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \
        && helm repo update
    
  4. Installieren Sie den NVIDIA GPU-Operator.

    Bei der Installation des NVIDIA GPU Operator gibt es drei grundlegende Befehlsvariationen:

    • Installieren Sie den NVIDIA GPU-Operator mit der Standardkonfiguration:

      helm install --wait --generate-name \
          -n gpu-operator --create-namespace \
          nvidia/gpu-operator
      
    • Mit dem Flag --set können Sie eine durch Kommas getrennte Gruppe von Schlüssel/Wert-Paaren übergeben, um Konfigurationsoptionen anzugeben:

      helm install --wait --generate-name \
          -n gpu-operator --create-namespace \
          nvidia/gpu-operator \
          --set OPTION_1_NAME=OPTION_1_VALUE,OPTION_2_NAME=OPTION_2_VALUE
      

      Eine detaillierte Liste der Konfigurationsoptionen finden Sie in der NVIDIA-Dokumentation unter Common Chart Customization Options (Häufige Optionen zur Diagrammanpassung). Informationen zur Logistik der Verwendung des Flags --set finden Sie in der Helm-Dokumentation unter The Format and Limitations of --set.

    • Deaktivieren Sie die Treiberinstallation, wenn Sie den NVIDIA-GPU-Treiber bereits auf Ihren Knoten installiert haben:

      Standardmäßig stellt der NVIDIA GPU Operator den neuesten oder angegebenen GPU-Treiber auf allen GPU-Worker-Knoten im Cluster bereit. Dazu müssen alle Worker-Knoten mit GPUs dieselbe Betriebssystemversion ausführen, um den NVIDIA-GPU-Treiber-Container verwenden zu können. Um dieses Problem zu umgehen, können Sie GPU-Treiber manuell auf Knoten installieren und den Befehl helm install mit --set driver.enabled=false ausführen, um zu verhindern, dass der NVIDIA GPU Operator Treiber bereitstellt.

      helm install --wait --generate-name \
          -n gpu-operator --create-namespace \
          nvidia/gpu-operator \
          --set driver.enabled=false
      

    Häufige Bereitstellungsszenarien und Beispielbefehle finden Sie in der NVIDIA-Dokumentation unter Common Deployment Scenarios.

  5. Export von GPU-Ressourcen prüfen:

    Nachdem der NVIDIA GPU Operator mit einem GPU-Treiber und einem Geräte-Plug-in installiert wurde und ordnungsgemäß ausgeführt wird, sollte die GPU-Anzahl im Feld Allocatable für die Knotenressource richtig konfiguriert sein.

    kubectl describe node GPU_NODE_NAME | grep Allocatable -A7
    

    Ersetzen Sie GPU_NODE_NAME durch den Namen des Knotencomputers mit der GPU, die Sie testen.

    Die Ausgabe sieht etwa so aus:

    Allocatable:
      cpu:                127130m
      ephemeral-storage:  858356868519
      hugepages-1Gi:      0
      hugepages-2Mi:      0
      memory:             509648288Ki
      nvidia.com/gpu:     1
      pods:               250
    
  6. Führen Sie den folgenden GPU-Beispieljob aus, um zu prüfen, ob die GPUs funktionieren. Dabei wird der Befehl nvidia-smi ausgeführt:

    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
    

    Ersetzen Sie CLUSTER_KUBECONFIG durch den Pfad der kubeconfig-Datei des Clusters.

  7. Prüfen Sie die Logs auf die Ausgabe des Beispieljobs:

    kubectl logs job/test-job-gpu --kubeconfig=CLUSTER_KUBECONFIG
    

    Die Ausgabe sieht etwa so aus:

    +---------------------------------------------------------------------------------------+
    | 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                                                           |
    +---------------------------------------------------------------------------------------+
    

Beschränkungen

Wenn Sie den NVIDIA GPU-Operator mit Clustern verwenden, die mit Google Distributed Cloud erstellt wurden, gelten die folgenden Einschränkungen:

  • Wenn Sie eine aktuelle Version von NVIDIA GPU Operator installieren, werden die vom Operator angewendeten containerd-Konfigurationen möglicherweise bei Cluster- oder Knotenpool-Updates oder ‑Upgrades überschrieben.

  • In unterstützten Versionen von Google Distributed Cloud wird die LTS-Version 1.6 von containerd installiert, in der das Container Device Interface (CDI) nicht aktiviert ist. Wenn Sie der Anleitung unter Support for Container Device Interface in der NVIDIA-Dokumentation folgen, funktioniert die nvidia-cdi-Laufzeit möglicherweise nicht. Der Cluster sollte weiterhin wie erwartet funktionieren, aber einige CDI-Funktionen sind möglicherweise nicht verfügbar.

  • Für Load Balancer-Knotenpools wird automatisch alle 7 Tage ein Updatejob ausgeführt. Bei diesem Job werden containerd-Konfigurationen überschrieben, einschließlich der vom NVIDIA GPU Operator hinzugefügten.

Best Practices

Um Konflikte und Probleme mit Ihren NVIDIA-Konfigurationen zu minimieren, empfehlen wir Ihnen, die folgenden Vorsichtsmaßnahmen zu ergreifen:

  • Sichern Sie die containerd-Konfigurationsdatei /etc/containerd/config.toml, bevor Sie den Cluster oder die Knotenpools upgraden oder aktualisieren. Diese Datei enthält die nvidia-Laufzeitkonfiguration. Stellen Sie die Datei config.toml wieder her, nachdem das Upgrade oder Update erfolgreich abgeschlossen wurde, und starten Sie containerd neu, damit alle Konfigurationsänderungen wirksam werden.

  • Um potenzielle Konflikte oder Probleme mit der containerd-Konfiguration zu vermeiden, sollten Sie GPU-Knoten nicht als Load-Balancer-Knoten (loadBalancer.nodePoolSpec) verwenden.

Support anfragen

Wenn Sie weitere Unterstützung bei der Verwendung von GPUs mit Google Distributed Cloud benötigen, wenden Sie sich an den Cloud Customer Care.

Bei Problemen im Zusammenhang mit der Einrichtung oder Verwendung von GPU-Hardware in Ihrem Betriebssystem wenden Sie sich an Ihren Hardwareanbieter oder gegebenenfalls direkt an den NVIDIA-Support.

Wir wissen Ihr Feedback sehr zu schätzen.