NVIDIA-GPU-Geräte auf Amazon EKS verwalten - Amazon EKS

Unterstützung für die Verbesserung dieser Seite beitragen

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Um zu diesem Benutzerhandbuch beizutragen, wählen Sie den GitHub Link Diese Seite bearbeiten auf, der sich im rechten Bereich jeder Seite befindet.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

NVIDIA-GPU-Geräte auf Amazon EKS verwalten

NVIDIA wird GPUs häufig für maschinelles Lernen, Inferenz und Hochleistungsrechner-Workloads verwendet. Amazon EKS unterstützt zwei Mechanismen für die Verwaltung von NVIDIA-GPU-Geräten in Ihren EKS-Clustern: den NVIDIA DRA-Treiber für GPUs und das NVIDIA Kubernetes-Geräte-Plug-In.

Es wird empfohlen, den NVIDIA DRA-Treiber für neue Bereitstellungen auf Clustern zu verwenden, auf denen Kubernetes Version 1.34 oder höher ausgeführt wird. Der NVIDIA DRA-Treiber ermöglicht eine flexible GPU-Zuweisung und GPU-Sharing zwischen Containern. Das NVIDIA-Geräte-Plugin wird weiterhin unterstützt.

NVIDIA-DRA-Treiber im Vergleich zum NVIDIA-Geräte-Plugin

Funktion NVIDIA-DRA-Treiber NVIDIA-Geräte-Plugin

Mindestversion von Kubernetes

1.34

Alle von EKS unterstützten Kubernetes-Versionen

Automatischer Modus von Karpenter und EKS

Nicht unterstützt

Unterstützt

EKS-optimiert AMIs

AL2023

AL2023, Bottlerocket

Werbung für Geräte

Umfangreiche Attribute mithilfe von ResourceSlice Objekten wie GPU-Modell, Speicher, Treiberversion und Topologie

Ganzzahlzahl nvidia.com/gpu erweiterter Ressourcen

GPU-Freigabe

Mehrere Container im selben Pod können sich über gemeinsame ResourceClaim Referenzen eine GPU teilen

Nicht unterstützt Jede GPU ist ausschließlich einem Container zugewiesen.

ComputeDomains

Verwaltet Multi-Node NVLink (MNNVL) mithilfe von ComputeDomain Ressourcen für die sichere GPU-Kommunikation mit mehreren Knoten

Nicht unterstützt

Attributbasierte Auswahl

Filtern Sie GPUs mithilfe von CEL-Ausdrücken nach Modell, Speicher oder anderen Attributen

Nicht unterstützt

Installieren Sie den NVIDIA DRA-Treiber

Der NVIDIA DRA-Treiber für GPUs verwaltet zwei Arten von Ressourcen: GPUs und ComputeDomains. Es werden zwei DRA-Kubelet-Plugins ausgeführt: gpu-kubelet-plugin und. compute-domain-kubelet-plugin Jedes kann während der Installation separat aktiviert oder deaktiviert werden. Dieser Leitfaden konzentriert sich auf die GPU-Zuweisung. Informationen zur Verwendung ComputeDomains finden Sie unterVerwenden Sie P6e- GB200 UltraServers mit Amazon EKS.

Die Verwendung des NVIDIA DRA-Treibers mit Bottlerocket wird derzeit nicht unterstützt.

Voraussetzungen

  • Ein Amazon EKS-Cluster, auf dem Kubernetes Version 1.34 oder höher ausgeführt wird.

  • Knoten mit NVIDIA-GPU-Instanztypen (wie P OR-Instances). G

  • Knoten mit installierten Komponenten auf Host-Ebene für NVIDIA. GPUs Bei Verwendung von EKS-optimiertem NVIDIA AL2023 oder Bottlerocket NVIDIA sind der NVIDIA-Treiber auf Host-Ebene AMIs, der CUDA-Benutzermodus-Treiber und das Container-Toolkit vorinstalliert.

  • Weitere Informationen finden Sie in den Anweisungen zur Einrichtung von Helm.

  • kubectlkonfiguriert für die Kommunikation mit Ihrem Cluster, weitere Informationen finden Sie unter. Installieren oder Aktualisieren von kubectl

Verfahren

Wichtig

Wenn Sie den NVIDIA DRA-Treiber für die GPU-Geräteverwaltung verwenden, kann er nicht zusammen mit dem NVIDIA-Geräte-Plug-In auf demselben Knoten bereitgestellt werden. Updates finden Sie unter Upstream-Kubernetes KEP-5004.

  1. Fügen Sie das Helm-Chart-Repository für den NVIDIA-DRA-Treiber hinzu.

    helm repo add nvidia https://helm.ngc.nvidia.com/nvidia
  2. Aktualisieren Sie Ihr lokales Helm-Repository.

    helm repo update
  3. Holen Sie sich die neueste Version des NVIDIA DRA-Treibers.

    helm search repo nvidia/nvidia-dra
  4. Installieren Sie den NVIDIA DRA-Treiber.

    helm install nvidia-dra-driver-gpu nvidia/nvidia-dra-driver-gpu \ --create-namespace \ --namespace nvidia-dra-driver-gpu \ --set resources.computeDomains.enabled=false \ --set 'gpuResourcesEnabledOverride=true'

    Erweiterte Konfigurationsoptionen finden Sie in der Helmtabelle für den NVIDIA DRA-Treiber.

  5. Stellen Sie sicher, dass die DRA-Treiber-Pods ausgeführt werden.

    kubectl get pods -n nvidia-dra-driver-gpu
  6. Stellen Sie sicher, dass die DeviceClass Objekte erstellt wurden.

    kubectl get deviceclass
    NAME AGE gpu.nvidia.com 60s
  7. Stellen Sie sicher, dass ResourceSlice Objekte für Ihre GPU-Knoten veröffentlicht wurden.

    kubectl get resourceslice

