Partager via


Utiliser des GPU AMD pour les charges de travail nécessitant beaucoup de ressources sur Azure Kubernetes Service (AKS)

Les tailles de machine virtuelle GPU AMD sur Azure peuvent offrir une flexibilité en matière de performances et de coûts, offrant une capacité de calcul élevée tout en vous permettant de choisir la configuration appropriée pour vos besoins en charge de travail. AKS prend en charge les pools de nœuds Linux avec GPU AMD pour exécuter des charges de travail Kubernetes nécessitant beaucoup de ressources de calcul.

Cet article vous aide à approvisionner des nœuds avec des GPU AMD schedulables sur des clusters AKS nouveaux et existants.

Limites

  • AKS prend actuellement en charge la Standard_ND96isr_MI300X_v5 taille de machine virtuelle Azure alimentée par le GPU AMD de la série MI300.
  • La mise à jour d’un pool de nœuds existant pour ajouter une taille de machine virtuelle GPU AMD n’est pas prise en charge sur AKS.
  • La mise à jour d’un pool de nœuds avec GPU non-AMD avec une taille de machine virtuelle GPU AMD n’est pas prise en charge.
  • AzureLinux, WindowsAzureLinuxOSGuard et flatcar ne sont pas pris en charge avec AMD GPU.

Avant de commencer

  • Cet article suppose que vous disposez d’un cluster AKS. Si vous n'avez pas de cluster, créez-en un à l'aide d'Azure CLI, d'Azure PowerShell ou du portail Azure.
  • Vous avez besoin d’Azure CLI version 2.72.2 ou ultérieure installée pour définir le --gpu-driver champ. Exécutez az --version pour trouver la version. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI.
  • Si l’extension aks-preview Azure CLI est installée, mettez à jour la version vers la version 18.0.0b2 ou ultérieure.

Remarque

Les machines virtuelles avec GPU contiennent du matériel spécialisé, plus cher et dépendant de la disponibilité régionale. Pour plus d’informations, voir l’outil de tarification et la disponibilité régionale.

Obtenir les informations d’identification de votre cluster

Obtenez les informations d’identification de votre cluster AKS à l’aide de la commande az aks get-credentials. L’exemple de commande suivant obtient les informations d’identification du cluster myAKSCluster dans le myResourceGroup groupe de ressources :

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster

Options d’utilisation de GPU AMD

L’utilisation de GPU AMD implique l’installation de différents composants logiciels GPU AMD, tels que le plug-in d’appareil AMD pour Kubernetes, les pilotes GPU, etc.

Remarque

Actuellement, AKS ne gère pas ni automatise l’installation des pilotes GPU ou le plug-in d’appareil GPU AMD sur les pools de nœuds avec GPU AMD.

Inscrire la fonctionnalité AKSInfinibandSupport

  1. Si votre taille de machine virtuelle GPU AMD est compatible RDMA avec la convention d’affectation de noms r (par exemple Standard_ND96isr_MI300X_v5), vous devez vous assurer que les machines du pool de nœuds atterrissent sur le même réseau Infiniband physique. Pour cela, inscrivez l’indicateur de fonctionnalité AKSInfinibandSupport en utilisant la commande az feature register :

    az feature register --name AKSInfinibandSupport --namespace Microsoft.ContainerService
    
  2. Vérifiez l’état de l’inscription en utilisant la commande az feature show :

    az feature show \
    --namespace "Microsoft.ContainerService" \
    --name AKSInfinibandSupport
    
  3. Créez un pool de nœuds avec GPU AMD à l’aide de la az aks nodepool add commande et ignorez l’installation du pilote par défaut en définissant le champ --gpu-driver API sur la valeur none:

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp \
        --node-count 1 \
        --node-vm-size Standard_ND96isr_MI300X_v5 \
        --gpu-driver none
    

    Remarque

    AKS impose actuellement l'utilisation du champ gpu-driver pour ignorer l'installation automatique des pilotes lors de la création du pool de nœuds GPU AMD.

Déployer l’opérateur GPU AMD sur AKS

