GPU-Arbeitslasten verwalten

Auf dieser Seite wird beschrieben, wie Sie GPU-Arbeitslasten in Google Distributed Cloud Connected verwalten. Damit Sie diese Funktion nutzen können, benötigen Sie eine verbundene Hardwarekonfiguration für Distributed Cloud, die GPUs enthält. Weitere Informationen finden Sie unter Hardwarekonfiguration planen.

Arbeitslasten, die mit Distributed Cloud verbunden sind, können in Containern und auf virtuellen Maschinen ausgeführt werden:

  • GPU-Arbeitslasten, die in Containern ausgeführt werden Alle GPU-Ressourcen in Ihrem mit Distributed Cloud verbundenen Cluster werden anfangs Arbeitslasten zugewiesen, die in Containern ausgeführt werden. Der GPU-Treiber für die Ausführung von GPU-basierten containerisierten Arbeitslasten ist in Distributed Cloud Connected enthalten. In jedem Container werden GPU-Bibliotheken unter /opt/nvidia bereitgestellt.

  • GPU-Arbeitslasten, die auf virtuellen Maschinen ausgeführt werden Wenn Sie eine GPU-basierte Arbeitslast auf einer VM ausführen möchten, müssen Sie GPU-Ressourcen auf dem verbundenen Zielknoten von Distributed Cloud VMs zuweisen, wie weiter unten auf dieser Seite beschrieben. Dadurch wird der integrierte GPU-Treiber umgangen und die GPUs werden direkt an virtuelle Maschinen weitergeleitet. Sie müssen einen kompatiblen GPU-Treiber manuell auf dem Gastbetriebssystem jeder virtuellen Maschine installieren. Sie müssen auch alle Lizenzen sichern, die zum Ausführen spezieller GPU-Treiber auf Ihren VMs erforderlich sind.

Wenn Sie prüfen möchten, ob auf einem mit Distributed Cloud verbundenen Knoten GPUs vorhanden sind, sehen Sie nach, ob der Knoten das Label vm.cluster.gke.io.gpu=true hat. Wenn das Label auf dem Knoten nicht vorhanden ist, sind auf der entsprechenden physischen Maschine, die mit Distributed Cloud verbunden ist, keine GPUs installiert.

GPU-Ressourcen zuweisen

Standardmäßig werden alle GPU-Ressourcen auf jedem Knoten im Cluster containerisierten Arbeitslasten zugewiesen. Führen Sie die Schritte in diesem Abschnitt aus, um die Zuweisung von GPU-Ressourcen auf jedem Knoten anzupassen.

GPU-Ressourcenzuordnung konfigurieren

  1. Verwenden Sie den folgenden Befehl, um GPU-Ressourcen auf einem mit Distributed Cloud verbundenen Knoten zuzuweisen und die benutzerdefinierte Ressource GPUAllocation auf dem Zielknoten zu bearbeiten:

    kubectl edit gpuallocation NODE_NAME --namespace vm-system

    Ersetzen Sie NODE_NAME durch den Namen des Zielknotens für Distributed Cloud.

    Im folgenden Beispiel zeigt die Ausgabe des Befehls die GPU-Ressourcenzuweisung in der Werkseinstellung. Standardmäßig werden alle GPU-Ressourcen containerisierten (pod) Arbeitslasten zugewiesen und keine GPU-Ressourcen virtuellen Maschinen (vm) zugewiesen:

    ...
    spec:
      pod:   2  # Number of GPUs allocated for container workloads
      vm:    0  # Number of GPUs allocated for VM workloads
    
  2. Legen Sie die GPU-Ressourcenzuweisungen so fest:

    • Wenn Sie einer containerisierten Arbeitslast eine GPU-Ressource zuweisen möchten, erhöhen Sie den Wert des Felds pod und verringern Sie den Wert des Felds vm um denselben Betrag.
    • Wenn Sie einer VM-Arbeitslast eine GPU-Ressource zuweisen möchten, erhöhen Sie den Wert des Felds vm und verringern Sie den Wert des Felds pod um denselben Betrag.

    Die Gesamtzahl der zugewiesenen GPU-Ressourcen darf die Anzahl der GPUs, die auf der physischen, mit Distributed Cloud verbundenen Maschine installiert sind, auf der der Knoten ausgeführt wird, nicht überschreiten. Andernfalls lehnt der Knoten die ungültige Zuweisung ab.

    Im folgenden Beispiel wurden zwei GPU-Ressourcen von containerisierten (pod) Arbeitslasten zu Arbeitslasten für virtuelle Maschinen (vm) neu zugewiesen:

    ...
    spec:
      pod:   0  # Number of GPUs allocated for container workloads
      vm:    2  # Number of GPUs allocated for VM workloads
    

    Wenn Sie fertig sind, wenden Sie die geänderte GPUAllocation-Ressource auf Ihren Cluster an und warten Sie, bis sich ihr Status in AllocationFulfilled ändert.

GPU-Ressourcenzuordnung prüfen

  • Verwenden Sie den folgenden Befehl, um die Zuweisung von GPU-Ressourcen zu prüfen:

    kubectl describe gpuallocations NODE_NAME --namespace vm-system

    Ersetzen Sie NODE_NAME durch den Namen des verbundenen Zielknotens von Distributed Cloud.

    Der Befehl gibt eine Ausgabe ähnlich dem folgenden Beispiel zurück:

     Name:         mynode1
     ...
     spec:
       node:  mynode1
       pod:   2  # Number of GPUs allocated for container workloads
       vm:    0  # Number of GPUs allocated for VM workloads
     Status:
       Allocated:  true
       Conditions:
         Last Transition Time:  2022-09-23T03:14:10Z
         Message:
         Observed Generation:   1
         Reason:                AllocationFulfilled
         Status:                True
         Type:                  AllocationStatus
         Last Transition Time:  2022-09-23T03:14:16Z
         Message:
         Observed Generation:   1
         Reason:                DeviceStateUpdated
         Status:                True
         Type:                  DeviceStateUpdated
       Consumption:
         pod:         0/2   # Number of GPUs currently consumed by container workloads
         vm:          0/0   # Number of GPUs currently consumed by VM workloads
       Device Model:  NVIDIA L4
     Events:          <none>
    

Container für die Nutzung von GPU-Ressourcen konfigurieren

Wenn Sie einen Container konfigurieren möchten, der auf Distributed Cloud ausgeführt wird und GPU-Ressourcen verwendet, konfigurieren Sie die Spezifikation wie im folgenden Beispiel gezeigt und wenden Sie sie dann auf Ihren Cluster an:

  apiVersion: v1
  kind: Pod
  metadata:
    name: my-gpu-pod
  spec:
    containers:
    - name: my-gpu-container
      image: CUDA_TOOLKIT_IMAGE
      command: ["/bin/bash", "-c", "--"]
      args: ["while true; do sleep 600; done;"]
      env:
      resources:
        requests:
        GPU_MODEL: 2
        limits:
        GPU_MODEL: 2
    nodeSelector:
      kubernetes.io/hostname: NODE_NAME

Ersetzen Sie Folgendes:

  • CUDA_TOOLKIT_IMAGE: Der vollständige Pfad und Name des NVIDIA CUDA-Toolkit-Images. Die Version des CUDA-Toolkits muss mit der Version des NVIDIA-Treibers übereinstimmen, der auf Ihrem verbundenen Distributed Cloud-Cluster ausgeführt wird. Informationen zum Ermitteln Ihrer NVIDIA-Treiberversion finden Sie in den Versionshinweisen zu Distributed Cloud. Informationen zur passenden CUDA-Toolkit-Version finden Sie unter CUDA-Kompatibilität.
  • NODE_NAME: Der Name des verbundenen Zielknotens von Distributed Cloud.
  • GPU_MODEL: Das Modell der NVIDIA-GPU, die in der Zielmaschine mit Distributed Cloud-Verbindung installiert ist. In dieser Version ist nvidia.com/gpu-pod-NVIDIA_L4 der einzige unterstützte Wert für die NVIDIA L4-GPU.

Virtuelle Maschine für die Verwendung von GPU-Ressourcen konfigurieren

Wenn Sie eine auf Distributed Cloud Connected ausgeführte VM so konfigurieren möchten, dass sie GPU-Ressourcen verwendet, konfigurieren Sie die VirtualMachine-Ressourcenspezifikation wie im folgenden Beispiel gezeigt und wenden Sie sie dann auf Ihren Cluster an:

apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachine
...
spec:
  ...
  gpu:
    model: GPU_MODEL
    quantity: 2

Ersetzen Sie Folgendes:

  • GPU_MODEL: Das Modell der NVIDIA-GPU, die in der Zielmaschine mit Distributed Cloud-Verbindung installiert ist. In dieser Version ist nvidia.com/gpu-pod-NVIDIA_L4 der einzige unterstützte Wert für die NVIDIA L4-GPU.

Nächste Schritte