GPU-Arbeitslasten verwalten

Auf dieser Seite wird beschrieben, wie Sie GPU-Arbeitslasten (Graphics Processing Unit) in Google Distributed Cloud aktivieren und verwalten. Um diese Funktion nutzen zu können, benötigen Sie eine Distributed Cloud-Hardwarekonfiguration, die GPUs enthält. Die GPU-Unterstützung ist standardmäßig deaktiviert. Sie müssen die GPU-Unterstützung für Ihren Distributed Cloud-Cluster explizit aktivieren.

Wenn Sie eine solche Konfiguration planen und bestellen möchten, wählen Sie in den folgenden Dokumenten Konfiguration 2 aus:

Wenn Ihr Distributed Cloud-Rack GPUs enthält, können Sie Ihre Distributed Cloud-Arbeitslasten so konfigurieren, dass sie GPU-Ressourcen verwenden.

Distributed Cloud-Arbeitslasten können in Containern und auf virtuellen Maschinen ausgeführt werden:

  • GPU-Arbeitslasten, die in Containern ausgeführt werden Wenn Sie die GPU-Unterstützung aktivieren, werden alle GPU-Ressourcen in Ihrem Distributed Cloud-Cluster 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 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 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 Distributed Cloud-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 von Distributed Cloud keine GPUs installiert.

GPU-Unterstützung aktivieren

Wenn Sie die GPU-Unterstützung für Ihre Arbeitslasten aktivieren möchten, müssen Sie die benutzerdefinierte Ressource VMRuntime erstellen oder ändern, die den Parameter enableGPU mit dem Wert true enthält, und sie dann auf Ihren Distributed Cloud-Cluster anwenden. Beispiel:

apiVersion: vm.cluster.gke.io/v1
kind: VMRuntime
metadata:
  name: vmruntime
spec:
  # Enable GPU support
  enableGPU: true

Führen Sie je nach Art des Clusters, auf dem Sie das VM-Subsystem „VM Runtime on GDC“ aktivieren möchten, einen der folgenden Schritte aus:

  • Für Cloud-Steuerungsebenencluster, für die Sie das VM-Subsystem der VM-Laufzeit in GDC noch nicht aktiviert haben, müssen Sie die VMRuntime-Ressource manuell erstellen.
  • Bei Cloud-Steuerungsebenenclustern, in denen Sie das VM-Subsystem der VM-Laufzeit in GDC bereits aktiviert haben, müssen Sie die vorhandene VMRuntime-Ressource bearbeiten.
  • Bei Clustern mit lokaler Steuerungsebene müssen Sie die vorhandene VMRuntime-Ressource bearbeiten.

Mit derselben VMRuntime-Ressource wird auch die Unterstützung von VM Runtime on GDC in Ihrem Cluster konfiguriert, indem der Parameter enable verwendet wird. Konfigurieren Sie die beiden Parameter entsprechend den Anforderungen Ihrer Arbeitslast. Sie müssen die Unterstützung für VM Runtime in GDC nicht aktivieren, um die GPU-Unterstützung in Ihrem Distributed Cloud-Cluster zu aktivieren.

In der folgenden Tabelle werden die verfügbaren Konfigurationen beschrieben.

enable Wert enableGPU Wert Resultierende Konfiguration
false false Arbeitslasten werden nur in Containern ausgeführt und können keine GPU-Ressourcen verwenden.
false true Arbeitslasten werden nur in Containern ausgeführt und können GPU-Ressourcen verwenden.
true true

Arbeitslasten können auf virtuellen Maschinen und in Containern ausgeführt werden.

Für beide Arten von Arbeitslasten können GPU-Ressourcen verwendet werden.

true false

Arbeitslasten können auf virtuellen Maschinen und in Containern ausgeführt werden.

Für beide Arten von Arbeitslasten können keine GPU-Ressourcen verwendet werden.

Prüfen, ob die GPU-Unterstützung aktiviert wurde

Mit dem folgenden Befehl können Sie prüfen, ob die GPU-Unterstützung in Ihrem Cluster aktiviert wurde:

kubectl get pods --namespace vm-system

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

NAME                                         READY   STATUS     RESTARTS  AGE
...
gpu-controller-controller-manager-vbv4w      2/2     Running    0         31h
kubevirt-gpu-dp-daemonset-gxj7g              1/1     Running    0         31h
nvidia-gpu-dp-daemonset-bq2vj                1/1     Running    0         31h
...

In der Ausgabe können Sie prüfen, ob die GPU-Controller-Pods bereitgestellt wurden und im Namespace vm-system ausgeführt werden.

GPU-Ressourcen zuweisen

Wenn Sie die GPU-Unterstützung in Ihrem Distributed Cloud-Cluster aktivieren, werden standardmäßig alle GPU-Ressourcen auf jedem Knoten im Cluster containerisierten Arbeitslasten zugewiesen. Wenn Sie die Zuweisung von GPU-Ressourcen auf jedem Knoten anpassen möchten, führen Sie die Schritte in diesem Abschnitt aus.

GPU-Ressourcenzuordnung konfigurieren

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

    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 Distributed Cloud-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 Zielknotens für 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:  Tesla T4
     Events:          <none>
    

Container für die Nutzung von GPU-Ressourcen konfigurieren

Wenn Sie einen Container, der auf Distributed Cloud ausgeführt wird, für die Verwendung von GPU-Ressourcen konfigurieren möchten, konfigurieren Sie die Spezifikation wie im folgenden Beispiel 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:
        nvidia.com/gpu-pod-TESLA_T4: 2
        limits:
        nvidia.com/gpu-pod-TESLA_T4: 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 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 Distributed Cloud-Zielknotens.

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

Wenn Sie eine auf Distributed Cloud ausgeführte VM für die Verwendung von GPU-Ressourcen konfigurieren möchten, 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: nvidia.com/gpu-vm-TESLA_T4
    quantity: 2

Nächste Schritte