Verwenden von GPUs für rechenintensive Workloads (AKS auf Azure Stack HCI 23H2)

Gilt für: Azure Stack HCI, Version 23H2

Hinweis

Informationen zu GPUs in AKS auf Azure Stack HCI 22H2 finden Sie unter Verwenden von GPUs (HCI 22H2).

Grafische Verarbeitungseinheiten (GPU) werden für rechenintensive Workloads wie Machine Learning, Deep Learning und vieles mehr verwendet. In diesem Artikel wird beschrieben, wie Sie GPUs für rechenintensive Workloads in AKS verwenden, die von Azure Arc aktiviert sind.

Unterstützte GPU-Modelle

Die folgenden GPU-Modelle werden von AKS auf Azure Stack HCI 23H2 unterstützt:

Hersteller GPU-Modell Unterstützte Version
Nvidia A2 2311.2
Nvidia A16 2402.0

Unterstützte VM-Größen

Die folgenden VM-Größen für die einzelnen GPU-Modelle werden von AKS auf Azure Stack HCI 23H2 unterstützt.

Die Nvidia A2 wird von NC2 A2 SKUs unterstützt

Größe des virtuellen Computers GPUs GPU-Arbeitsspeicher: GiB vCPU Memory: GiB
Standard_NC4_A2 1 16 4 8
Standard_NC8_A2 1 16 8 16
Standard_NC16_A2 2 48 16 64
Standard_NC32_A2 2 48 32 28

Die Nvidia A16 wird von NC2 A16 SKUs unterstützt

Größe des virtuellen Computers GPUs GPU-Arbeitsspeicher: GiB vCPU Memory: GiB
Standard_NC4_A16 1 16 4 8
Standard_NC8_A16 1 16 8 16
Standard_NC16_A16 2 48 16 64
Standard_NC32_A16 2 48 32 28

Voraussetzungen

Um GPUs in AKS Arc zu verwenden, stellen Sie sicher, dass Sie die erforderlichen GPU-Treiber installiert haben, bevor Sie mit der Bereitstellung des Clusters beginnen. Führen Sie die Schritte in diesem Abschnitt aus.

Schritt 1: Installieren des Betriebssystems

Installieren Sie das Azure Stack HCI, Version 23H2-Betriebssystem lokal auf jedem Server in Ihrem Azure Stack HCI-Cluster.

Schritt 2: Deinstallieren des NVIDIA-Hosttreibers

Navigieren Sie auf jedem Hostcomputer zu Systemsteuerung > Programme hinzufügen oder entfernen, deinstallieren Sie den NVIDIA-Hosttreiber, und starten Sie 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 diesem Beispiel 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 3: Aufheben der Bereitstellung des Hosttreibers vom Host

Wenn Sie den Hosttreiber deinstallieren, wechselt die physische GPU in einen Fehlerzustand. 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 Instanz-ID; Beispiel: 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 4: Herunterladen und Installieren des NVIDIA-Entschärfungstreibers

Die Software kann Komponenten enthalten, die im Besitz der NVIDIA Corporation oder ihrer Lizenzgeber sind. Die Verwendung dieser Komponenten unterliegt dem NVIDIA-Endbenutzer-Lizenzvertrag.

Weitere Informationen finden Sie in der NVIDIA-Rechenzentrumsdokumentation zum Herunterladen des NVIDIA-Entschärfungstreibers. Erweitern Sie nach dem Herunterladen des Treibers das Archiv, und installieren Sie den Entschärfungstreiber auf jedem Hostcomputer. Sie können diesem PowerShell-Skript folgen, um den Entschärfungstreiber herunterzuladen und zu extrahieren:

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\

Um den Entschärfungstreiber zu installieren, navigieren Sie zu dem Ordner, der die extrahierten Dateien enthält, und wählen Sie die GPU-Treiberdatei basierend auf dem tatsächlichen GPU-Typ aus, der auf Ihren Azure Stack HCI-Hosts installiert ist. Wenn der Typ beispielsweise eine A2-GPU ist, klicken Sie mit der rechten Maustaste auf die Datei nvidia_azure_stack_A2_base.inf, und wählen Sie "Installieren" aus.

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_A2_base.inf /install 
pnputil /scan-devices 

Nachdem Sie den Entschärfungstreiber installiert haben, werden die GPUs unter Nvidia A2_base im STATUS "OK" aufgeführt : Dismounted:

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

