Erstellen eines GPU-Knotenpools mit mehreren Instanzen in Azure Kubernetes Service (AKS)
Die A100-GPU von Nvidia kann in bis zu sieben unabhängige Instanzen unterteilt werden. Jede Instanz verfügt über eigenen Arbeitsspeicher und Stream Multiprocessor (SM). Weitere Informationen zu Nvidia A100 finden Sie unter Nvidia A100-GPU.
In diesem Artikel erfahren Sie, wie Sie einen GPU-Knotenpool mit mehreren Instanzen in einem AKS-Cluster (Azure Kubernetes Service) erstellen.
Voraussetzungen und Einschränkungen
- Ein Azure-Konto mit einem aktiven Abonnement. Falls Sie über keins verfügen, können Sie ein kostenloses Konto erstellen.
- Installation und Konfiguration der Azure CLI, Version 2.2.0 oder höher. Führen Sie
az --version
aus, um die Version zu ermitteln. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sie bei Bedarf unter Installieren der Azure CLI. - Installation und Konfiguration des Kubernetes-Befehlszeilenclients kubectl. Bei Verwendung von Azure Cloud Shell ist
kubectl
bereits installiert. Wenn Sie eine lokale Installation bevorzugen, können Sie den Befehlaz aks install-cli
verwenden. - Installation und Konfiguration von Helm 3. Weitere Informationen finden Sie unter Installing Helm (Installieren von Helm).
- Sie können die Clusterautoskalierung nicht mit Knotenpools mehrere Instanzen verwenden.
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 1g.5gb | 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 |
Das GPU-Instanzprofil von MIG 1g.5gb
gibt beispielsweise an, dass jede GPU-Instanz 1g SM (Computingressource) und 5 GB Arbeitsspeicher aufweist. In diesem Fall wird die GPU in sieben Instanzen partitioniert.
Die verfügbaren GPU-Instanzprofile für diese Instanzgröße sind MIG1g
, MIG2g
, MIG3g
, MIG4g
, MIG7g
.
Wichtig
Das angewendete GPU-Instanzprofil kann nach der Erstellung des Knotenpools nicht mehr geändert werden.
Erstellen eines AKS-Clusters
Erstellen Sie mithilfe des Befehls
az group create
eine Azure-Ressourcengruppe.az group create --name myResourceGroup --location southcentralus
Erstellen Sie mit dem Befehl
az aks create
einen AKS-Cluster.az aks create \ --resource-group myResourceGroup \ --name myAKSCluster\ --node-count 1 \ --generate-ssh-keys
Erstellen eines GPU-Knotenpools mit mehreren Instanzen
Sie können entweder die 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.az aks nodepool add \ --name mignode \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --node-vm-size Standard_ND96asr_v4 \ --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: 1
angezeigt. - 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: 1
angezeigt.
Installieren des NVIDIA-Geräte-Plug-Ins und der GPU-Featureermittlung
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=mixed
Fügen Sie die Helm-Repositorys des Nvidia-Geräte-Plug-Ins und der GPU-Featureermittlung mithilfe der Befehle
helm repo add
undhelm repo update
hinzu.helm repo add nvdp https://nvidia.github.io/k8s-device-plugin helm repo add nvgfd https://nvidia.github.io/gpu-feature-discovery helm repo update
Installieren Sie das Nvidia-Geräte-Plug-In mithilfe des Befehls
helm install
.helm install \ --version=0.14.0 \ --generate-name \ --set migStrategy=${MIG_STRATEGY} \ nvdp/nvidia-device-plugin
Installieren Sie die GPU-Featureermittlung mithilfe des Befehls
helm install
.helm install \ --version=0.2.0 \ --generate-name \ --set migStrategy=${MIG_STRATEGY} \ nvgfd/gpu-feature-discovery
Bestätigen der GPU-Funktion für mehrere Instanzen
Konfigurieren Sie
kubectl
, um mithilfe des Befehlsaz aks get-credentials
eine Verbindung mit Ihrem AKS-Cluster herzustellen.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Überprüfen Sie die Verbindung mit Ihrem Cluster mithilfe des Befehls
kubectl get
, um eine Liste der Clusterknoten zurückzugeben.kubectl get nodes -o wide
Vergewissern 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 namens mignode, der MIG1g als GPU-Instanzprofil verwendet.kubectl describe node mignode
Ihre 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": 1
Stellen 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 -L
Das 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": 1
Stellen 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 -L
Das 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 Tag latest
für CUDA-Images gilt auf Docker Hub als veraltet. Die neuesten Images und entsprechenden Tags finden Sie im NVIDIA-Repository.
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 AKS-Knotenpools finden Sie unter Verwalten von Knotenpools für einen Cluster in AKS.
Azure Kubernetes Service