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

  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\
        --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

  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 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 et helm 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
    
  3. 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
    
  4. 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

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

  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 plus d’informations sur les pools de nœuds AKS, consultez Gérer des pools de nœuds pour un cluster dans AKS.