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 en sept instances indépendantes au maximum. Chaque instance possède sa propre mémoire et son propre multiprocesseur de flux (SM). Pour plus d’informations sur le Nvidia A100, consultez GPU Nvidia A100.
Cet article vous guide tout au long de la création d’un pool de nœuds GPU multi-instance 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.
- Vous ne pouvez pas utiliser la mise à l’échelle automatique du cluster avec des pools de nœuds 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 d’un SM de 1 Go (ressource de calcul) et de 5 Go de mémoire. Dans ce cas, le GPU est partitionné en sept instances.
Les profils d’instance GPU disponibles pour cette taille d’instance 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\ --node-count 1 \ --generate-ssh-keys
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.az aks nodepool add \ --name mignode \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --node-vm-size Standard_ND96asr_v4 \ --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 : Stratégie unique ou 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
.
Installer le plug-in d’appareil NVIDIA et la détection des fonctionnalités GPU
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 plug-in d’appareil Nvidia et les référentiels helm de découverte de fonctionnalités GPU à l’aide des commandes
helm repo add
ethelm repo update
.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
Installez le plug-in d’appareil Nvidia à l’aide de la commande
helm install
.helm install \ --version=0.14.0 \ --generate-name \ --set migStrategy=${MIG_STRATEGY} \ nvdp/nvidia-device-plugin
Installez la découverte des fonctionnalités GPU à l’aide de la commande
helm install
.helm install \ --version=0.2.0 \ --generate-name \ --set migStrategy=${MIG_STRATEGY} \ nvgfd/gpu-feature-discovery
Confirmer la fonctionnalité GPU multi-instance
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
Vérifiez la connexion à votre cluster avec la commande
kubectl 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é mignode, qui utilise MIG1g comme profil d’instance GPU.kubectl describe node 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 plus d’informations sur les pools de nœuds AKS, consultez Gérer des pools de nœuds pour un cluster dans AKS.
Azure Kubernetes Service