Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: AKS auf Azure Local
Hinweis
Informationen zu GPUs in AKS unter Windows Server finden Sie unter Verwenden von GPUs in AKS unter Windows Server.
Grafische Verarbeitungseinheiten (Graphic Processing Units , GPUs) eignen sich für rechenintensive Workloads wie Maschinelles Lernen, Deep Learning und vieles mehr. 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 unter Azure Local unterstützt. Beachten Sie, dass GPUs nur für Linux-Betriebssystemknotenpools unterstützt werden. GPUs werden in Windows OS-Knotenpools nicht unterstützt.
| Hersteller | GPU-Modell | Unterstützte Version |
|---|---|---|
| NVidia | A2 | 2311.2 |
| NVidia | A16 | 2402.0 |
| NVidia | T4 | 2408.0 |
| NVidia | L4 | 2512.0 |
| NVidia | L40 | 2512.0 |
| NVidia | L40S | 2512.0 |
Unterstützte GPU-VM-Größen
Die folgenden VM-Größen für jedes GPU-Modell werden von AKS auf Azure Local unterstützt.
Nvidia T4 wird von NK T4 SKUs unterstützt
| Größe des virtuellen Computers | GPUs | GPU-Arbeitsspeicher: GiB | vCPU | Speicher: GiB |
|---|---|---|---|---|
| Standard_NK6 | 1 | 8 | 6 | 12 |
| Standard_NK12 | 2 | 16 | 12 | 24 |
Nvidia A2 wird von NC2 A2 SKUs unterstützt
| Größe des virtuellen Computers | GPUs | GPU-Arbeitsspeicher: GiB | vCPU | Speicher: GiB |
|---|---|---|---|---|
| Standard_NC4_A2 | 1 | 16 | 4 | 8 |
| Standard_NC8_A2 | 1 | 16 | 8 | 16 |
| Standard_NC16_A2 | 2 | 32 | 16 | 64 |
| Standard_NC32_A2 | 2 | 32 | 32 | 128 |
Nvidia A16 wird von NC2 A16 SKUs unterstützt
| Größe des virtuellen Computers | GPUs | GPU-Arbeitsspeicher: GiB | vCPU | Speicher: GiB |
|---|---|---|---|---|
| Standard_NC4_A16 | 1 | 16 | 4 | 8 |
| Standard_NC8_A16 | 1 | 16 | 8 | 16 |
| Standard_NC16_A16 | 2 | 32 | 16 | 64 |
| Standard_NC32_A16 | 2 | 32 | 32 | 128 |
Nvidia L4 wird von NC2 L4 SKUs (Vorschau) unterstützt.
| Größe des virtuellen Computers | GPUs | GPU-Arbeitsspeicher: GiB | vCPU | Speicher: GiB |
|---|---|---|---|---|
| Standard_NC16_L4_1 | 1 | 24 | 16 | 64 |
| Standard_NC16_L4_2 | 2 | 48 | 16 | 64 |
| Standard_NC32_L4_1 | 1 | 24 | 32 | 128 |
| Standard_NC32_L4_2 | 2 | 48 | 32 | 128 |
Nvidia L40 wird von NC2 L40 SKUs unterstützt (Vorschau)
| Größe des virtuellen Computers | GPUs | GPU-Arbeitsspeicher: GiB | vCPU | Speicher: GiB |
|---|---|---|---|---|
| Standard_NC16_L40_1 | 1 | 48 | 16 | 64 |
| Standard_NC16_L40_2 | 2 | 96 | 16 | 64 |
| Standard_NC32_L40_1 | 1 | 48 | 32 | 128 |
| Standard_NC32_L40_2 | 2 | 96 | 32 | 128 |
Nvidia L40S wird von NC2 L40S SKUs (Vorschau) unterstützt.
| Größe des virtuellen Computers | GPUs | GPU-Arbeitsspeicher: GiB | vCPU | Speicher: GiB |
|---|---|---|---|---|
| Standard_NC16_L40S_1 | 1 | 48 | 16 | 64 |
| Standard_NC16_L40S_2 | 2 | 96 | 16 | 64 |
| Standard_NC32_L40S_1 | 1 | 48 | 32 | 128 |
| Standard_NC32_L40S_2 | 2 | 96 | 32 | 128 |
Bevor Sie beginnen
Um GPUs in AKS Arc zu verwenden, stellen Sie sicher, dass Sie die erforderlichen GPU-Treiber installieren, 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 lokale Azure-Betriebssystem auf jedem Server in Ihrem lokalen Azure-Cluster.
Schritt 2: Deinstallieren des NVIDIA-Hosttreibers
Wechseln Sie auf jedem Hostcomputer zur 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 | where {$_.friendlyname -eq "3D Video Controller"}
Sie sollten sehen, dass sich die GPU-Geräte in einem Fehlerstatus befinden, 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 3: Deaktivieren des Hosttreibers vom Host
Wenn Sie den Hosttreiber deinstallieren, wechselt die physische GPU in einen Fehlerzustand. Sie müssen alle GPU-Geräte vom Host entfernen.
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 werden. GPUs sollten in einem Unknown Zustand angezeigt werden:
Get-PnpDevice | select status, class, friendlyname, instanceid | where {$_.friendlyname -eq "3D Video Controller"}
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.
Siehe die NVIDIA-Rechenzentrumsdokumentation, um den NVIDIA-Mitigations-Treiber herunterzuladen. Nachdem Sie den Treiber heruntergeladen haben, entpacken Sie das Archiv und installieren Sie den Mitigationstreiber 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, wechseln 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 lokalen Azure-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 den Entschärfungstreiber auch installieren, indem Sie die folgenden Befehle über die Befehlszeile ausführen:
pnputil /add-driver nvidia_azure_stack_A2_base.inf /install
pnputil /scan-devices
Nachdem Sie den Entschärfungstreiber installiert haben, werden die GPUs im Zustand OK unter Nvidia A2_base - Ausgehängt aufgeführt.
Get-PnpDevice | select status, class, friendlyname, instanceid | where {$_.friendlyname -match "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 lokalen Azure-Cluster.
Schritt 6: Fortsetzen der Bereitstellung des lokalen Azure-Clusters
Fahren Sie mit der Bereitstellung des lokalen Azure-Clusters fort, indem Sie die Schritte in der lokalen Azure-Bereitstellung ausführen.
Abrufen einer Liste der verfügbaren GPU-fähigen VM-SKUs
Wenn die Bereitstellung des lokalen Azure-Clusters abgeschlossen ist, führen Sie den folgenden CLI-Befehl aus, um die verfügbaren VM-SKUs in Ihrer Bereitstellung anzuzeigen. Wenn Sie Ihre GPU-Treiber richtig installieren, werden mit dem Befehl die entsprechenden GPU-VM-SKUs aufgelistet:
az aksarc vmsize list --custom-location <custom location ID> -g <resource group name>
Erstellen eines neuen Workloadclusters mit einem GPU-fähigen Knotenpool
Derzeit können Sie nur GPU-fähige Knotenpools für Linux-Knotenpools verwenden. 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 zwei GPU-fähigen (NVIDIA A2)-Knoten 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 der Planbarkeit von GPUs
Vergewissern Sie sich nach dem Erstellen des 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 Sie die GPUs planen können. Unter dem Abschnitt "Kapazität " wird die GPU als nvidia.com/gpu: 1 angezeigt.
kubectl describe <node> | findstr "gpu"
Die Ausgabe zeigt die GPUs vom Arbeitsknoten an und sieht ähnlich wie im folgenden Beispiel aus:
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 abgeschlossen haben, erstellen Sie eine neue YAML-Datei zum Testen, z. B. 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
Überprüfen Sie, ob der Pod gestartet und ausgeführt wurde und ob 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 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 das Upgrade erfolgreich ausgeführt werden kann, muss Kubernetes neue VMs auf dem physischen Hostcomputer erstellen, auf denen mindestens eine physische GPUs für die Gerätezuweisung verfügbar ist. Diese Verfügbarkeit stellt sicher, dass Ihre Anwendungen weiterhin ausgeführt werden können, wenn Kubernetes Pods auf diesem aktualisierten Knoten einplant.
Vor dem Upgrade:
- Planen Sie ausfallzeiten während des Upgrades.
- Verfügen Sie über eine zusätzliche GPU pro physischem Host, wenn Sie die Standard_NK6 oder zwei zusätzliche GPUs ausführen, wenn Sie Standard_NK12 ausführen. Wenn Sie mit voller Kapazität arbeiten und nicht über eine zusätzliche GPU verfügen, skalieren Sie den Knotenpool auf einen einzelnen Knoten vor dem Upgrade, und skalieren Sie dann nach dem Erfolgreichen des Upgrades nach oben.
Was geschieht, wenn ich während eines Upgrades keine zusätzlichen physischen GPUs auf meinem physischen Computer habe?
Wenn Sie ein Upgrade auf einem Cluster ohne zusätzliche GPU-Ressourcen auslösen, um das rollierende Upgrade zu erleichtern, hängt der Upgradevorgang, bis eine GPU verfügbar ist. Wenn Sie mit voller Kapazität arbeiten und nicht über eine zusätzliche GPU verfügen, verkleinern Sie Ihren Knotenpool auf einen einzelnen Knoten vor dem Upgrade und vergrößern Sie ihn nach dem erfolgreichen Upgrade wieder.