Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les processeurs graphiques (GPU) sont souvent utilisés pour les charges de travail nécessitant beaucoup de ressources système, comme le traitement graphique et la visualisation. AKS prend en charge les pools de nœuds Linux avec GPU pour exécuter des charges de travail Kubernetes gourmandes en calcul.
Cet article vous aide à approvisionner des nœuds avec des GPU programmables sur des clusters AKS nouveaux et existants.
Machines virtuelles compatibles GPU prises en charge
Pour voir les machines virtuelles compatibles GPU prises en charge, consultez Tailles de machines virtuelles optimisées pour les GPU dans Azure. Pour les pools de nœuds AKS, nous recommandons une taille minimale Standard_NC6s_v3. La série NVv4 (basée sur des processeurs AMD) n’est pas prise en charge sur AKS.
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.
Limites
- Si vous utilisez un pool de nœuds avec GPU Linux Azure, les correctifs de sécurité automatiques ne sont pas appliqués. Reportez-vous à votre version actuelle de l’API AKS pour le comportement par défaut du canal de mise à niveau du système d’exploitation de nœud.
Remarque
Pour l’API AKS version 2023-06-01 ou ultérieure, le canal par défaut pour la mise à niveau du système d’exploitation de nœud est NodeImage. Pour les versions précédentes, le canal par défaut est Aucun. Pour plus d’informations, consultez mise à niveau automatique.
- La mise à jour d’un pool de nœuds existant pour ajouter une taille de machine virtuelle GPU n’est pas prise en charge sur AKS.
Remarque
L’image GPU AKS (préversion) est hors service depuis le 10 janvier 2025. L’en-tête personnalisé n’est plus disponible, ce qui signifie que vous ne pouvez pas créer de pools de nœuds compatibles GPU à partir de l’image GPU AKS. Nous vous recommandons d’utiliser la configuration GPU par défaut plutôt que l’image GPU, car l’image GPU n’est plus prise en charge. Pour plus d’informations, consultez les notes de publication d’AKS ou consultez cette annonce de mise hors service dans notre feuille de route publique AKS.
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écutezaz --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.
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 récupère les informations d’identification du cluster myAKSCluster dans le groupe de ressources myResourceGroup :
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Options d’utilisation des GPU NVIDIA
L’utilisation de GPU NVIDIA implique l’installation de différents composants logiciels NVIDIA, tels que le plug-in d’appareil NVIDIA pour Kubernetes, l’installation du pilote GPU, etc.
Remarque
Par défaut, Microsoft maintient automatiquement la version des pilotes NVIDIA dans le cadre du déploiement d’images de nœud, et AKS les prend en charge et les gère. Bien que les pilotes NVIDIA soient installés par défaut sur les nœuds compatibles GPU, vous devez installer le plug-in d’appareil.
Installation du plug-in d’appareil NVIDIA
L’installation du plug-in d’appareil NVIDIA est requise pour l’utilisation de GPU sur AKS. Dans certains cas, l’installation est gérée automatiquement, par exemple quand vous utilisez l’opérateur GPU NVIDIA. Vous pouvez également installer manuellement le plug-in d’appareil NVIDIA.
Installer manuellement le plug-in de périphérique NVIDIA
Vous pouvez déployer un DaemonSet pour le plug-in d’appareil NVIDIA, qui exécute un pod sur chaque nœud afin de fournir les pilotes requis pour les GPU. Il s’agit de l’approche recommandée lors de l’utilisation de pools de nœuds avec GPU pour Azure Linux.
Pour utiliser la référence SKU de système d’exploitation par défaut, vous créez le pool de nœuds sans spécifier de référence SKU de système d’exploitation. Le pool de nœuds est configuré pour le système d’exploitation par défaut en fonction de la version Kubernetes du cluster.
Ajoutez un pool de nœuds à votre cluster avec la commande
az aks nodepool add
.az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name gpunp \ --node-count 1 \ --node-vm-size Standard_NC6s_v3 \ --node-taints sku=gpu:NoSchedule \ --enable-cluster-autoscaler \ --min-count 1 \ --max-count 3
Cette commande ajoute un pool de nœuds nommé gpunp à myAKSCluster dans myResourceGroup et utilise des paramètres pour configurer les paramètres de pool de nœuds suivants :
--node-vm-size
: définit la taille de machine virtuelle du nœud dans le pool de nœuds sur Standard_NC6s_v3.--node-taints
: spécifie une teinte sku=gpu:NoSchedule sur le pool de nœuds.--enable-cluster-autoscaler
: active l’autoscaler de cluster.--min-count
: configure l’autoscaler de cluster pour conserver au minimum un nœud dans le pool de nœuds.--max-count
: configure l’autoscaler de cluster pour conserver un maximum de trois nœuds dans le pool de nœuds.
Remarque
Les restrictions et la taille des VM ne peuvent être définies pour les pools de nœuds que lors de leur création, mais vous pouvez mettre à jour les paramètres de l'autoscaler à tout moment.
Créez un espace de noms à l’aide de la commande
kubectl create namespace
.kubectl create namespace gpu-resources
Créez un fichier nommé nvidia-device-plugin-ds.yaml et collez le manifeste YAML suivant fourni dans le cadre du projet de plug-in d’appareil NVIDIA pour Kubernetes :
apiVersion: apps/v1 kind: DaemonSet metadata: name: nvidia-device-plugin-daemonset namespace: gpu-resources spec: selector: matchLabels: name: nvidia-device-plugin-ds updateStrategy: type: RollingUpdate template: metadata: labels: name: nvidia-device-plugin-ds spec: tolerations: - key: "sku" operator: "Equal" value: "gpu" effect: "NoSchedule" # Mark this pod as a critical add-on; when enabled, the critical add-on # scheduler reserves resources for critical add-on pods so that they can # be rescheduled after a failure. # See https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/ priorityClassName: "system-node-critical" containers: - image: nvcr.io/nvidia/k8s-device-plugin:v0.17.2 name: nvidia-device-plugin-ctr env: - name: FAIL_ON_INIT_ERROR value: "false" securityContext: allowPrivilegeEscalation: false capabilities: drop: ["ALL"] volumeMounts: - name: device-plugin mountPath: /var/lib/kubelet/device-plugins volumes: - name: device-plugin hostPath: path: /var/lib/kubelet/device-plugins
Créez le DaemonSet et vérifiez que le plug-in d’appareil NVIDIA a été créé à l’aide de la commande
kubectl apply
.kubectl apply -f nvidia-device-plugin-ds.yaml
Maintenant que vous avez correctement installé le plugin de périphérique NVIDIA, vous pouvez vérifier que vos GPU sont utilisables et exécuter une charge de travail GPU.
Ignorer l’installation du pilote graphique
Si vous souhaitez contrôler l’installation des pilotes NVIDIA ou utiliser l’opérateur GPU NVIDIA, vous pouvez ignorer l’installation du pilote GPU par défaut. Microsoft ne prend pas en charge ni ne gère la maintenance et la compatibilité des pilotes NVIDIA dans le cadre du déploiement d’images de nœud.
Créez un pool de nœuds en utilisant la commande
az aks nodepool add
et définissez le champ--gpu-driver
surnone
pour ignorer l’installation du pilote GPU par défaut.az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name gpunp \ --node-count 1 \ --gpu-driver none \ --node-vm-size Standard_NC6s_v3 \ --enable-cluster-autoscaler \ --min-count 1 \ --max-count 3
Définir le champ
--gpu-driver
API surnone
lors de la création du pool de nœuds permet de ne pas installer automatiquement le pilote GPU. Les nœuds existants ne sont pas modifiés. Vous pouvez réduire le pool de nœuds à zéro, puis l'augmenter à nouveau pour que la modification prenne effet.Si vous obtenez l’erreur
unrecognized arguments: --gpu-driver none
, mettez à jour la version d’Azure CLI. Pour plus d’informations, consultez Avant de commencer.Vous pouvez éventuellement installer l’opérateur GPU NVIDIA en suivant ces étapes.
Vérifier que les GPU sont planifiables
Après avoir créé votre cluster, vérifiez que les GPU sont planifiables dans Kubernetes.
Répertoriez les nœuds de votre cluster à l’aide de la commande
kubectl get nodes
.kubectl get nodes
Vous devez obtenir un résultat semblable à l’exemple de sortie qui suit :
NAME STATUS ROLES AGE VERSION aks-gpunp-28993262-0 Ready agent 13m v1.20.7
Vérifiez que les GPU peuvent être planifiés à l’aide de la commande
kubectl describe node
.kubectl describe node aks-gpunp-28993262-0
Sous la section Capacité, le GPU doit apparaître ainsi :
nvidia.com/gpu: 1
. Le résultat doit être similaire à l’exemple condensé de sortie suivant :Name: aks-gpunp-28993262-0 Roles: agent Labels: accelerator=nvidia [...] Capacity: [...] nvidia.com/gpu: 1 [...]
Exécuter une charge de travail compatible GPU
Pour voir le GPU en action, vous pouvez planifier une charge de travail compatible GPU avec la demande de ressource correspondante. Dans cet exemple, nous exécutons une tâche Tensorflow sur le jeu de données MNIST.
Créez un fichier nommé samples-tf-mnist-demo.yaml et collez le manifeste YAML suivant, qui inclut une limite de ressources de
nvidia.com/gpu: 1
:Remarque
Si vous recevez une erreur d’incompatibilité de version lorsque vous appelez des pilotes (par exemple, la version du pilote CUDA est insuffisante pour la version du runtime CUDA), consultez la matrice de compatibilité des pilotes NVIDIA.
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: nvidia.com/gpu: 1 restartPolicy: OnFailure tolerations: - key: "sku" operator: "Equal" value: "gpu" effect: "NoSchedule"
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
Supervisez la progression du travail à l’aide de la commande
kubectl get jobs
avec l’indicateur--watch
. L’extraction de l’image, puis 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
Quittez le processus
kubectl --watch
avec Ctrl-C.Obtenez le nom du pod en utilisant la commande
kubectl get pods
.kubectl get pods --selector app=samples-tf-mnist-demo
Affichez la sortie de la charge de travail avec GPU à l’aide de la commande
kubectl logs
.kubectl logs samples-tf-mnist-demo-smnr6
L’exemple suivant de sortie condensée des logs du pod confirme que l’appareil GPU approprié,
Tesla K80
, est disponible :2019-05-16 16:08:31.258328: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA 2019-05-16 16:08:31.396846: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Found device 0 with properties: name: Tesla K80 major: 3 minor: 7 memoryClockRate(GHz): 0.8235 pciBusID: 2fd7:00:00.0 totalMemory: 11.17GiB freeMemory: 11.10GiB 2019-05-16 16:08:31.396886: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: Tesla K80, pci bus id: 2fd7:00:00.0, compute capability: 3.7) 2019-05-16 16:08:36.076962: I tensorflow/stream_executor/dso_loader.cc:139] successfully opened CUDA library libcupti.so.8.0 locally Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes. Extracting /tmp/tensorflow/input_data/train-images-idx3-ubyte.gz Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes. Extracting /tmp/tensorflow/input_data/train-labels-idx1-ubyte.gz Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes. Extracting /tmp/tensorflow/input_data/t10k-images-idx3-ubyte.gz Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes. Extracting /tmp/tensorflow/input_data/t10k-labels-idx1-ubyte.gz Accuracy at step 0: 0.1081 Accuracy at step 10: 0.7457 Accuracy at step 20: 0.8233 Accuracy at step 30: 0.8644 Accuracy at step 40: 0.8848 Accuracy at step 50: 0.8889 Accuracy at step 60: 0.8898 Accuracy at step 70: 0.8979 Accuracy at step 80: 0.9087 Accuracy at step 90: 0.9099 Adding run metadata for 99 Accuracy at step 100: 0.9125 Accuracy at step 110: 0.9184 Accuracy at step 120: 0.922 Accuracy at step 130: 0.9161 Accuracy at step 140: 0.9219 Accuracy at step 150: 0.9151 Accuracy at step 160: 0.9199 Accuracy at step 170: 0.9305 Accuracy at step 180: 0.9251 Accuracy at step 190: 0.9258 Adding run metadata for 199 [...] Adding run metadata for 499
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
- Pour exécuter des tâches Apache Spark, voir Exécuter des tâches Apache Spark sur AKS.
- Pour plus d’informations sur les fonctionnalités du planificateur Kubernetes, consultez Meilleures pratiques relatives aux fonctionnalités avancées du planificateur dans AKS.
- Pour plus d’informations sur Azure Kubernetes Service et Azure Machine Learning, consultez :
Azure Kubernetes Service