Partager via


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 commande az 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

  1. Créez un groupe de ressources Azure à l’aide de la commande az group create.

    az group create --name myResourceGroup --location southcentralus
    
  2. Créez un cluster AKS avec la commande az aks create.

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --generate-ssh-keys
    
  3. Configurez kubectl pour qu’il se connecte à votre cluster AKS à l’aide de la commande az 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 MIG Standard_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)

  1. 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
    
  2. Ajoutez le référentiel Helm du plug-in d’appareil NVIDIA à l’aide des commandes helm repo add et helm repo update.

    helm repo add nvdp https://nvidia.github.io/k8s-device-plugin
    helm repo update
    
  3. 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

  1. Vérifiez la connexion kubectl à votre cluster à l’aide de la commande kubectl get pour retourner une liste des nœuds du cluster.

    kubectl get nodes -o wide
    
  2. 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

  1. 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
    
  2. 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
    
  3. 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

  1. 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
    
  2. 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
    
  3. 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 :