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 unter, 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.
GPU-accelerated Container ausführen (Windows auf EC2) G-Series
Wichtig
Das Kubernetes Device Plugin für DirectX
Erfahren Sie, wie Sie GPU-accelerated Windows-Container-Workloads auf Amazon EKS (Elastic Kubernetes Service) mithilfe von NVIDIA-GPUs mit dem Kubernetes Device Plugin für DirectX von ausführen. TensorWorks Weitere Informationen finden Sie unter Kubernetes-Geräte-Plugin für DirectX
Es gibt zwei Hauptansätze für die Einrichtung Ihrer Windows-Container: GPU-acceleration
-
Option 1: Entwickeln Sie ein benutzerdefiniertes, für Windows optimiertes EKS-AMI mit vorab installierten erforderlichen GPU-Treibern.
-
Verwenden Sie diesen Ansatz, wenn Sie eine konsistente, vorkonfigurierte Umgebung benötigen, in der GPU-accelerated Windows-Container ausgeführt werden können, und Sie den zusätzlichen Aufwand in die Erstellung und Wartung des benutzerdefinierten AMI investieren können.
-
-
Option 2: Installieren Sie die erforderlichen GPU-Treiber auf Ihren EKS-Worker-Knoten, nachdem Sie Ihre Instance gestartet haben.
-
Verwenden Sie diesen Ansatz, wenn Sie einen einfacheren Einrichtungsprozess wünschen und es Ihnen nichts ausmacht, die GPU-Treiber auf jedem neuen Worker-Knoten zu installieren. Eher geeignet für eine Entwicklungsumgebung, wenn Sie Workloads evaluieren oder Prototypen erstellen GPU-accelerated .
-
Beide Ansätze können mithilfe der in diesem Leitfaden beschriebenen Schritte umgesetzt werden.
Überlegungen
Dieses Handbuch enthält Schritte zur Installation und Einrichtung Ihrer Windows-Container mithilfe von NVIDIA-GPUs, NVIDIA GRID-Treibern und dem Kubernetes Device Plugin GPU-acceleration für DirectX by.
-
Nur G-family Instance-Typen mit NVIDIA GRID-Treibern wurden getestet und bestätigt, dass sie mit diesem Handbuch kompatibel sind. Andere Instanztypen und Treiberkombinationen können zwar auch GPU-accelerated Windows-Container ausführen, erfordern jedoch möglicherweise zusätzliche Konfigurationsschritte, die in diesem Handbuch nicht behandelt werden.
-
Nur DirectX-based Workloads wurden getestet und bestätigt, dass sie mit diesem Handbuch kompatibel sind. Andere GPU-APIs wie OpenGL, Vulkan und OpenCL sind möglicherweise möglicherweise mit der Ausführung von GPU-accelerated Windows-Containern kompatibel, erfordern jedoch möglicherweise zusätzliche Konfigurationsschritte, die in diesem Handbuch nicht behandelt werden.
-
Es gibt einige bekannte Einschränkungen, die Sie beachten sollten, bevor Sie Windows-Container ausführen. GPU-accelerated Weitere Informationen finden Sie im Abschnitt Bekannte Beschränkungen.
Voraussetzungen
Um die GPU-Beschleunigung für Ihre Windows-Container in Amazon EKS zu aktivieren, müssen Sie zunächst die folgenden Voraussetzungen erfüllen:
-
Starten Sie einen Amazon-EKS-Cluster mit Kubernetes v1.27 oder neuer.
-
Stellen Sie Windows-Knoten mit Windows Server 2022 oder neuer bereit.
-
Stellen Sie Windows-Knoten in G-family allen Instanztypen wie G4
oder https://aws.amazon.com/ec2/instance-types/g5/ G5 bereit. -
Stellen Sie Windows-Knoten mit einer Container-Laufzeitumgebung mit containerd
1.7.xoder2.x.xbereit. (Lesen Sie Abrufen der Windows-AMI-Versionsinformationen, um die containerd-Version in Ihrem Amazon-EKS-optimierten AMI zu überprüfen.)
Installieren Sie den GPU-Treiber auf jedem Windows-Knoten
Um die NVIDIA-GRID-Treiber auf Ihren EKS-Worker-Knoten zu installieren, befolgen Sie die Schritte, die unter NVIDIA-Treiber für Ihre Amazon-EC2-Instance beschrieben sind. Navigieren Sie zu den Installationsoptionen – Option 3: GRID-Treiber und befolgen Sie die Installationsschritte.
Installation für Windows Server Core
Installieren Sie für Windows Server Core, das keine Desktop-Erfahrung bietet, NVIDIA-GRID-Treiber im Hintergrund mithilfe der folgenden Befehle:
$nvidiaInstallerFilePath = nvidia-driver-installer.exe # Replace with path to installer $installerArguments = "-s -clean -noreboot -noeula" Start-Process -FilePath $nvidiaInstallerFilePath -ArgumentList $installerArguments -Wait -NoNewWindow -PassThru
Überprüfen Sie Ihre Installation
Führen Sie den folgenden PowerShell Befehl aus, um Diagnoseinformationen zu den GPUs auf der Instance anzuzeigen:
nvidia-smi
Dieser Befehl zeigt die Version des NVIDIA-Treibers sowie Informationen zur GPU-Hardware an. Stellen Sie sicher, dass die Ausgabe dieses Befehls mit der NVIDIA GRID-Treiberversion übereinstimmt, die Sie installiert haben sollten.
Bereitstellen des GPU-Geräte-Plugins auf jedem Knoten
Um die Erkennung und Freigabe der GPU-Ressourcen für Container auf Ihren Windows-Knoten zu ermöglichen, benötigen Sie ein Geräte-Plugin. Stellen Sie das DirectX Device Plugin
-
Stellen Sie das Geräte-Plugin im
kube-system-Namespace bereit. -
Legen Sie angemessene Ressourcenlimits für den fest DaemonSet , um sicherzustellen, dass er nicht zu viele Ressourcen auf Ihren Knoten verbraucht.
Anmerkung
Das Geräte-Plug-In DaemonSet wird auf jedem Knoten als Host-Prozesscontainer mit erhöhten Rechten ausgeführt. Es wird empfohlen, RBAC-Steuerelemente zu implementieren, um den Zugriff darauf einzuschränken, DaemonSet sodass nur autorisierte Benutzer privilegierte Befehle ausführen können.
Beim Ausführen von GPU-accelerated Containern unterstützt das Geräte-Plugin zwei Modi:
-
Single-tenancy Modus: In diesem Modus werden alle GPU-Ressourcen einem einzelnen Container auf der Instanz zugewiesen. Installieren Sie die Geräte-Plugins mit Single-Tenancy-Unterstützung mithilfe des folgenden Befehls. Weitere Informationen finden Sie unter README.md .
kubectl apply -f "https://raw.githubusercontent.com/TensorWorks/directx-device-plugins/main/deployments/default-daemonsets.yml" -
Multi-tenancy Modus: In diesem Modus können GPU-Ressourcen von mehreren Containern auf der Instance gemeinsam genutzt werden. Installieren Sie die Geräte-Plugins mit Multi-Tenancy-Unterstützung mithilfe des folgenden Befehls. README.md Weitere Informationen finden Sie unter.
kubectl apply -f "https://raw.githubusercontent.com/TensorWorks/directx-device-plugins/main/deployments/multitenancy-inline.yml"Sie können auch a verwenden, ConfigMap um die Mehrmandantenfähigkeit anzugeben.
kubectl apply -f "https://raw.githubusercontent.com/TensorWorks/directx-device-plugins/main/deployments/multitenancy-configmap.yml"
Überprüfung der Bereitstellung des Geräte-Plugins
Nachdem Sie das Geräte-Plug-In bereitgestellt haben, ersetzen Sie den folgenden Befehl <namespace> und führen Sie ihn aus, um sicherzustellen, dass das DirectX-Geräte-Plug-In auf allen Ihren Windows-Knoten ordnungsgemäß ausgeführt wird.
kubectl get ds device-plugin-wddm -n <namespace>
Überprüfen, ob Container für die Bereitstellung bereit sind
Sobald das Geräte-Plug-In auf den GPU-powered Windows-Worker-Knoten ausgeführt DaemonSet wird, verwenden Sie den folgenden Befehl, um zu überprüfen, ob jeder Knoten über zuweisbare GPUs verfügt. Die entsprechende Zahl sollte mit der Anzahl der DirectX-Geräte auf jedem Knoten übereinstimmen.
kubectl get nodes "-o=custom-columns=NAME:.metadata.name,DirectX:.status.allocatable.directx\.microsoft\.com/display"
Ausführen von Windows-Containern mit GPU-acceleration
Geben Sie vor dem Starten Ihrer Pods den Ressourcen-Namen directx.microsoft.com/display in .spec.containers[].resources an. Dies weist darauf hin, dass Ihre Container GPU-enabled Funktionen benötigen, und der kube-scheduler versucht, Ihre Pods auf Ihrem vorkonfigurierten Windows-Knoten mit verfügbaren GPU-Ressourcen zu platzieren.
Ein Beispiel hierfür ist der folgende Beispielbefehl, der Job startet, um eine Monte-Carlo-Simulation zur Schätzung des Pi-Werts auszuführen. Dieses Beispiel stammt aus dem Kubernetes Device Plugins for DirectX
cat <<EOF | kubectl apply -f - apiVersion: batch/v1 kind: Job metadata: name: example-cuda-montecarlo-wddm spec: template: spec: containers: - name: example-cuda-montecarlo-wddm image: "index.docker.io/tensorworks/example-cuda-montecarlo:0.0.1" resources: limits: directx.microsoft.com/display: 1 nodeSelector: "kubernetes.io/os": windows restartPolicy: Never backoffLimit: 0 EOF
Bekannte Beschränkungen
Alle GPUs sind verwendbar
Alle GPUs auf der Instance können von jedem ausgeführten Container auf dem Host genutzt werden, auch wenn Sie eine bestimmte Anzahl von GPUs für einen bestimmten Container anfordern. Darüber hinaus ist das Standardverhalten so, dass alle auf dem Host ausgeführten Container die GPU mit dem Index 0 verwenden, auch wenn auf dem Knoten mehrere GPUs verfügbar sind Damit Multi-GPU-Aufgaben ordnungsgemäß funktionieren, müssen Sie das zu verwendende GPU-Gerät im Code Ihrer Anwendung explizit angeben.
Die genaue Implementierung zur Zuweisung eines für die Anwendung zu verwendenden Geräts hängt von der von Ihnen verwendeten Programmiersprache oder dem verwendeten Framework ab. Wenn Sie beispielsweise CUDA-Programmierung verwenden, können Sie zur Auswahl einer bestimmten GPU das zu verwendende Gerät in Ihrem Anwendungscode mithilfe der Funktion cuda () explizit angeben. SetDevice
Die Notwendigkeit, das Gerät explizit anzugeben, ist auf ein bekanntes Problem zurückzuführen, das Windows-Container betrifft. Sie können den Fortschritt bei der Lösung dieses Problems in der microsoft/Windows -Container-Ausgabe #333 verfolgen.
Stellen Sie sich ein Szenario vor, in dem es einen einzelnen Windows-Knoten vom EC2-Instance-Typ g4dn.12xlarge gibt, der mit vier GPUs ausgestattet ist. Nehmen Sie an, auf dieser Instance werden drei Pods gestartet. Die Tabelle zeigt, dass unabhängig von der Anzahl der von jedem Container angeforderten GPUs alle drei Pods Zugriff auf alle vier GPUs der Instance haben und standardmäßig die GPU mit dem Geräteindex 0 verwenden.
| Pod | Gewünschte GPUs | Tatsächlicher GPU-Zugriff | Standardmäßige GPU-Nutzung | Verfügbare GPU-Indizes | Gesamtzahl der Instance-GPUs |
|---|---|---|---|---|---|
|
Pod 1 |
1 GPU |
Alle 4 GPUs |
GPU mit index 0 |
0, 1, 2, 3 |
4 |
|
Pod 2 |
2 GPUs |
Alle 4 GPUs |
GPU mit index 0 |
0, 1, 2, 3 |
4 |
|
Pod 3 |
1 GPU |
Alle 4 GPUs |
GPU mit index 0 |
0, 1, 2, 3 |
4 |
Support für Kubernetes-Geräte-Plugins
Die offizielle Implementierung des Kubernetes-Geräte-Plugins
Einschränkungen für GPU-Rechen-Instances
Abhängig von Ihrer AWS Kontokonfiguration gelten möglicherweise Servicebeschränkungen für die Anzahl und die Typen der Amazon EC2-GPU-Recheninstanzen, die Sie starten können. Wenn Sie zusätzliche Kapazität benötigen, können Sie eine Kontingenterhöhung anfordern.
Notwendigkeit, eine für Windows-GPUs-optimierte AMI zu erstellen
Amazon EKS stellt keine EKS-Windows-GPU-optimierte AMI oder eine von EC2 Image Builder verwaltete Komponente zur Verfügung. Sie müssen die Schritte in dieser Anleitung befolgen, um eine benutzerdefinierte EKS-Windows-optimierte AMI mit den erforderlichen vorinstallierten GPU-Treibern zu erstellen, oder die erforderlichen GPU-Treiber auf Ihren EKS-Worker-Knoten installieren, nachdem Sie Ihre Instances gestartet haben.
Inferentia und Trainium werden nicht unterstützt
AWS
Inferentia