

 **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.

# Ausführung von GPU-beschleunigten Containern (Windows in EC2-G-Serie)
<a name="ml-eks-windows-optimized-ami"></a>

**Wichtig**  
Das [Kubernetes Device Plugin für DirectX](https://github.com/TensorWorks/DirectX-Device-Plugins) von TensorWorks ist ein Drittanbieter-Tool, das nicht von empfohlen, unterstützt oder verwaltet wird. AWS AWS übernimmt keine Verantwortung für die Sicherheit, Zuverlässigkeit oder Leistung dieses Plugins.

Erfahren Sie, wie Sie GPU-beschleunigte 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](https://github.com/TensorWorks/DirectX-Device-Plugins).

Es gibt zwei Hauptansätze für die Einrichtung der GPU-Beschleunigung für Ihre Windows-Container:
+  **Option 1**: [Entwickeln Sie ein benutzerdefiniertes, für Windows optimiertes EKS-AMI](eks-custom-ami-windows.md) mit vorab installierten erforderlichen GPU-Treibern.
  + Verwenden Sie diesen Ansatz, wenn Sie eine konsistente, vorkonfigurierte Umgebung für die Ausführung GPU-beschleunigter Windows-Container benötigen und den zusätzlichen Aufwand für die Erstellung und Wartung des benutzerdefinierten AMIs in Kauf nehmen 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. Dieser Ansatz eignet sich besser für eine Entwicklungsumgebung, in der Sie GPU-beschleunigte Workloads evaluieren oder Prototypen erstellen.

Beide Ansätze können mithilfe der in diesem Leitfaden beschriebenen Schritte umgesetzt werden.

## Überlegungen
<a name="_considerations"></a>

Dieses Handbuch enthält Schritte zur Installation und Einrichtung der GPU-Beschleunigung für Ihre Windows-Container mithilfe von NVIDIA GPUs, NVIDIA GRID-Treibern und dem [Kubernetes Device](https://github.com/TensorWorks/DirectX-Device-Plugins) Plugin für DirectX von. TensorWorks Die Schritte wurden getestet und verifiziert, um GPU-Beschleunigung für Ihre Windows-Container-Workloads in Amazon EKS bereitzustellen. Weitere Informationen zu kompatiblen Treibern und Geräte-Plugins finden Sie unter [Bekannte Beschränkungen](#ml-eks-windows-ami-known-limitations). Beachten Sie Folgendes, bevor Sie fortfahren:
+ Es wurden nur Instance-Typen der G-Familie mit [NVIDIA-GRID-Treibern](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-nvidia-driver#nvidia-GRID-driver) getestet und ihre Funktion mit diesem Handbuch bestätigt. Andere Instance-Typen und Treiberkombinationen können möglicherweise ebenfalls GPU-beschleunigte Windows-Container ausführen, erfordern jedoch möglicherweise zusätzliche Konfigurationsschritte, die in dieser Anleitung nicht behandelt werden.
+ Es wurden nur DirectX-basierte Workloads getestet und ihre Funktion mit diesem Handbuch bestätigt. Während andere GPUs APIs wie OpenGL, Vulkan und OpenCL möglicherweise kompatibel sind, um GPU-beschleunigte Windows-Container auszuführen, erfordern sie möglicherweise zusätzliche Konfigurationsschritte, die in diesem Handbuch nicht behandelt werden.
+ Es gibt einige bekannte Einschränkungen, die Sie beachten sollten, bevor Sie GPU-beschleunigte Windows-Container ausführen. Weitere Informationen finden Sie im Abschnitt [Bekannte Beschränkungen](#ml-eks-windows-ami-known-limitations).

## Voraussetzungen
<a name="ml-eks-windows-ami-prerequisites"></a>

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 den Instance-Typen der G-Familie bereit, beispielsweise [G4](https://aws.amazon.com/ec2/instance-types/g4/) oder [G5](https://aws.amazon.com/ec2/instance-types/g5/).
+ Stellen Sie Windows-Knoten mit einer Container-Laufzeitumgebung mit containerd `1.7.x` oder `2.x.x` bereit. (Lesen Sie [Abrufen der Windows-AMI-Versionsinformationen](eks-ami-versions-windows.md), um die containerd-Version in Ihrem Amazon-EKS-optimierten AMI zu überprüfen.)

## Installieren Sie den GPU-Treiber auf jedem Windows-Knoten
<a name="ml-eks-windows-ami-install-gpu-driver"></a>

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](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-nvidia-driver.html) beschrieben sind. Navigieren Sie zu den [Installationsoptionen – Option 3: GRID-Treiber](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-nvidia-driver#nvidia-GRID-driver) 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 GPUs zur 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
<a name="ml-eks-windows-ami-deploy-gpu-driver"></a>

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](https://github.com/TensorWorks/DirectX-Device-Plugins) von Tensorworks auf jedem Worker-Knoten bereit, indem Sie es als DaemonSet in Ihrem EKS-Cluster ausführen. Befolgen Sie die Installationsanleitung in der [README.md](https://github.com/TensorWorks/DirectX-Device-Plugins/blob/main/README.md), welche die folgenden Schritte umfasst. Es wird empfohlen, Folgendes zu tun:
+ Stellen Sie das Geräte-Plugin im `kube-system`-Namespace bereit.
+ Legen Sie entsprechende Ressourcenlimits für das fest DaemonSet , um sicherzustellen, dass es keine übermäßigen 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-beschleunigten Containern unterstützt das Geräte-Plugin zwei Modi:
+  **Single-Tenancy-Modus**: In diesem Modus werden alle GPU-Ressourcen einem einzelnen Container auf der Instance zugewiesen. Installieren Sie die Geräte-Plugins mit Single-Tenancy-Unterstützung mithilfe des folgenden Befehls. Weitere Informationen finden Sie in der Datei README.md.

  ```
  kubectl apply -f "https://raw.githubusercontent.com/TensorWorks/directx-device-plugins/main/deployments/default-daemonsets.yml"
  ```
+  **Multi-Tenancy-Modus**: Dieser Modus ermöglicht die gemeinsame Nutzung von GPU-Ressourcen durch mehrere Container auf der Instance. Installieren Sie die Geräte-Plugins mit Multi-Tenancy-Unterstützung mithilfe des folgenden Befehls. Weitere Informationen finden Sie in der Datei README.md.

  ```
  kubectl apply -f "https://raw.githubusercontent.com/TensorWorks/directx-device-plugins/main/deployments/multitenancy-inline.yml"
  ```

  Verwenden Sie alternativ a, 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
<a name="ml-eks-windows-ami-verify-device-plugin"></a>

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
<a name="ml-eks-windows-ami-verify-container-deployment"></a>

Sobald das Geräte-Plug-In auf den GPU-betriebenen Windows-Worker-Knoten ausgeführt DaemonSet wird, überprüfen Sie mit dem folgenden Befehl, ob für jeden Knoten eine Zuweisung möglich ist. GPUs 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ührung von Windows-Containern mit GPU-Beschleunigung
<a name="ml-eks-windows-ami-run-with-gpu-acceleration"></a>

Geben Sie vor dem Starten Ihrer Pods den Ressourcen-Namen `directx.microsoft.com/display` in `.spec.containers[].resources` an. Dies zeigt an, dass Ihre Container GPU-fähige Funktionen benötigen. `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 GitHub Repository [Kubernetes Device Plugins for DirectX](https://github.com/TensorWorks/DirectX-Device-Plugins), das [mehrere Beispiele](https://github.com/TensorWorks/DirectX-Device-Plugins/tree/main/examples) zur Auswahl hat, die Sie ausführen können, um die GPU-Fähigkeiten Ihres Windows-Knotens 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
<a name="ml-eks-windows-ami-known-limitations"></a>

### Alle sind nutzbar GPUs
<a name="ml-eks-windows-ami-gpus-usable"></a>

Alle GPUs auf der Instance befindlichen Container können von jedem laufenden Container auf dem Host verwendet werden, auch wenn Sie eine bestimmte Anzahl von GPUs für einen bestimmten Container anfordern. Darüber hinaus ist das Standardverhalten, dass alle Container, die auf dem Host ausgeführt werden, die GPU mit dem Index 0 verwenden, auch wenn mehrere auf dem Knoten 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 die CUDA-Programmierung verwenden, um eine bestimmte GPU auszuwählen, können Sie das Gerät, das in Ihrem Anwendungscode verwendet werden soll, mithilfe der Funktion [cudaSetDevice()](https://docs.nvidia.com/cuda/cuda-runtime-api/group_%5FCUDART%5F_DEVICE.html) explizit angeben.

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 Behebung dieses Problems unter [microsoft/Windows-Containers issue \$1333](https://github.com/microsoft/Windows-Containers/issues/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 Instanztyp EC2 gibt`g4dn.12xlarge`, der aus vier besteht. GPUs Nehmen Sie an, auf dieser Instance werden drei Pods gestartet. Die Tabelle zeigt, dass unabhängig von der Anzahl der von jedem Container GPUs angeforderten Pods alle drei Pods Zugriff auf alle vier GPUs auf der Instance haben und standardmäßig die GPU mit dem Geräteindex 0 verwenden.


| Pod | Angefragt GPUs | Tatsächlicher GPU-Zugriff | Standardmäßige GPU-Nutzung | Verfügbare GPU-Indizes | Instanz insgesamt 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
<a name="ml-eks-windows-ami-device-plugin-support"></a>

Die offizielle Implementierung des [Kubernetes-Geräte-Plugins](https://github.com/NVIDIA/k8s-device-plugin) durch NVIDIA unterstützt Windows nicht. Sie können den Fortschritt beim Hinzufügen der offiziellen Windows-Unterstützung in der [s-device-plugin NVIDIA/K8-Ausgabe](https://github.com/NVIDIA/k8s-device-plugin/issues/419) \$1419 verfolgen.

### Einschränkungen für GPU-Rechen-Instances
<a name="ml-eks-windows-ami-compute-instance-limitations"></a>

Abhängig von Ihrer AWS Kontokonfiguration gelten möglicherweise Servicebeschränkungen für die Anzahl und Art der Amazon EC2 EC2-GPU-Recheninstanzen, die Sie starten können. Wenn Sie zusätzliche Kapazität benötigen, können Sie eine [Kontingenterhöhung anfordern](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html).

### Notwendigkeit, eine für Windows-GPUs-optimierte AMI zu erstellen
<a name="ml-eks-windows-ami-build-gpu-ami"></a>

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
<a name="ml-eks-windows-ami-inferentia-tranium-support"></a>

 AWS [Inferentia](https://aws.amazon.com/ai/machine-learning/inferentia/) und AWS [Trainium](https://aws.amazon.com/ai/machine-learning/trainium/)-basierte Workloads werden unter Windows nicht unterstützt.