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.
Bestimmte NVIDIA GPUs können in bis zu sieben unabhängige Instanzen unterteilt werden. Jede Instanz verfügt über einen eigenen Stream Multiprocessor (SM), der für die parallele Ausführung von Anweisungen und für den GPU-Speicher verantwortlich ist. Weitere Informationen zur GPU-Partitionierung finden Sie unter NVIDIA MIG.
Dieser Artikel führt Sie durch das Erstellen eines GPU-Knotenpools mit mehreren Instanzen mithilfe einer MIG-kompatiblen VM-Größe in einem Azure Kubernetes Service (AKS) Cluster.
Voraussetzungen und Einschränkungen
- Ein Azure Konto mit einem aktiven Abonnement. Falls Sie über keins verfügen, können Sie ein kostenloses Konto erstellen.
- Azure CLI Version 2.2.0 oder höher installiert und konfiguriert. Führen Sie
az --versionaus, um die Version zu ermitteln. Informationen zum Installieren oder Aktualisieren finden Sie unter Install Azure CLI. - Installation und Konfiguration des Kubernetes-Befehlszeilenclients kubectl. Wenn Sie Azure Cloud Shell verwenden, ist
kubectlbereits installiert. Wenn Sie eine lokale Installation bevorzugen, können Sie den Befehlaz aks install-cliverwenden. - Installation und Konfiguration von Helm 3. Weitere Informationen finden Sie unter Installing Helm (Installieren von Helm).
- Multi-Instance-GPU wird derzeit bei den
Standard_NC40ads_H100_v5,Standard_ND96isr_H100_v5und A100-GPU-VM-Größen auf AKS unterstützt.
GPU-Instanzprofile
GPU-Instanzprofile definieren, wie GPUs partitioniert werden. Die folgende Tabelle zeigt das verfügbare GPU-Instanzprofil für Standard_ND96asr_v4:
| Profilname | Anteil von SM | Anteil des Arbeitsspeichers | Anzahl erstellter Instanzen |
|---|---|---|---|
| MIG 1 g, 5 GB | 1/7 | 1/8 | 7 |
| MIG 2G.10GB | 2/7 | 2/8 | 3 |
| MIG 3G.20GB | 3/7 | 4/8 | 2 |
| MIG 4g.20GB | 4/7 | 4/8 | 1 |
| MIG 7g.40gb | 7/7 | 8/8 | 1 |
Beispielsweise gibt das GPU-Instanzprofil von MIG 1g.5gb an, dass jede GPU-Instanz 1G SM (Streaming-Multiprozessoren) und 5 GB Arbeitsspeicher aufweist. In diesem Fall wird die GPU in sieben Instanzen partitioniert.
Die verfügbaren GPU-Instanzprofile für diese VM-Größe sind MIG1g, MIG2g, MIG3g, MIG4g und MIG7g.
Wichtig
Das angewendete GPU-Instanzprofil kann nach der Erstellung des Knotenpools nicht mehr geändert werden.
Erstellen eines AKS-Clusters
Erstellen Sie eine Azure Ressourcengruppe mithilfe des Befehls
az group create.az group create --name myResourceGroup --location southcentralusErstellen Sie mit dem Befehl
az aks createeinen AKS-Cluster.az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --generate-ssh-keysKonfigurieren Sie
kubectl, um mithilfe des Befehlsaz aks get-credentialseine Verbindung mit Ihrem AKS-Cluster herzustellen.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Erstellen eines GPU-Knotenpools mit mehreren Instanzen
Sie können entweder den Azure CLI oder eine HTTP-Anforderung an die ARM-API verwenden, um den Knotenpool zu erstellen.
Erstellen Sie einen GPU-Knotenpool mit mehreren Instanzen über den Befehl
az aks nodepool add, und geben Sie das GPU-Instanzprofil an. Im folgenden Beispiel wird ein Knotenpool mit derStandard_ND96asr_v4-MIG-kompatiblen GPU-VM-Größe erstellt.az aks nodepool add \ --name aksMigNode \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --node-vm-size Standard_ND96asr_v4 \ --node-count 1 \ --gpu-instance-profile MIG1g
Festlegen der Strategie für GPU mit mehreren Instanzen (MIG)
Bevor Sie die NVIDIA-Plug-Ins installieren, müssen Sie angeben, welche MIG-Strategie (GPU mit mehreren Instanzen) für die GPU-Partitionierung verwendet werden soll: Einzelstrategie oder Gemischte Strategie. Die beiden Strategien wirken sich nicht auf die Ausführung von CPU-Workloads aus, sondern darauf, wie GPU-Ressourcen angezeigt werden.
-
Einzelstrategie: Die Einzelstrategie behandelt jede GPU-Instanz als GPU. Wenn Sie diese Strategie verwenden, werden die GPU-Ressourcen als
nvidia.com/gpu: 1angezeigt. -
Gemischte Strategie: Die gemischte Strategie macht die GPU-Instanzen und das GPU-Instanzprofil verfügbar. Wenn Sie diese Strategie verwenden, werden die GPU-Ressourcen als
nvidia.com/mig1g.5gb: 1angezeigt.
Installieren der Komponenten für NVIDIA-Geräte-Plug-In und GPU Feature Discovery (GFD)
Legen Sie Ihre MIG-Strategie als Umgebungsvariable fest. Sie können entweder die Einzelstrategie oder die gemischte Strategie verwenden.
# Single strategy export MIG_STRATEGY=single # Mixed strategy export MIG_STRATEGY=mixedFügen Sie das NVIDIA-Geräte-Plug-In-Helm-Repository mit den Befehlen
helm repo addundhelm repo updatehinzu.helm repo add nvdp https://nvidia.github.io/k8s-device-plugin helm repo updateInstallieren Sie das NVIDIA-Geräte-Plug-In mithilfe des Befehls
helm install.helm install nvdp nvdp/nvidia-device-plugin \ --version=0.17.0 \ --set migStrategy=${MIG_STRATEGY} \ --set gfd.enabled=true \ --namespace nvidia-device-plugin \ --create-namespace
Hinweis
Die Helm-Installation des NVIDIA-Geräte-Plug-Ins konsolidiert das Kubernetes-Geräte-Plug-In und die GFD-Repositories. Die separate Helm-Installation der GFD-Softwarekomponente wird nicht empfohlen, wenn eine AKS-verwaltete GPU mit mehreren Instanzen genutzt wird.
Hinweis
Wenn Sie das NVIDIA-Geräte-Plug-In unter Azure Linux über ein benutzerdefiniertes DaemonSet-Manifest anstelle von Helm bereitstellen, müssen Sie die Umgebungsvariable NVIDIA_MIG_MONITOR_DEVICES=all in den Container des Geräte-Plug-Ins einschließen.
Bestätigen der GPU-Funktion für mehrere Instanzen
Überprüfen Sie die Verbindung
kubectlmit Ihrem Cluster mithilfe des Befehlskubectl get, um eine Liste der Clusterknoten zurückzugeben.kubectl get nodes -o wideVergewissern Sie sich mithilfe des Befehls
kubectl describe node, dass der Knoten über eine GPU-Funktion mit mehreren Instanzen verfügt. Der folgende Beispielbefehl beschreibt den Knoten aksMigNode, der MIG1g als GPU-Instanzprofil verwendet.kubectl describe node aksMigNodeIhre Ausgabe sollte in etwa wie die folgende Beispielausgabe aussehen:
# Single strategy output Allocatable: nvidia.com/gpu: 56 # Mixed strategy output Allocatable: nvidia.com/mig-1g.5gb: 56
Planen der Arbeit
Die folgenden Beispiele basieren auf der CUDA-Basisimageversion 12.1.1 für Ubuntu 22.04, gekennzeichnet als 12.1.1-base-ubuntu22.04.
Einzelne Strategie
Erstellen Sie eine Datei namens
single-strategy-example.yaml, und fügen Sie das folgende Manifest ein.apiVersion: v1 kind: Pod metadata: name: nvidia-single spec: containers: - name: nvidia-single image: nvidia/cuda:12.1.1-base-ubuntu22.04 command: ["/bin/sh"] args: ["-c","sleep 1000"] resources: limits: "nvidia.com/gpu": 1Stellen Sie die Anwendung über den Befehl „
kubectl apply“ bereit, und geben Sie den Namen Ihres YAML-Manifests an.kubectl apply -f single-strategy-example.yamlÜberprüfen Sie die zugeordneten GPU-Geräte mithilfe des Befehls
kubectl exec. Dieser Befehl gibt eine Liste der Clusterknoten zurück.kubectl exec nvidia-single -- nvidia-smi -LDas folgende Beispiel ähnelt einer Ausgabe, die erfolgreich erstellte Bereitstellungen und Dienste anzeigt:
GPU 0: NVIDIA A100 40GB PCIe (UUID: GPU-48aeb943-9458-4282-da24-e5f49e0db44b) MIG 1g.5gb Device 0: (UUID: MIG-fb42055e-9e53-5764-9278-438605a3014c) MIG 1g.5gb Device 1: (UUID: MIG-3d4db13e-c42d-5555-98f4-8b50389791bc) MIG 1g.5gb Device 2: (UUID: MIG-de819d17-9382-56a2-b9ca-aec36c88014f) MIG 1g.5gb Device 3: (UUID: MIG-50ab4b32-92db-5567-bf6d-fac646fe29f2) MIG 1g.5gb Device 4: (UUID: MIG-7b6b1b6e-5101-58a4-b5f5-21563789e62e) MIG 1g.5gb Device 5: (UUID: MIG-14549027-dd49-5cc0-bca4-55e67011bd85) MIG 1g.5gb Device 6: (UUID: MIG-37e055e8-8890-567f-a646-ebf9fde3ce7a)
Gemischte Strategie
Erstellen Sie eine Datei namens
mixed-strategy-example.yaml, und fügen Sie das folgende Manifest ein.apiVersion: v1 kind: Pod metadata: name: nvidia-mixed spec: containers: - name: nvidia-mixed image: nvidia/cuda:12.1.1-base-ubuntu22.04 command: ["/bin/sh"] args: ["-c","sleep 100"] resources: limits: "nvidia.com/mig-1g.5gb": 1Stellen Sie die Anwendung über den Befehl „
kubectl apply“ bereit, und geben Sie den Namen Ihres YAML-Manifests an.kubectl apply -f mixed-strategy-example.yamlÜberprüfen Sie die zugeordneten GPU-Geräte mithilfe des Befehls
kubectl exec. Dieser Befehl gibt eine Liste der Clusterknoten zurück.kubectl exec nvidia-mixed -- nvidia-smi -LDas folgende Beispiel ähnelt einer Ausgabe, die erfolgreich erstellte Bereitstellungen und Dienste anzeigt:
GPU 0: NVIDIA A100 40GB PCIe (UUID: GPU-48aeb943-9458-4282-da24-e5f49e0db44b) MIG 1g.5gb Device 0: (UUID: MIG-fb42055e-9e53-5764-9278-438605a3014c)
Wichtig
Das latest-Tag für CUDA-Bilder ist für Docker Hub veraltet. Die neuesten Images und entsprechenden Tags finden Sie im Repository von NVIDIA.
Problembehandlung
Wenn nach dem Erstellen des Knotenpools keine GPU-Funktion mit mehreren Instanzen angezeigt wird, vergewissern Sie sich, dass die API-Version nicht älter als 2021-08-01 ist.
Nächste Schritte
Weitere Informationen zu GPUs auf Azure Kubernetes Service finden Sie unter: