Résolvez les problèmes courants liés aux GPU dans les clusters ACK, notamment la configuration des pilotes, les erreurs NVML et la gestion des nœuds.
Catégorie de problème | Description | Lien |
Erreurs GPU et dépannage | Problèmes de pilote GPU, outils de surveillance tels que DCGM et Prometheus, ainsi que les erreurs d'exécution comme les échecs d'initialisation NVML et les erreurs XID. | |
Problèmes liés à cGPU (GPU conteneurisé) | Configuration de cGPU, démarrage, erreurs d'exécution et problèmes d'autorisations des modules du noyau. | |
Gestion des nœuds GPU et du cluster | Opérations au niveau du cluster, notamment la détection de l'utilisation des cartes GPU, la prise en charge de la virtualisation, la maintenance des nœuds (comme les mises à jour du noyau) et l'isolation des cartes défectueuses. |
|
Pourquoi les configurations ECC des GPU de mon cluster sont-elles incohérentes ?
Le mode Error-Correcting Code (ECC) détecte et corrige les erreurs de mémoire du GPU, améliorant ainsi la stabilité et la fiabilité au prix d'une légère réduction de la mémoire GPU disponible. ACK n'impose pas de paramètres ECC uniformes ; par conséquent, les configurations peuvent varier d'un nœud à l'autre.
Quand activer ou désactiver l'ECC :
|
Recommandation |
Type de charge de travail |
|
Désactiver l'ECC |
Charges de travail sensibles aux coûts et nécessitant une faible latence pour l'inférence, telles que l'inférence en temps réel en ligne |
|
Activer l'ECC |
Charges de travail exigeant la cohérence et l'intégrité des données, comme les serveurs de bases de données, les systèmes financiers, le calcul scientifique et le calcul haute performance (HPC) |
Définir le mode ECC pour un nœud GPU :
-
Vérifiez l'état actuel de l'ECC.
nvidia-smiSortie attendue :
Fri Jun 6 11:49:05 2025 +---------------------------------------------------------------------------------------+ | NVIDIA-SMI 535.161.07 Driver Version: 535.161.07 CUDA Version: 12.2 | |-----------------------------------------+----------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+======================+======================| | 0 Tesla T4 On | 00000000:00:08.0 Off | 0 | | N/A 31C P8 9W / 70W | 0MiB / 15360MiB | 0% Default | | | | N/A | +-----------------------------------------+----------------------+----------------------+ +---------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=======================================================================================| | No running processes found | +---------------------------------------------------------------------------------------+Dans la colonne
Volatile Uncorr. ECC:0signifie que l'ECC est activé sans erreur ;Offsignifie que l'ECC est désactivé. -
Activez ou désactivez l'ECC selon vos besoins.
Activez l'ECC pour tous les GPU du nœud :
nvidia-smi -e 1Désactivez l'ECC pour tous les GPU du nœud :
nvidia-smi -e 0
-
Redémarrez le système d'exploitation pour que la modification prenne effet.
ImportantEnregistrez toutes les données nécessaires avant de redémarrer le nœud.
-
Confirmez le nouvel état de l'ECC avec
nvidia-smi. La sortie suivante montre que l'ECC est désactivé :Fri Jun 6 11:52:15 2025 +---------------------------------------------------------------------------------------+ | NVIDIA-SMI 535.161.07 Driver Version: 535.161.07 CUDA Version: 12.2 | |-----------------------------------------+----------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+======================+======================| | 0 Tesla T4 On | 00000000:00:08.0 Off | Off | | N/A 31C P8 9W / 70W | 0MiB / 16384MiB | 0% Default | | | | N/A | +-----------------------------------------+----------------------+----------------------+ +---------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=======================================================================================| | No running processes found | +---------------------------------------------------------------------------------------+
ACK prend-il en charge les instances accélérées par vGPU ?
Les instances accélérées par vGPU nécessitent une licence GRID de NVIDIA. Achetez une licence et configurez votre propre serveur de licences.
Alibaba Cloud ne fournit pas de serveurs de licences ; il est donc impossible d'utiliser directement les instances accélérées par vGPU, même dans un cluster vGPU. La console ACK ne permet plus de sélectionner des instances accélérées par vGPU en tant que nœuds de cluster.
Les préfixes d'instance non pris en charge incluent ecs.vgn5i, ecs.vgn6i, ecs.vgn7i et ecs.sgn7i. Pour utiliser ces instances, achetez une licence GRID auprès de NVIDIA et configurez votre propre serveur de licences. Utilisez une instance Elastic Compute Service (ECS) et suivez le tutoriel officiel de NVIDIA. Consultez NVIDIA.
Un serveur de licences est requis pour mettre à jour la licence du pilote NVIDIA des instances accélérées par vGPU.
Achetez une instance ECS et suivez le tutoriel officiel de NVIDIA pour configurer un serveur de licences.
Si vous disposez d'un serveur de licences, suivez les étapes ci-dessous pour ajouter des instances accélérées par vGPU à un cluster ACK.
Ajouter des instances accélérées par vGPU à un cluster ACK :
Accédez à Privilege Quota et demandez la fonctionnalité d'image OS personnalisée.
Créez une image OS personnalisée basée sur CentOS 7.x ou Alibaba Cloud Linux 2, avec le pilote NVIDIA GRID et la licence GRID configurés. Consultez Créer une image personnalisée à partir d'une instance et Installer un pilote GRID sur une instance accélérée par vGPU (Linux).
Créez un pool de nœuds. Consultez Créer et gérer un pool de nœuds.
Ajoutez les instances accélérées par vGPU au pool de nœuds. Consultez Ajouter des nœuds existants.
Étapes suivantes : Consultez Mettre à jour la licence du pilote NVIDIA pour les instances accélérées par vGPU dans un cluster ACK.
Procédure de mise à niveau manuelle du noyau sur un nœud GPU dans un cluster existant
Après la mise à niveau du noyau, réinstallez le pilote NVIDIA pour restaurer les fonctionnalités du GPU.
Effectuez la mise à niveau du noyau uniquement si sa version est antérieure à 3.10.0-957.21.3.
Cette procédure ne couvre pas la mise à niveau du noyau elle-même. Elle décrit uniquement la réinstallation du pilote NVIDIA requise après la mise à niveau du noyau.
-
Marquez le nœud GPU comme non planifiable (cordon). Cet exemple utilise le nœud
cn-beijing.i-2ze19qyi8votgjz12345.kubectl cordon cn-beijing.i-2ze19qyi8votgjz12345 node/cn-beijing.i-2ze19qyi8votgjz12345 already cordoned -
Videz le nœud GPU.
kubectl drain cn-beijing.i-2ze19qyi8votgjz12345 --grace-period=120 --ignore-daemonsets=true node/cn-beijing.i-2ze19qyi8votgjz12345 cordoned WARNING: Ignoring DaemonSet-managed pods: flexvolume-9scb4, kube-flannel-ds-r2qmh, kube-proxy-worker-l62sf, logtail-ds-f9vbg pod/nginx-ingress-controller-78d847fb96-5fkkw evicted -
Désinstallez le pilote NVIDIA actuel.
RemarqueCet exemple utilise la version 384.111 du pilote. Pour une autre version, téléchargez le package correspondant depuis NVIDIA et remplacez le numéro de version.
-
Connectez-vous au nœud GPU et vérifiez la version du pilote à l'aide de
nvidia-smi.sudo nvidia-smi -a | grep 'Driver Version' Driver Version : 384.111 -
Téléchargez le package d'installation du pilote NVIDIA.
cd /tmp/ && sudo curl -O https://cn.download.nvidia.cn/tesla/384.111/NVIDIA-Linux-x86_64-384.111.runRemarqueVous devez utiliser ce package d'installation pour désinstaller le pilote NVIDIA.
-
Désinstallez le pilote.
sudo chmod u+x NVIDIA-Linux-x86_64-384.111.run sudo sh ./NVIDIA-Linux-x86_64-384.111.run --uninstall -a -s -q
-
Mettez à niveau le noyau.
-
Redémarrez l'instance GPU.
sudo reboot -
Reconnectez-vous au nœud GPU et installez le package kernel-devel.
sudo yum install -y kernel-devel-$(uname -r) -
Téléchargez et installez le pilote NVIDIA requis depuis le site Web de NVIDIA. Cet exemple utilise la version 410.79.
cd /tmp/ sudo curl -O https://cn.download.nvidia.cn/tesla/410.79/NVIDIA-Linux-x86_64-410.79.run sudo chmod u+x NVIDIA-Linux-x86_64-410.79.run sudo sh ./NVIDIA-Linux-x86_64-410.79.run -a -s -q # warm up GPU sudo nvidia-smi -pm 1 || true sudo nvidia-smi -acp 0 || true sudo nvidia-smi --auto-boost-default=0 || true sudo nvidia-smi --auto-boost-permission=0 || true sudo nvidia-modprobe -u -c=0 -m || true -
Vérifiez que le fichier
/etc/rc.d/rc.localcontient la configuration suivante. Ajoutez-la si elle est manquante.sudo nvidia-smi -pm 1 || true sudo nvidia-smi -acp 0 || true sudo nvidia-smi --auto-boost-default=0 || true sudo nvidia-smi --auto-boost-permission=0 || true sudo nvidia-modprobe -u -c=0 -m || true -
Redémarrez kubelet et Docker.
sudo service kubelet stop sudo service docker restart sudo service kubelet start -
Rétablissez le nœud GPU comme planifiable.
kubectl uncordon cn-beijing.i-2ze19qyi8votgjz12345 node/cn-beijing.i-2ze19qyi8votgjz12345 already uncordoned -
Vérifiez la version du pilote dans le pod du plug-in de périphérique sur le nœud GPU.
Si
docker psn'affiche aucun conteneur en cours d'exécution sur le nœud GPU, consultez Résolution des problèmes de démarrage des conteneurs sur les nœuds GPU .kubectl exec -n kube-system -t nvidia-device-plugin-cn-beijing.i-2ze19qyi8votgjz12345 nvidia-smi Thu Jan 17 00:33:27 2019 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 410.79 Driver Version: 410.79 CUDA Version: N/A | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 Tesla P100-PCIE... On | 00000000:00:09.0 Off | 0 | | N/A 27C P0 28W / 250W | 0MiB / 16280MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+
Résolution des problèmes de démarrage des conteneurs sur les nœuds GPU
Symptôme : Après le redémarrage de kubelet et de Docker sur un nœud GPU, aucun conteneur ne démarre.
sudo service kubelet stop
Redirecting to /bin/systemctl stop kubelet.service
sudo service docker stop
Redirecting to /bin/systemctl stop docker.service
sudo service docker start
Redirecting to /bin/systemctl start docker.service
sudo service kubelet start
Redirecting to /bin/systemctl start kubelet.service
sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Cause : Incompatibilité entre les pilotes Cgroup de Docker et de kubelet. Vérifiez le pilote Cgroup pour Docker :
sudo docker info | grep -i cgroup
Cgroup Driver: cgroupfs
Solution : Si la sortie affiche cgroupfs, suivez les étapes ci-dessous.
-
Sauvegardez le fichier
/etc/docker/daemon.json, puis mettez-le à jour avec la configuration suivante.sudo cat >/etc/docker/daemon.json <<-EOF { "default-runtime": "nvidia", "runtimes": { "nvidia": { "path": "/usr/bin/nvidia-container-runtime", "runtimeArgs": [] } }, "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "10" }, "oom-score-adjust": -1000, "storage-driver": "overlay2", "storage-opts": ["overlay2.override_kernel_check=true"], "live-restore": true } EOF -
Redémarrez Docker et kubelet.
sudo service kubelet stop Redirecting to /bin/systemctl stop kubelet.service sudo service docker restart Redirecting to /bin/systemctl restart docker.service sudo service kubelet start Redirecting to /bin/systemctl start kubelet.service -
Confirmez que le pilote Cgroup est désormais défini sur
systemd.sudo docker info | grep -i cgroup Cgroup Driver: systemd
Que faire en cas d'échec de l'ajout d'un nœud d'instance ECS Bare Metal ?
Symptôme : L'ajout d'un nœud d'instance ECS Bare Metal ecs.ebmgn7 à un cluster échoue.
Cause : Les instances ECS Bare Metal (ecs.ebmgn7) prennent en charge le GPU multi-instance (MIG). ACK réinitialise les paramètres MIG existants lors de l'ajout de ces nœuds pour éviter les conflits. Si la réinitialisation expire, l'ajout du nœud échoue.
Diagnostic : Consultez le journal de déploiement ACK sur l'hôte du nœud.
sudo cat /var/log/ack-deploy.log
Si le journal affiche l'erreur suivante, la réinitialisation MIG a expiré :
command timeout: timeout 300 nvidia-smi --gpu-reset
Solution : Ajoutez à nouveau le nœud. Consultez la section Ajout de nœuds existants.
Que faire si l'erreur Failed to initialize NVML: Unknown Error survient lors de l'exécution d'un conteneur GPU sur Alibaba Cloud Linux 3 ?
Symptôme : L'exécution de la commande nvidia-smi dans un conteneur GPU renvoie le message suivant :
sudo nvidia-smi
Failed to initialize NVML: Unknown Error
Cause : L'exécution des commandes systemctl daemon-reload ou systemctl daemon-reexec sur Alibaba Cloud Linux 3 met à jour les configurations cgroup, ce qui interfère avec l'accès à la bibliothèque NVIDIA Management Library (NVML) depuis les conteneurs. Consultez les problèmes communautaires #1671 et #48.
Solution : Appliquez l'une des solutions suivantes en fonction de votre configuration.
-
Utilisation de NVIDIA_VISIBLE_DEVICES=all : Ajoutez le paramètre
privileged: trueau champsecurityContextdu conteneur.apiVersion: v1 kind: Pod metadata: name: test-gpu-pod spec: containers: - name: test-gpu-pod image: centos:7 command: - sh - -c - sleep 1d securityContext: # Add privileged permissions to the container. privileged: true Utilisation de la planification GPU partagée : Basculez vers Alibaba Cloud Linux 2 ou CentOS 7.
Solution de contournement rapide : Recréez le pod applicatif. Il s'agit d'une solution temporaire ; le problème peut se reproduire. Évaluez l'impact sur votre activité avant de procéder.
Si aucune des solutions ci-dessus ne s'applique : Évaluez la possibilité d'exécuter votre charge de travail sur un autre système d'exploitation, tel qu'Alibaba Cloud Linux 2 ou CentOS 7.
Que faire si une carte GPU devient indisponible en raison d'erreurs XID 119 ou XID 120 ?
Symptôme : Une carte GPU ne parvient pas à s'initialiser. Exécutez la commande sh nvidia-bug-report.sh ; le journal affiche des erreurs XID 119 ou XID 120. Voici un exemple d'erreur XID 119 :

Pour les autres erreurs XID, consultez la page NVIDIA Common XID Errors .
Cause : Une exception survient dans le composant GPU System Processor (GSP).
Solution : Commencez par mettre à jour le pilote NVIDIA vers sa dernière version. Si le problème persiste, désactivez GSP. NVIDIA a introduit GSP dans la version 510 du pilote. Consultez la section Chapter 42. GSP firmware.
Désactivation de GSP selon votre scénario :
Scaling out new nodes
Créez un pool de nœuds ou modifiez-en un existant. Dans la configuration avancée, ajoutez le libellé ack.aliyun.com/disable-nvidia-gsp=true. ACK désactive automatiquement GSP sur les nouveaux nœuds ajoutés à ce pool.
Pour plus d'informations, consultez la rubrique Create and manage a node pool.

La désactivation de GSP peut augmenter le temps de mise à l'échelle horizontale des nœuds.
Adding existing nodes
-
Créez un pool de nœuds ou modifiez-en un existant. Ajoutez le libellé
ack.aliyun.com/disable-nvidia-gsp=trueà la configuration avancée du pool de nœuds. ACK désactive automatiquement GSP lorsque des nœuds existants sont ajoutés. Pour plus d'informations, consultez la rubrique Create and manage a node pool.La désactivation de GSP peut augmenter le temps d'ajout des nœuds.

Ajoutez les nœuds existants au pool de nœuds. Pour plus d'informations, consultez la rubrique Add existing nodes.
Managing existing nodes in a cluster
Option 1 : Utiliser un libellé de pool de nœuds
-
Ajoutez le libellé
ack.aliyun.com/disable-nvidia-gsp=trueau pool de nœuds du nœud concerné. Pour plus d'informations, consultez la rubrique Edit a node pool.
Supprimez le nœud du cluster sans libérer l'instance ECS. Pour plus d'informations, consultez la rubrique Remove a node from a cluster or node pool.
Réajoutez le nœud au cluster en tant que nœud existant. Pour plus d'informations, consultez la rubrique Add existing nodes.
Option 2 : Désactiver manuellement GSP sur le nœud
Si vous ne pouvez pas supprimer puis réajouter le nœud, connectez-vous au nœud et désactivez manuellement GSP. Pour plus d'informations, consultez la rubrique FAQ.
Lors de la mise à niveau du pilote de la version 470 vers la version 525, désactivez GSP pour la version 525. La version 470 ne prend pas en charge GSP, mais la version 525 peut déclencher un bug lié à GSP. Après la mise à niveau, suivez les étapes décrites dans la rubrique FAQ pour désactiver manuellement GSP.
Comment isoler manuellement une carte GPU défectueuse dans un cluster
Dans le cadre d'une planification GPU partagée, une carte GPU défectueuse peut provoquer des échecs répétés des tâches. Marquez la carte GPU comme non saine pour l'exclure de la planification.
Prérequis :
Pour les clusters exécutant Kubernetes 1.24 ou version ultérieure : version du planificateur
1.xx.x-aliyun-6.4.3.xxxou ultérieure.Pour les clusters exécutant Kubernetes 1.22 : version du planificateur
1.22.15-aliyun-6.2.4.xxxou ultérieure.La fonctionnalité Shared GPU scheduling est activée.
Soumettez le ConfigMap suivant. Remplacez <node-name> par le nom réel du nœud et définissez le champ deviceId avec l'index GPU obtenu via la commande nvidia-smi.
apiVersion: v1
kind: ConfigMap
metadata:
name: <node-name>-device-status # Replace <node-name> with the actual node name.
namespace: kube-system
data:
devices: |
- deviceId: 0 # Run nvidia-smi to get the GPU index.
deviceType: gpu
healthy: false
Le ConfigMap doit se trouver dans l'espace de noms kube-system et respecter le format de nommage <node-name>-device-status. Dans le champ data, le paramètre deviceId correspond à l'index GPU obtenu via la commande nvidia-smi, deviceType doit être défini sur gpu et healthy sur false. Une fois soumis, le planificateur cesse d'allouer des travaux à cette carte GPU.
Résoudre le message « Failed to initialize NVML: Unknown Error » dans les conteneurs GPU
Symptôme : L'exécution de la commande nvidia-smi dans un conteneur GPU renvoie l'erreur suivante :
sudo nvidia-smi
Failed to initialize NVML: Unknown Error
Ce problème affecte les nœuds exécutant Ubuntu 22.04 ou Red Hat Enterprise Linux (RHEL) 9.3 64 bits.
Cause : L'exécution des commandes systemctl daemon-reload ou systemctl daemon-reexec sur le nœud met à jour les configurations cgroup, ce qui interrompt l'accès NVML pour les conteneurs concernés.
Pods concernés :
Les pods qui spécifient
aliyun.com/gpu-memdansresources.limitsLes pods qui définissent
NVIDIA_VISIBLE_DEVICEScomme variable d'environnement du conteneurLes pods utilisant une image de conteneur pour laquelle
NVIDIA_VISIBLE_DEVICESest définie par défaut
Les pods demandant des ressources GPU vianvidia.com/gpudansresources.limitsne sont pas affectés.
Le plug-in de périphérique NVIDIA et ack-gpu-exporter définissent tous deux NVIDIA_VISIBLE_DEVICES=all par défaut.
Solution :
Contournement rapide : Recréez le pod d'application. Il s'agit d'une solution temporaire, car le problème peut se reproduire. Évaluez l'impact métier avant de procéder.
-
Si le pod utilise NVIDIA_VISIBLE_DEVICES=all : Ajoutez
privileged: trueau champsecurityContextdu conteneur.ImportantL'octroi des permissions
privilegedintroduit des risques de sécurité. Privilégiez la recréation du pod lorsque cela est possible.apiVersion: v1 kind: Pod metadata: name: test-gpu-pod spec: containers: - name: test-gpu-pod image: centos:7 command: - sh - -c - sleep 1d securityContext: # Add privileged permissions to the container. privileged: true
Empêcher la croissance continue du fichier /run/containerd/io.containerd.runtime.v2.task/k8s.io/<container ID>/log.json sur les nœuds GPU
Symptôme : Le fichier /run/containerd/io.containerd.runtime.v2.task/k8s.io/<container ID>/log.json augmente continuellement en taille et consomme de l'espace disque.
Environnement concerné : Nœuds dont la version de nvidia-container-toolkit est antérieure à la 1.16.2.
Cause : Des appels exec fréquents vers un conteneur — par exemple, issus d'une sonde exec — amènent le runtime de conteneur NVIDIA à écrire une entrée de journal informative à chaque appel.
Solution : Connectez-vous au nœud. Modifiez le niveau de journalisation de info à error et effacez le contenu des journaux existants.
#!/bin/bash
set -e
export CONFIG=/etc/nvidia-container-runtime/config.toml
export CONTAINER_ROOT_PATH="/run/containerd/io.containerd.runtime.v2.task/k8s.io"
if [ -f $CONFIG ];then
# Change the log level in the nvidia-container-runtime configuration from "info" to "error".
sed -i 's@^log-level = "info"@log-level = "error"@g' $CONFIG
# Clear the content of the container's log.json file.
find $CONTAINER_ROOT_PATH -mindepth 2 -maxdepth 2 -name log.json -type f -exec sh -c 'echo "" > "{}"' \;
fi