Créer un pool de nœuds GPU multi-instance dans Azure Kubernetes Service (AKS)
Il est possible de diviser le GPU A100 de NVIDIA jusqu’à sept instances indépendantes. Chaque instance a son propre multiprocesseur de flux (SM), responsable de l’exécution d’instructions en parallèle, et une mémoire GPU. Pour plus d’informations sur le NVIDIA A100, consultez Processeur graphique NVIDIA A100.
Cet article vous guide tout au long de la création d’un pool de nœuds GPU multi-instances à l’aide d’une taille de machine virtuelle compatible MIG dans un cluster Azure Kubernetes Service (AKS).
Conditions préalables et limitations
- Compte Azure avec un abonnement actif. Si vous n’en avez pas, vous pouvez créer un compte gratuitement.
- Azure CLI version 2.2.0 ou ultérieure installé et configuré. Exécutez
az --version
pour trouver la version. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI. - Le client de ligne de commande Kubernetes, kubectl, installé et configuré. Si vous utilisez Azure Cloud Shell,
kubectl
est déjà installé. Pour l’installer localement, vous pouvez utiliser la commandeaz aks install-cli
. - Helm v3 installé et configuré. Pour en savoir plus, consultez Installation de Helm.
- Les pools de nœuds GPU multi-instances ne sont actuellement pas pris en charge sur Azure Linux.
- Vous ne pouvez pas utiliser la mise à l’échelle automatique de cluster avec des pools de nœuds GPU multi-instances.
Profils d’instance GPU
Les profils d’instance GPU définissent la façon dont les GPU sont partitionnés. Le tableau suivant affiche le profil d’instance GPU pour Standard_ND96asr_v4
:
Nom du profil | Fraction de SM | Fraction de mémoire | Nombre d’instances créées |
---|---|---|---|
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 |
Par exemple, le profil d’instance GPU de MIG 1g.5gb
indique que chaque instance GPU dispose de SM (multiprocesseurs de flux) de 1 GPU de et d’une mémoire de 5 Go. Dans ce cas, le GPU est partitionné en sept instances.
Les profils d’instance GPU disponibles pour cette taille de machine virtuelle comprennent MIG1g
, MIG2g
, MIG3g
, MIG4g
et MIG7g
.
Important
Vous ne pouvez pas modifier le profil d’instance GPU appliqué après la création du pool de nœuds.
Créer un cluster AKS
Créez un groupe de ressources Azure à l’aide de la commande
az group create
.az group create --name myResourceGroup --location southcentralus
Créez un cluster AKS avec la commande
az aks create
.az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --generate-ssh-keys
Configurez
kubectl
pour qu’il se connecte à votre cluster AKS à l’aide de la commandeaz aks get-credentials
.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Créer un pool de nœuds GPU multi-instances
Vous pouvez utiliser Azure CLI ou une requête HTTP adressée à l’API ARM pour créer le pool de nœuds.
Créez un pool de nœuds GPU multi-instance à l’aide de la commande
az aks nodepool add
et spécifiez le profil d’instance GPU. L’exemple ci-dessous crée un pool de nœuds avec la taille de machine virtuelle GPU compatible MIGStandard_ND96asr_v4
.az aks nodepool add \ --name aks-mignode \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --node-vm-size Standard_ND96asr_v4 \ --node-count 1 \ --gpu-instance-profile MIG1g
Déterminer la stratégie GPU multi-instance (MIG)
Avant d’installer les plug-ins NVIDIA, vous devez spécifier la stratégie GPU multi-instance (MIG) à utiliser pour le partitionnement GPU : une stratégie unique ou une stratégie mixte. Les deux stratégies n’affectent pas la manière dont vous exécutez les charges de travail de processeur, mais la manière dont les ressources GPU s’affichent.
- Stratégie unique : La stratégie unique traite chaque instance GPU comme un GPU. Si vous utilisez cette stratégie, les ressources GPU s’affichent en tant que
nvidia.com/gpu: 1
. - Stratégie mixte : La stratégie mixte expose les instances GPU et le profil d’instance GPU. Si vous utilisez cette stratégie, les ressources GPU s’affichent en tant que
nvidia.com/mig1g.5gb: 1
.
Installez le plug-in d’appareil NVIDIA et les composants de découverte des fonctionnalités GPU (GFD)
Définissez votre stratégie MIG en tant que variable d’environnement. Vous pouvez utiliser soit la stratégie unique, soit la stratégie mixte.
# Single strategy export MIG_STRATEGY=single # Mixed strategy export MIG_STRATEGY=mixed
Ajoutez le référentiel Helm du plug-in d’appareil NVIDIA à l’aide des commandes
helm repo add
ethelm repo update
.helm repo add nvdp https://nvidia.github.io/k8s-device-plugin helm repo update
Installez le plug-in d’appareil NVIDIA à l’aide de la commande
helm install
.helm install nvdp nvdp/nvidia-device-plugin \ --version=0.15.0 \ --generate-name \ --set migStrategy=${MIG_STRATEGY} \ --set gfd.enabled=true \ --namespace nvidia-device-plugin \ --create-namespace
Remarque
L’installation Helm du plug-in d’appareil NVIDIA version 0.15.0 et ultérieures consolide le plug-in d’appareil et les référentiels GFD. Une installation Helm distincte du composant logiciel GFD n’est pas recommandée dans ce tutoriel.
Confirmer la fonctionnalité GPU multi-instance
Vérifiez la connexion
kubectl
à votre cluster à l’aide de la commandekubectl get
pour retourner une liste des nœuds du cluster.kubectl get nodes -o wide
Vérifiez que le nœud dispose d’une fonctionnalité GPU multi-instance à l’aide de la commande
kubectl describe node
. L’exemple de commande suivant décrit le nœud nommé aks-mignode, qui utilise MIG1g comme profil d’instance GPU.kubectl describe node aks-mignode
Votre sortie doit ressembler à l’exemple suivant :
# Single strategy output Allocatable: nvidia.com/gpu: 56 # Mixed strategy output Allocatable: nvidia.com/mig-1g.5gb: 56
Planifier le travail
Les exemples suivants sont basés sur l’image de base CUDA version 12.1.1 pour Ubuntu 22.04, étiquetée comme 12.1.1-base-ubuntu22.04
.
Stratégie unique
Créez un fichier nommé
single-strategy-example.yaml
et copiez-y le manifeste suivant.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
Déployez l’application à l’aide de la commande
kubectl apply
et spécifiez le nom de votre manifeste YAML.kubectl apply -f single-strategy-example.yaml
Vérifiez les appareils GPU alloués à l’aide de la commande
kubectl exec
. Cette commande renvoie la liste des nœuds de cluster.kubectl exec nvidia-single -- nvidia-smi -L
L’exemple suivant ressemble à la sortie montrant les déploiements et services créés avec succès :
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)
Stratégie mixte
Créez un fichier nommé
mixed-strategy-example.yaml
et copiez-y le manifeste suivant.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
Déployez l’application à l’aide de la commande
kubectl apply
et spécifiez le nom de votre manifeste YAML.kubectl apply -f mixed-strategy-example.yaml
Vérifiez les appareils GPU alloués à l’aide de la commande
kubectl exec
. Cette commande renvoie la liste des nœuds de cluster.kubectl exec nvidia-mixed -- nvidia-smi -L
L’exemple suivant ressemble à la sortie montrant les déploiements et services créés avec succès :
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)
Important
La balise latest
pour les images CUDA a été déconseillée sur Docker Hub. Reportez-vous au référentiel de NVIDIA pour connaître les dernières images et les étiquettes correspondantes.
Dépannage
Si la fonctionnalité GPU multi-instance n’apparaît pas après la création du pool de nœuds, vérifiez que la version de l’API n’est pas antérieure à 2021-08-01.
Étapes suivantes
Pour en savoir plus sur les GPU sur Azure Kubernetes Service, consultez :
Azure Kubernetes Service