NVIDIA-GPUs einrichten und verwenden

Mit der Bring Your Own Node-Funktion der Distributed Cloud-Software nur für 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: Die Distributed Cloud-Software ist nur 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 in jedem Clustertyp mit Worker-Knoten verwenden: Nutzercluster, Standalone-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.

Hinweis

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

    Wenn Sie den NVIDIA GPU-Operator installieren, 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 \
          --set cdi.enabled=true \
          --set cdi.default=true
      
    • Mit dem Flag --set können Sie ein durch Kommas getrenntes Set von Schlüssel/Wert-Paaren übergeben, um Konfigurationsoptionen anzugeben:

      helm install --wait --generate-name \
          -n gpu-operator --create-namespace \
          nvidia/gpu-operator \
          --set cdi.enabled=true \
          --set cdi.default=true \
          --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. 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-Treibercontainer 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 cdi.enabled=true \
          --set cdi.default=true \
          --set driver.enabled=false
      

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

  5. GPU-Ressourcenexport prüfen:

    Nachdem der NVIDIA GPU Operator mit einem GPU-Treiber und 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 für die Beispieljobausgabe:

    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

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

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

  • Verwenden Sie das Container Device Interface (CDI) für GPU-Arbeitslasten. Bei früheren Versionen von Google Distributed Cloud, in denen containerd 1.6 verwendet wird, sind einige CDI-Funktionen möglicherweise nicht verfügbar.

  • Für Load Balancer-Knotenpools wird automatisch alle 7 Tage ein Update-Job ausgeführt. Mit 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 aktualisieren oder upgraden. Diese Datei enthält die nvidia-Laufzeitkonfiguration. Stellen Sie die Datei config.toml nach dem erfolgreichen Upgrade oder Update wieder her 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 mit der Einrichtung oder Verwendung von GPU-Hardware auf Ihrem Betriebssystem wenden Sie sich bitte an Ihren Hardwareanbieter oder gegebenenfalls direkt an den NVIDIA-Support.

Wir wissen Ihr Feedback sehr zu schätzen.