Container Service for Kubernetes (ACK) prend en charge la planification et les opérations GPU. Son mode d'utilisation par défaut du GPU s'aligne sur le modèle de la communauté Kubernetes en amont. Cette rubrique explique comment déployer une charge de travail TensorFlow exemple pour valider la planification GPU.
Prérequis
Assurez-vous de disposer des éléments suivants :
Un cluster ACK avec au moins un nœud GPU
kubectl configuré pour se connecter au cluster
Accès à la console ACK
Éviter de contourner les demandes standard de ressources GPU
Pour les nœuds GPU gérés par ACK, demandez des ressources GPU uniquement via le mécanisme standard de ressources étendues de Kubernetes (nvidia.com/gpu dans resources.limits). Les actions suivantes contournent ce mécanisme et présentent des risques de sécurité :
Exécution directe d'applications GPU sur les nœuds
Utilisation de
docker,podmanounerdctlpour créer des conteneurs ou demander des ressources GPU (par exemple,docker run --gpus alloudocker run -e NVIDIA_VISIBLE_DEVICES=all)Ajout de
NVIDIA_VISIBLE_DEVICES=allouNVIDIA_VISIBLE_DEVICES=<GPU ID>à la sectionenvdu fichier YAML d'un podUtilisation de la variable d'environnement
NVIDIA_VISIBLE_DEVICESpour demander des ressources GPU pour un podDéfinition par défaut de
NVIDIA_VISIBLE_DEVICESsuralldans une image de conteneur lorsque cette variable n'est pas définie dans le YAML du podDéfinition de
privileged: truedans lesecurityContextdu pod et exécution d'un programme GPU
Pourquoi cela importe : Les demandes GPU non standard sont invisibles pour le suivi des ressources du planificateur. Cette inadéquation peut amener le planificateur à sur-allouer les GPU sur un nœud, ce qui entraîne la contention de plusieurs pods sur la même carte GPU (par exemple, concurrence pour la mémoire GPU) et provoque l'échec des charges de travail. Ces méthodes peuvent également déclencher des erreurs connues signalées par la communauté NVIDIA.
Vérifier la disponibilité du GPU
Avant de déployer une charge de travail, confirmez que votre nœud GPU expose sa capacité au planificateur Kubernetes.
-
Listez les nœuds du cluster :
kubectl get nodes -
Décrivez un nœud GPU pour vérifier sa capacité :
kubectl describe node <gpu-node-name>Dans la section Capacity,
nvidia.com/gpudoit afficher une valeur non nulle :Capacity: nvidia.com/gpu: 1Si
nvidia.com/gpuest absent ou affiche0, le plugin de périphérique NVIDIA peut ne pas être en cours d'exécution sur le nœud. Vérifiez le déploiement DaemonSet du plugin, les pilotes GPU et la configuration du nœud avant de continuer.
Déployer une application GPU
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le cluster cible. Dans le volet de navigation de gauche, choisissez Workloads > Deployments.
-
Sur la page Deployments, cliquez sur Create from YAML et collez ce manifeste :
apiVersion: v1 kind: Pod metadata: name: tensorflow-mnist namespace: default spec: containers: - image: registry.cn-beijing.aliyuncs.com/acs/tensorflow-mnist-sample:v1.5 name: tensorflow-mnist command: - python - tensorflow-sample-code/tfjob/docker/mnist/main.py - --max_steps=100000 - --data_dir=tensorflow-sample-code/data resources: limits: nvidia.com/gpu: 1 # Request one GPU card for this container. workingDir: /root restartPolicy: AlwaysLes ressources étendues GPU nécessitent uniquement
limits, et nonrequests. Kubernetes n'autorise pas lesrequestssanslimitscorrespondantes pour les ressources étendues. Le planificateur utilise la valeur delimitscomme demande effective. Dans le volet de navigation de gauche, choisissez Workloads > Pods. Recherchez le pod et cliquez dessus.
-
Cliquez sur l'onglet Logs. Le tirage de l'image et le démarrage du pod peuvent prendre quelques minutes. Une fois en cours d'exécution, la sortie du journal confirme que la planification GPU fonctionne correctement.

Étapes suivantes
Pour cibler des types de GPU spécifiques dans un cluster hétérogène, utilisez les libellés et les sélecteurs de nœuds. Ajoutez des libellés aux nœuds GPU par type d'accélérateur (par exemple,
kubectl label nodes <node-name> accelerator=<gpu-model>), puis ajoutez unnodeSelectorà la spécification de votre pod.Pour des options avancées de planification GPU telles que le partage et l'isolation des GPU, consultez la documentation sur la planification GPU d'ACK.