View a markdown version of this page

GPU-accelerated Container ausführen (Windows auf EC2) G-Series - 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 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 von TensorWorks ist ein Drittanbieter-Tool, das von weder unterstützt noch gepflegt wird. AWS AWS übernimmt keine Verantwortung für die Sicherheit, Zuverlässigkeit oder Leistung dieses Plugins.

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. TensorWorks Die Schritte wurden getestet und verifiziert, um Ihre GPU-acceleration Windows-Container-Workloads auf Amazon EKS abzudecken. Weitere Informationen zu kompatiblen Treibern und Geräte-Plugins finden Sie unter Bekannte Beschränkungen. Beachten Sie Folgendes, bevor Sie fortfahren:

  • 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:

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 von Tensorworks auf jedem Worker-Knoten bereit, indem Sie es als DaemonSet in Ihrem EKS-Cluster ausführen. Folgen Sie der in der angegebenen Installationsanleitung README.md, die die folgenden Schritte beinhaltet. Es wird empfohlen, Folgendes zu tun:

  • 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 GitHub Repository, in dem mehrere Beispiele zur Auswahl stehen, die Sie ausführen können, um die GPU-Funktionen Ihres Windows-Nodes zu testen.

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. Die folgende Tabelle stellt eine visuelle Darstellung und ein praktisches Beispiel für dieses GPU-Zuweisungsverhalten dar.

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 durch NVIDIA unterstützt Windows nicht. Den Fortschritt beim Hinzufügen der offiziellen Windows-Unterstützung können Sie in der NVIDIA/k8s-device-plugin Ausgabe #419 verfolgen.

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 und AWS Trainium-basierte Workloads werden unter Windows nicht unterstützt.