Share via


Verwenden von GPUs für computeintensive Workloads

Gilt für: AKS in Azure Stack HCI 22H2, AKS unter Windows Server

Grafische Verarbeitungseinheiten (Graphics Processing Units, GPU) werden für rechenintensive Workloads wie Machine Learning, Deep Learning usw. verwendet. In diesem Artikel wird beschrieben, wie Sie GPUs für computeintensive Workloads in AKS verwenden, die von Azure Arc aktiviert werden.

Voraussetzungen

Wenn Sie AKS aus einer Vorschauversion aktualisieren, die älter als Oktober 2022 ist und GPU-fähige Knotenpools ausgeführt werden, müssen Sie alle Workloadcluster entfernen, die GPUs ausführen, bevor Sie beginnen. Führen Sie die Schritte in diesem Abschnitt aus.

Schritt 1: Deinstallieren des Nvidia-Hosttreibers

Navigieren Sie auf jedem Hostcomputer zu Systemsteuerung > Programme hinzufügen oder entfernen, deinstallieren Sie den NVIDIA-Hosttreiber, und starten Sie dann den Computer neu. Vergewissern Sie sich nach dem Neustart des Computers, dass der Treiber erfolgreich deinstalliert wurde. Öffnen Sie ein PowerShell-Terminal mit erhöhten Rechten, und führen Sie den folgenden Befehl aus:

Get-PnpDevice  | select status, class, friendlyname, instanceid | findstr /i /c:"3d video" 

Die GPU-Geräte sollten in einem Fehlerzustand angezeigt werden, wie in dieser Beispielausgabe gezeigt:

Error       3D Video Controller                   PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000 
Error       3D Video Controller                   PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&3569C1D3&0&0000 

Schritt 2: Aufheben der Bereitstellung des Hosttreibers vom Host

Wenn Sie den Hosttreiber deinstallieren, wird die physische GPU in einen Fehlerzustand versetzt. Sie müssen die Bereitstellung aller GPU-Geräte vom Host aufheben.

Führen Sie für jedes GPU-Gerät (3D-Videocontroller) die folgenden Befehle in PowerShell aus. Kopieren Sie die instance-ID, z. B. PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000 aus der vorherigen Befehlsausgabe:

$id1 = "<Copy and paste GPU instance id into this string>"
$lp1 = (Get-PnpDeviceProperty -KeyName DEVPKEY_Device_LocationPaths -InstanceId $id1).Data[0]
Disable-PnpDevice -InstanceId $id1 -Confirm:$false
Dismount-VMHostAssignableDevice -LocationPath $lp1 -Force

Führen Sie den folgenden Befehl aus, um zu bestätigen, dass die GPUs ordnungsgemäß vom Host getrennt wurden. Sie sollten GPUs in einen Unknown Zustand versetzen:

Get-PnpDevice  | select status, class, friendlyname, instanceid | findstr /i /c:"3d video"
Unknown       3D Video Controller               PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000 
Unknown       3D Video Controller               PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&3569C1D3&0&0000 

Schritt 3: Herunterladen und Installieren des NVIDIA-Entschärfungstreibers

Die Software kann Komponenten enthalten, die von NVIDIA Corporation oder ihren Lizenzgebern entwickelt und im Besitz sind. Die Verwendung dieser Komponenten unterliegt dem NVIDIA-Endbenutzer-Lizenzvertrag.

Informationen zum Herunterladen des NVIDIA-Treibers zur Entschärfung finden Sie in der Dokumentation des NVIDIA-Rechenzentrums . Erweitern Sie nach dem Herunterladen des Treibers das Archiv, und installieren Sie den Entschärfungstreiber auf jedem Hostcomputer.

Invoke-WebRequest -Uri "https://docs.nvidia.com/datacenter/tesla/gpu-passthrough/nvidia_azure_stack_inf_v2022.10.13_public.zip" -OutFile "nvidia_azure_stack_inf_v2022.10.13_public.zip"
mkdir nvidia-mitigation-driver
Expand-Archive .\nvidia_azure_stack_inf_v2022.10.13_public.zip .\nvidia-mitigation-driver\