Fordere NVIDIA GPUs in einem Pod an

Um NVIDIA GPUs mithilfe des DRA-Treibers anzufordern, erstellen Sie einenResourceClaimTemplate, der auf den verweist, gpu.nvidia.com DeviceClass und referenzieren Sie ihn in Ihrer Pod-Spezifikation.

Im folgenden Beispiel wird eine einzelne GPU angefordert:

apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: single-gpu spec: spec: devices: requests: - name: gpu exactly: deviceClassName: gpu.nvidia.com count: 1 --- apiVersion: v1 kind: Pod metadata: name: gpu-workload spec: containers: - name: app ... resources: claims: - name: gpu resourceClaims: - name: gpu resourceClaimTemplateName: single-gpu tolerations: - key: "nvidia.com/gpu" operator: "Exists" effect: "NoSchedule"

Installieren Sie das NVIDIA Kubernetes-Geräte-Plugin

Das NVIDIA Kubernetes-Geräte-Plugin bewirbt NVIDIA als erweiterte Ressourcen. GPUs nvidia.com/gpu Sie fordern Ressourcenanfragen und GPUs Grenzwerte im Container an.

Voraussetzungen

  • Ein Amazon EKS-Cluster.

  • Knoten mit NVIDIA-GPU-Instanztypen, die das EKS-optimierte AL2023 NVIDIA-AMI verwenden. Das EKS-optimierte Bottlerocket AMIs beinhaltet das NVIDIA-Geräte-Plugin und es ist keine separate Installation erforderlich.

  • Weitere Informationen finden Sie in den Anweisungen zur Einrichtung von Helm.

  • kubectlkonfiguriert für die Kommunikation mit Ihrem Cluster, weitere Informationen finden Sie unter. Installieren oder Aktualisieren von kubectl

Verfahren

  1. Fügen Sie das Helm-Chart-Repository für das NVIDIA-Geräte-Plugin hinzu.

    helm repo add nvdp https://nvidia.github.io/k8s-device-plugin
  2. Aktualisieren Sie Ihr lokales Helm-Repository.

    helm repo update
  3. Installieren Sie das NVIDIA Kubernetes-Geräte-Plugin.

    helm install nvdp nvdp/nvidia-device-plugin \ --namespace nvidia \ --create-namespace \ --set gfd.enabled=true
    Anmerkung

    Sie können das NVIDIA Kubernetes-Geräte-Plugin auch mit dem NVIDIA GPU Operator installieren und verwalten, der die Verwaltung aller für die Bereitstellung erforderlichen NVIDIA-Softwarekomponenten automatisiert. GPUs

  4. Stellen Sie sicher, dass das NVIDIA-Geräte-Plugin DaemonSet ausgeführt wird.

    kubectl get ds -n nvidia nvdp-nvidia-device-plugin
    NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE nvdp-nvidia-device-plugin 2 2 2 2 2 <none> 60s
  5. Stellen Sie sicher, dass Ihre Knoten zuweisbar sind. GPUs

    kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu"

    Eine Beispielausgabe sieht wie folgt aus.

    NAME GPU ip-192-168-11-225.us-west-2.compute.internal 1 ip-192-168-24-96.us-west-2.compute.internal 1

Fordere NVIDIA GPUs in einem Pod an

Um NVIDIA GPUs mithilfe des Geräte-Plug-ins anzufordern, geben Sie die nvidia.com/gpu Ressource in Ihren Container-Ressourcenlimits an.

apiVersion: v1 kind: Pod metadata: name: nvidia-smi spec: restartPolicy: OnFailure containers: - name: gpu-demo image: public.ecr.aws/amazonlinux/amazonlinux:2023-minimal command: ["/bin/sh", "-c"] args: ["nvidia-smi && tail -f /dev/null"] resources: limits: nvidia.com/gpu: 1 tolerations: - key: "nvidia.com/gpu" operator: "Equal" value: "true" effect: "NoSchedule"

Um diesen Test auszuführen, wenden Sie das Manifest an und sehen Sie sich die Protokolle an:

kubectl apply -f nvidia-smi.yaml kubectl logs nvidia-smi

Eine Beispielausgabe sieht wie folgt aus.

+-----------------------------------------------------------------------------------------+ | NVIDIA-SMI XXX.XXX.XX Driver Version: XXX.XXX.XX CUDA Version: XX.X | |-----------------------------------------+------------------------+----------------------+ | 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 L4 On | 00000000:31:00.0 Off | 0 | | N/A 27C P8 11W / 72W | 0MiB / 23034MiB | 0% Default | | | | N/A | +-----------------------------------------+------------------------+----------------------+ +-----------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=========================================================================================| | No running processes found | +-----------------------------------------------------------------------------------------+