Utiliser des GPU Windows pour les charges de travail nécessitant beaucoup de ressources système sur Azure Kubernetes Service (AKS) (préversion)
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 Windows et Linux avec GPU pour exécuter des charges de travail Kubernetes gourmandes en calcul.
Cet article vous aide à approvisionner des nœuds Windows avec des GPU programmables sur des clusters AKS nouveaux et existants (préversion).
Machines virtuelles compatibles GPU prises en charge (VM)
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
- La mise à jour d’un pool de nœuds Windows existant pour ajouter un GPU n’est pas prise en charge.
- Non pris en charge sur Kubernetes version 1.28 et versions ultérieures.
Avant de commencer
- Cet article suppose que vous disposez d’un cluster AKS. Si vous avez besoin d’un cluster, créez-en un à l'aide d’Azure CLI, d’Azure PowerShell ou du Portail Azure.
- Vous avez besoin d'Azure CLI version 1.0.0b2 ou ultérieure installée et configurée pour utiliser le champ
--skip-gpu-driver-install
avec la commandeaz aks nodepool add
. Exécutezaz --version
pour trouver la version. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI. - Vous devez avoir la version 9.0.0b5 ou ultérieure d’Azure CLI installée et configurée pour utiliser le champ
--driver-type
avec la commandeaz aks nodepool add
. Exécutezaz --version
pour trouver la version. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI.
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
Utilisation du GPU Windows avec installation automatique du pilote
L’utilisation de GPU NVIDIA implique l’installation de différents composants logiciels NVIDIA, tels que le plug-in d’appareil DirectX pour Kubernetes, l’installation du pilote GPU, etc. Lorsque vous créez un pool de nœuds Windows avec une machine virtuelle compatible GPU prise en charge, ces composants et les pilotes NVIDIA CUDA ou GRID appropriés sont installés. Pour les tailles de machine virtuelle de série NC et ND, le pilote CUDA est installé. Pour les tailles de machine virtuelle de la série NV, le pilote GRID est installé.
Important
Les fonctionnalités d’évaluation AKS sont disponibles en libre-service et font l’objet d’un abonnement. Les préversions sont fournies « en l’état » et « en fonction des disponibilités », et sont exclues des contrats de niveau de service et de la garantie limitée. Les préversions AKS sont, dans la mesure du possible, partiellement couvertes par le service clientèle. Telles quelles, ces fonctionnalités ne sont pas destinées à une utilisation en production. Pour plus d’informations, consultez les articles de support suivants :
Installez l’extension Azure CLI aks-preview
.
Inscrivez ou mettez à jour l’extension aks-preview à l’aide de la commande
az extension add
ouaz extension update
.# Register the aks-preview extension az extension add --name aks-preview # Update the aks-preview extension az extension update --name aks-preview
Inscrire l’indicateur de fonctionnalité WindowsGPUPreview
Inscrivez l’indicateur de fonctionnalité
WindowsGPUPreview
à l’aide de la commandeaz feature register
.az feature register --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
Quelques minutes sont nécessaires pour que l’état s’affiche Registered (Inscrit).
Vérifiez l’état de l’inscription en utilisant la commande
az feature show
.az feature show --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
Quand l’état reflète Inscrit, actualisez l’inscription du fournisseur de ressources Microsoft.ContainerService à l’aide de la commande
az provider register
.az provider register --namespace Microsoft.ContainerService
Créer un pool de nœuds avec GPU Windows (préversion)
Pour créer un pool de nœuds avec GPU Windows, vous devez utiliser une taille de machine virtuelle compatible GPU prise en charge et spécifier la valeur os-type
en tant que Windows
. La valeur par défaut de Windows os-sku
est Windows2022
, mais toutes les options Windows os-sku
sont prises en charge.
Créer un pool de nœuds Windows activé compatible GPU en utilisant la commande
az aks nodepool add
.az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name gpunp \ --node-count 1 \ --os-type Windows \ --kubernetes-version 1.29.0 \ --node-vm-size Standard_NC6s_v3
Vérifiez que vos GPU sont planifiables.
Une fois que vous avez confirmé que vos GPU sont planifiables, vous pouvez exécuter votre charge de travail GPU.
Spécifier le type de pilote de GPU (préversion)
Par défaut, AKS spécifie un type de pilote GPU par défaut pour chaque machine virtuelle compatible avec un GPU prise en charge. Étant donné que la compatibilité des charges de travail et du pilote est importante pour le fonctionnement des charges de travail de GPU, vous pouvez spécifier le type de pilote pour votre nœud de GPU Windows. Cette fonctionnalité n’est pas prise en charge pour les pools de nœuds de GPU Linux.
Lorsque vous créez un pool d’agents Windows avec une prise en charge du GPU, vous avez la possibilité de spécifier le type de pilote de GPU à l’aide de l’indicateur --driver-type
.
Les options disponibles sont les suivantes :
- GRID : pour les applications nécessitant une prise en charge de la virtualisation.
- CUDA : optimisé pour les tâches de calcul dans les applications informatiques scientifiques et gourmandes en données.
Remarque
Lorsque vous définissez l’indicateur --driver-type
, vous prenez la responsabilité d’assurer que le type de pilote sélectionné est compatible avec la taille et la configuration de machine virtuelle spécifiques de votre pool de nœuds. Bien qu’AKS tente de valider la compatibilité, il existe des scénarios où la création du pool de nœuds peut échouer en raison d’incompatibilités entre le type de pilote spécifié et la machine virtuelle ou le matériel sous-jacent.
Pour créer un pool de nœuds avec une prise en charge de GPU Windows doté d’un type de pilote de GPU spécifique, utilisez la commande az aks nodepool add
.
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name gpunp \
--node-count 1 \
--os-type Windows \
--kubernetes-version 1.29.0 \
--node-vm-size Standard_NC6s_v3 \
--driver-type GRID
Par exemple, la commande ci-dessus crée un pool de nœuds avec une prise en charge de GPU à l’aide du type de pilote de GPU GRID
. La sélection de ce type de pilote remplace la valeur par défaut du type de pilote CUDA
pour les SKU de machines virtuelles de la série NC.
Utilisation du GPU Windows avec installation manuelle du pilote
Lors de la création d’un pool de nœuds Windows avec des tailles de machine virtuelle de série N (NVIDIA GPU) dans AKS, le pilote GPU et le plug-in d’appareil Kubernetes DirectX sont installés automatiquement. Pour contourner cette installation automatique, procédez comme suit :
- Ignorer l’installation du pilote GPU (préversion) en utilisant
--skip-gpu-driver-install
. - Installation manuelle du plug-in d’appareil Kubernetes DirectX.
Ignorer l’installation du pilote GPU (préversion)
L’installation automatique du pilote GPU est activée par défaut dans AKS. Dans certains cas, comme l’installation de vos propres pilotes, vous pouvez ignorer l’installation du pilote GPU.
Important
Les fonctionnalités d’évaluation AKS sont disponibles en libre-service et font l’objet d’un abonnement. Les préversions sont fournies « en l’état » et « en fonction des disponibilités », et sont exclues des contrats de niveau de service et de la garantie limitée. Les préversions AKS sont, dans la mesure du possible, partiellement couvertes par le service clientèle. Telles quelles, ces fonctionnalités ne sont pas destinées à une utilisation en production. Pour plus d’informations, consultez les articles de support suivants :
Inscrivez ou mettez à jour l’extension aks-preview à l’aide de la commande
az extension add
ouaz extension update
.# Register the aks-preview extension az extension add --name aks-preview # Update the aks-preview extension az extension update --name aks-preview
Créez un pool de nœuds à l’aide de la commande
az aks nodepool add
avec l’indicateur--skip-gpu-driver-install
pour ignorer l’installation automatique du pilote GPU.az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name gpunp \ --node-count 1 \ --os-type windows \ --os-sku windows2022 \ --skip-gpu-driver-install
Remarque
Si l’utilisation de --node-vm-size
n’est pas encore intégrée sur AKS, vous ne pouvez pas utiliser de GPU et --skip-gpu-driver-install
ne fonctionne pas.
Installer manuellement le plug-in d’appareil Kubernetes DirectX
Vous pouvez déployer un DaemonSet pour le plug-in d’appareil Kubernetes DirectX, qui exécute un pod sur chaque nœud afin de fournir les pilotes requis pour les GPU.
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 \ --os-type windows \ --os-sku windows2022
Créer un espace de noms et déployer le plug-in d’appareil Kubernetes DirectX
Créez un espace de noms à l’aide de la commande
kubectl create namespace
.kubectl create namespace gpu-resources
Créez un fichier nommé k8s-directx-device-plugin.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: # 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. This annotation works in tandem with the toleration below. annotations: scheduler.alpha.kubernetes.io/critical-pod: "" labels: name: nvidia-device-plugin-ds spec: tolerations: # Allow this pod to be rescheduled while the node is in "critical add-ons only" mode. # This, along with the annotation above marks this pod as a critical add-on. - key: CriticalAddonsOnly operator: Exists - key: nvidia.com/gpu operator: Exists effect: NoSchedule - key: "sku" operator: "Equal" value: "gpu" effect: "NoSchedule" containers: - image: mcr.microsoft.com/oss/nvidia/k8s-device-plugin:v0.14.1 name: nvidia-device-plugin-ctr 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 plug-in d’appareil NVIDIA, vous pouvez vérifier que vos GPU sont planifiables.
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 :
microsoft.com/directx: 1
. Le résultat doit être similaire à l’exemple condensé de sortie suivant :Capacity: [...] microsoft.com.directx/gpu: 1 [...]
Utiliser Container Insights pour surveiller l’utilisation du GPU
Container Insights avec AKS supervise les métriques d’utilisation de GPU suivantes :
Nom de métrique | Dimension de la métrique (balises) | Description |
---|---|---|
containerGpuDutyCycle | container.azm.ms/clusterId , container.azm.ms/clusterName , containerName , gpuId , gpuModel , gpuVendor |
Pourcentage de temps durant lequel le GPU est resté occupé/en cours de traitement pour un conteneur au cours de la période d’échantillonnage passée (60 secondes). Le cycle d’utilisation est un nombre compris entre 1 et 100. |
containerGpuLimits | container.azm.ms/clusterId , container.azm.ms/clusterName , containerName |
Chaque conteneur peut spécifier des limites pour un ou plusieurs GPU. Il n’est pas possible de demander ou de limiter une partie d’un GPU. |
containerGpuRequests | container.azm.ms/clusterId , container.azm.ms/clusterName , containerName |
Chaque conteneur peut demander un ou plusieurs GPU. Il n’est pas possible de demander ou de limiter une partie d’un GPU. |
containerGpumemoryTotalBytes | container.azm.ms/clusterId , container.azm.ms/clusterName , containerName , gpuId , gpuModel , gpuVendor |
Quantité de mémoire de GPU en octets à disposition pour un conteneur spécifique. |
containerGpumemoryUsedBytes | container.azm.ms/clusterId , container.azm.ms/clusterName , containerName , gpuId , gpuModel , gpuVendor |
Quantité de mémoire de GPU en octets utilisée par un conteneur spécifique. |
nodeGpuAllocatable | container.azm.ms/clusterId , container.azm.ms/clusterName , gpuVendor |
Nombre de GPU dans un nœud que Kubernetes peut utiliser. |
nodeGpuCapacity | container.azm.ms/clusterId , container.azm.ms/clusterName , gpuVendor |
Nombre total de GPU présents dans un nœud. |
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 windows-gpu-workload
É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