Navigieren Sie zum Installieren des Entschärfungstreibers zu dem Ordner mit den extrahierten Dateien, klicken Sie mit der rechten Maustaste auf die Datei nvidia_azure_stack_T4_base.inf , und wählen Sie Installieren aus. Vergewissern Sie sich, dass Sie über den richtigen Treiber verfügen. AKS unterstützt derzeit nur die NVIDIA Tesla T4 GPU.

Sie können die Installation auch über die Befehlszeile durchführen, indem Sie zum Ordner navigieren und die folgenden Befehle ausführen, um den Entschärfungstreiber zu installieren:

pnputil /add-driver nvidia_azure_stack_T4_base.inf /install 
pnputil /scan-devices 

Nach der Installation des Entschärfungstreibers werden die GPUs im Status OK unter Nvidia T4_base – Nicht bereitgestellt aufgeführt:

Get-PnpDevice  | select status, class, friendlyname, instanceid | findstr /i /c:"nvidia"
OK       Nvidia T4_base - Dismounted               PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000 
OK       Nvidia T4_base - Dismounted               PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&3569C1D3&0&0000

Schritt 4: Wiederholen Sie die Schritte 1 bis 3

Wiederholen Sie die Schritte 1 bis 3 für jeden Knoten in Ihrem Failovercluster.

Wichtig

GPU-fähige virtuelle Computer werden dem Failoverclustering in Windows Server 2019, Windows Server 2022 oder Azure Stack HCI nicht hinzugefügt.

Installieren oder Aktualisieren von AKS

Sehen Sie sich den AKS-Schnellstart mit PowerShell oder der Verwendung von Windows Admin Center an, um AKS zu installieren oder zu aktualisieren, die von Arc aktiviert ist.

Create eines neuen Workloadclusters mit einem GPU-fähigen Knotenpool

Die Verwendung GPU-fähiger Knotenpools steht aktuell nur für Linux-Knotenpools zur Verfügung.

New-AksHciCluster -Name "gpucluster" -nodePoolName "gpunodepool" -nodeCount 2 -osType linux -nodeVmSize Standard_NK6 

Führen Sie nach der Installation des Workloadclusters den folgenden Befehl aus, um Ihre Kubeconfig abzurufen:

Get-AksHciCredential -Name gpucluster

Vergewissern Sie sich, dass Sie GPUs planen können

Vergewissern Sie sich bei der Erstellung Ihres GPU-Knotenpools, dass Sie GPUs in Kubernetes planen können. Listen Sie zunächst die Knoten in Ihrem Cluster mit dem Befehl kubectl get nodes auf:

kubectl get nodes
NAME             STATUS  ROLES                 AGE   VERSION
moc-l9qz36vtxzj  Ready   control-plane,master  6m14s  v1.22.6
moc-lhbkqoncefu  Ready   <none>                3m19s  v1.22.6
moc-li87udi8l9s  Ready   <none>                3m5s  v1.22.6

Verwenden Sie nun den Befehl kubectl describe node , um zu bestätigen, dass die GPUs geplant werden können. Im Abschnitt Kapazität sollte die GPU als nvidia.com/gpu: 1 angezeigt werden.

kubectl describe <node> | findstr "gpu" 

Die Ausgabe sollte die GPU(s) des Workerknotens anzeigen und etwa wie folgt aussehen:

         nvidia.com/gpu.compute.major=7
         nvidia.com/gpu.compute.minor=5
         nvidia.com/gpu.count=1
         nvidia.com/gpu.family=turing
         nvidia.com/gpu.machine=Virtual-Machine
         nvidia.com/gpu.memory=16384
         nvidia.com/gpu.product=Tesla-T4
Annotations:    cluster.x-k8s.io/cluster-name: gpucluster
                cluster.x-k8s.io/machine: gpunodepool-md-58d9b96dd9-vsdbl
                cluster.x-k8s.io/owner-name: gpunodepool-md-58d9b96dd9
         nvidia.com/gpu:   1
         nvidia.com/gpu:   1