L’opérateur GPU AMD automatise la gestion et le déploiement de tous les composants logiciels AMD nécessaires à l’approvisionnement du GPU, notamment l’installation du pilote, le plug-in d’appareil AMD pour Kubernetes, le runtime de conteneur AMD, etc. Étant donné que l’opérateur GPU AMD gère ces composants, il n’est pas nécessaire d’installer séparément le plug-in d’appareil AMD sur votre cluster AKS. Cela signifie également que l’installation automatique du pilote GPU doit être ignorée pour utiliser l’opérateur GPU AMD sur AKS.

  1. Suivez la documentation AMD pour installer l’opérateur GPU.

  2. Vérifiez l’état des GPU AMD dans votre pool de nœuds à l’aide de la kubectl get nodes commande :

    kubectl get nodes -o custom-columns=NAME:.metadata.name,GPUs:.status.capacity.'amd\.com/gpu'
    

    Vous devez obtenir un résultat semblable à l’exemple de sortie qui suit :

    NAME                    STATUS   ROLES   AGE    VERSION
    aks-gpunp-00000000      Ready    agent   2m4s   v1.31.7
    

Vérifiez que les GPU AMD sont schedulables

Après avoir créé votre pool de nœuds, vérifiez que les GPU sont schedulables dans votre cluster AKS.

  1. Répertoriez les nœuds de votre cluster à l’aide de la commande kubectl get nodes.

    kubectl get nodes
    
  2. Vérifiez que les GPU peuvent être planifiés à l’aide de la commande kubectl describe node.

    kubectl describe node aks-gpunp-00000000
    

    Sous la section Capacité, le GPU doit apparaître ainsi : amd.com/gpu: 1. Le résultat doit être similaire à l’exemple condensé de sortie suivant :

    Name:               aks-gpunp-00000000
    Roles:              agent
    Labels:             accelerator=amd
    
    [...]
    
    Capacity:
    [...]
     amd.com/gpu:                 1
    [...]
    

Exécuter une charge de travail activée par GPU AMD

Pour voir le GPU AMD en action, vous pouvez planifier une charge de travail compatible GPU avec la demande de ressource appropriée. Dans cet exemple, nous exécutons une tâche Tensorflow sur le jeu de données MNIST.

  1. Créez un fichier nommé samples-tf-mnist-demo.yaml et collez le manifeste YAML suivant, qui inclut une limite de ressources de amd.com/gpu: 1 :

    apiVersion: batch/v1
    kind: Job
    metadata:
      labels:
        app: samples-tf-mnist-demo
      name: samples-tf-mnist-demo
    spec:
      template:
        metadata:
          labels:
            app: samples-tf-mnist-demo
        spec:
          containers:
          - name: samples-tf-mnist-demo
            image: mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu
            args: ["--max_steps", "500"]
            imagePullPolicy: IfNotPresent
            resources:
              limits:
               amd.com/gpu: 1
          restartPolicy: OnFailure
          tolerations:
          - key: "sku"
            operator: "Equal"
            value: "gpu"
            effect: "NoSchedule"
    
  2. Exécutez le travail à l’aide de la commande kubectl apply, qui analyse le fichier manifeste et crée les objets Kubernetes définis.

    kubectl apply -f samples-tf-mnist-demo.yaml
    

Afficher l’état de la charge de travail compatible GPU

  1. Supervisez la progression du travail à l’aide de la commande kubectl get jobs avec l’indicateur --watch. L’extraction de l’image et le traitement du jeu de données peuvent prendre quelques minutes.

    kubectl get jobs samples-tf-mnist-demo --watch
    

    Lorsque la colonne COMPLETIONS affiche 1/1, le travail s’est terminé avec succès, comme indiqué dans l’exemple de sortie suivant :

    NAME                    COMPLETIONS   DURATION   AGE
    
    samples-tf-mnist-demo   0/1           3m29s      3m29s
    samples-tf-mnist-demo   1/1   3m10s   3m36s
    
  2. Quittez le processus kubectl --watch avec Ctrl-C.

  3. Obtenez le nom du pod en utilisant la commande kubectl get pods.

    kubectl get pods --selector app=samples-tf-mnist-demo
    

Nettoyer les ressources

Supprimez les objets Kubernetes associés que vous avez créés dans cet article à l’aide de la commande kubectl delete job.

kubectl delete jobs samples-tf-mnist-demo

Étapes suivantes