Schritt 5: Wiederholen der Schritte 1 bis 4

Wiederholen Sie die Schritte 1 bis 4 für jeden Server in Ihrem HCI-Cluster.

Schritt 6: Fortsetzen der Bereitstellung des Azure Stack HCI-Clusters

Fahren Sie mit der Bereitstellung des Azure Stack HCI-Clusters fort, indem Sie die Schritte in der Azure Stack HCI, Version 23H2-Bereitstellung, ausführen.

Abrufen einer Liste der verfügbaren GPU-fähigen VM-SKUs

Sobald die Bereitstellung des Azure Stack HCI-Clusters abgeschlossen ist, können Sie den folgenden CLI-Befehl ausführen, um die verfügbaren VM-SKUs in Ihrer Bereitstellung anzuzeigen. Wenn Die GPU-Treiber ordnungsgemäß installiert sind, werden die entsprechenden GPU-VM-SKUs aufgeführt:

az aksarc vmsize list --custom-location <custom location ID> -g <resource group name>

Erstellen 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. So erstellen Sie einen neuen Kubernetes-Cluster:

az aksarc create -n <aks cluster name> -g <resource group name> --custom-location <custom location ID> --vnet-ids <vnet ID>

Im folgenden Beispiel wird ein Knotenpool mit 2 GPU-fähigen Knoten (NVDIA A2) mit einer Standard_NC4_A2 VM-SKU hinzugefügt:

az aksarc nodepool add --cluster-name <aks cluster name> -n <node pool name> -g <resource group name> --node-count 2 --node-vm-size Standard_NC4_A2 --os-type Linux

Bestätigen, 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 Kubectl-Beschreibungsknotenbefehl , um zu bestätigen, dass die GPUs geplant werden können. Unter dem Abschnitt "Kapazität " sollte die GPU als nvidia.com/gpu: 1 angezeigt werden.

kubectl describe <node> | findstr "gpu" 

Die Ausgabe sollte die GPU(en) aus dem Arbeitsknoten anzeigen und etwa wie folgt aussehen:

Capacity: 
  cpu:                4 
  ephemeral-storage:  103110508Ki 
  hugepages-1Gi:      0 
  hugepages-2Mi:      0 
  memory:             7865020Ki 
  nvidia.com/gpu:     1 
  pods:               110

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 das folgende YAML, und fügen Sie sie in die neue Datei mit dem Namen gpupod.yaml ein, und speichern Sie sie:

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

Stellen Sie sicher, dass der Pod gestartet, die Ausführung abgeschlossen wurde und der 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 hat:

kubectl logs cuda-vector-add

Im Folgenden sehen Sie eine Beispielausgabe des vorherigen Befehls:

[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 Fehler bei der Versionsübereinstimmung angezeigt wird, z. B. "CUDA-Treiberversion ist für die CUDA-Laufzeitversion nicht ausreichend", lesen Sie das Kompatibilitätsdiagramm der NVIDIA-Treibermatrix.

Häufig gestellte Fragen

Was geschieht während des Upgrades eines GPU-fähigen Knotenpools?

Das Upgrade von GPU-fähigen Knotenpools folgt dem gleichen rollierenden Upgrademuster, das für normale Knotenpools verwendet wird. Damit GPU-fähige Knotenpools in einer neuen VM erfolgreich auf dem physischen Hostcomputer erstellt werden können, muss 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 oder 2 zusätzliche GPUs ausführen, wenn Sie Standard_NK12 ausführen. Wenn Sie mit voller Kapazität ausgeführt werden und nicht über eine zusätzliche GPU verfügen, empfehlen wir, den Knotenpool vor dem Upgrade auf einen einzelnen Knoten zu skalieren, und dann nach dem Upgrade eine Skalierung nach dem Erfolgreichen des Upgrades durchzuführen.

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

Wenn ein Upgrade auf einem Cluster ohne zusätzliche GPU-Ressourcen ausgelöst wird, um das rollierende Upgrade zu erleichtern, hängt der Upgradevorgang, bis eine GPU verfügbar ist. Wenn Sie mit voller Kapazität ausgeführt werden und nicht über eine zusätzliche GPU verfügen, empfehlen wir, den Knotenpool vor dem Upgrade auf einen einzelnen Knoten zu skalieren und nach dem Upgrade nach dem Upgrade hochzuskalieren.

Nächste Schritte