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. Beachten Sie, dass Distributed Cloud Servers keine GPU-Arbeitslasten unterstützen.
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/nvidiabereitgestellt.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
Verwenden Sie den folgenden Befehl, um GPU-Ressourcen auf einem Distributed Cloud-Knoten zuzuweisen. Damit bearbeiten Sie die benutzerdefinierte Ressource
GPUAllocationauf dem Zielknoten:kubectl edit gpuallocation NODE_NAME --namespace vm-system
Ersetzen Sie
NODE_NAMEdurch 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 workloadsLegen Sie die GPU-Ressourcenzuweisungen so fest:
- Wenn Sie einer containerisierten Arbeitslast eine GPU-Ressource zuweisen möchten, erhöhen Sie den Wert des Felds
podund verringern Sie den Wert des Feldsvmum denselben Betrag. - Wenn Sie einer VM-Arbeitslast eine GPU-Ressource zuweisen möchten, erhöhen Sie den Wert des Felds
vmund verringern Sie den Wert des Feldspodum 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 workloadsWenn Sie fertig sind, wenden Sie die geänderte
GPUAllocation-Ressource auf Ihren Cluster an und warten Sie, bis sich ihr Status inAllocationFulfilledändert.- Wenn Sie einer containerisierten Arbeitslast eine GPU-Ressource zuweisen möchten, erhöhen Sie den Wert des Felds
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_NAMEdurch 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