ProviderID:         moc://gpunodepool-97d9f5667-49lt4
kube-system         gpu-feature-discovery-gd62h       0 (0%)    0 (0%)   0 (0%)      0 (0%)     7m1s
         nvidia.com/gpu   0     0

Ausführen einer GPU-fähigen Workload

Nachdem Sie die vorherigen Schritte ausgeführt haben, erstellen Sie eine neue YAML-Datei zum Testen. Beispiel : gpupod.yaml. Kopieren Sie die folgende YAML-Datei, fügen Sie sie in die neue Datei gpupod.yaml ein, und speichern Sie sie dann:

apiVersion: v1
kind: Pod
metadata:
  name: cuda-vector-add
spec:
  restartPolicy: OnFailure
  containers:
  - name: cuda-vector-add
    image: "k8s.gcr.io/cuda-vector-add:v0.1"
    resources:
      limits:
        nvidia.com/gpu: 1

Führen Sie den folgenden Befehl aus, um die Beispielanwendung bereitzustellen:

kubectl apply -f gpupod.yaml

Vergewissern Sie sich, dass der Pod gestartet, die Ausführung abgeschlossen und die GPU zugewiesen ist:

kubectl describe pod cuda-vector-add | findstr 'gpu'

Der vorherige Befehl sollte eine zugewiesene GPU anzeigen:

nvidia.com/gpu: 1
nvidia.com/gpu: 1

Überprüfen Sie die Protokolldatei des Pods, um festzustellen, ob der Test bestanden wurde:

kubectl logs cuda-vector-add

Im Folgenden wird die Beispielausgabe des vorherigen Befehls angezeigt:

[Vector addition of 50000 elements]
Copy input data from the host memory to the CUDA device
CUDA kernel launch with 196 blocks of 256 threads
Copy output data from the CUDA device to the host memory
Test PASSED
Done

Wenn beim Aufrufen von Treibern ein Versionskonfliktfehler angezeigt wird, z. B. "Die CUDA-Treiberversion ist für die CUDA-Laufzeitversion nicht ausreichend", lesen Sie das Kompatibilitätsdiagramm der NVIDIA-Treibermatrix.

Häufig gestellte Fragen

Was geschieht beim Upgrade eines GPU-fähigen Knotenpools?

Das Upgrade von GPU-fähigen Knotenpools folgt demselben rollierenden Upgrademuster, das für reguläre Knotenpools verwendet wird. Damit Knotenpools mit GPU-Unterstützung auf einem neuen virtuellen Computer erfolgreich auf dem physischen Hostcomputer erstellt werden können, müssen mindestens eine physische GPUs für eine erfolgreiche Gerätezuweisung verfügbar sein. Diese Verfügbarkeit stellt sicher, dass Ihre Anwendungen weiterhin ausgeführt werden können, wenn Kubernetes Pods auf diesem aktualisierten Knoten plant.

Vor dem Upgrade:

  1. Planen Sie Ausfallzeiten während des Upgrades.
  2. Verfügen Sie über eine zusätzliche GPU pro physischem Host, wenn Sie die Standard_NK6 ausführen, oder 2 zusätzliche GPUs, wenn Sie Standard_NK12 ausführen. Wenn Sie mit voller Kapazität ausgeführt werden und keine zusätzliche GPU haben, wird empfohlen, Ihren Knotenpool vor dem Upgrade auf einen einzelnen Knoten herunterzuskalieren und nach dem Upgrade erfolgreich hochzuskalieren.

Was geschieht, wenn ich während eines Upgrades keine zusätzlichen physischen GPUs auf meinem physischen Computer habe?

Wenn ein Upgrade für einen Cluster ohne zusätzliche GPU-Ressourcen ausgelöst wird, um das rollierende Upgrade zu erleichtern, wird der Upgradeprozess so lange abgebrochen, bis eine GPU verfügbar ist. Wenn Sie mit voller Kapazität ausgeführt werden und keine zusätzliche GPU haben, empfehlen wir, Ihren Knotenpool vor dem Upgrade auf einen einzelnen Knoten herunterzuskalieren und nach dem Upgrade hochskalieren.

Nächste Schritte