Resuelva problemas comunes de GPU en clústeres ACK, incluida la configuración de controladores, errores de NVML y la gestión de nodos.
Categoría del problema | Descripción | Enlace |
Errores de GPU y solución de problemas | Problemas con el controlador de GPU, herramientas de monitoreo como DCGM y Prometheus, y errores en tiempo de ejecución como fallos de inicialización de NVML y errores XID. |
|
Problemas de cGPU (GPU contenerizada) | Configuración de cGPU, inicio, errores en tiempo de ejecución y problemas de permisos de módulos del kernel. | |
Gestión de nodos GPU y del clúster | Operaciones a nivel de clúster que incluyen la detección de uso de tarjetas GPU, soporte de virtualización, mantenimiento de nodos como actualizaciones del kernel y aislamiento de tarjetas defectuosas. |
¿Por qué las configuraciones de ECC de GPU son inconsistentes en mi clúster?
El modo Error-Correcting Code (ECC) detecta y corrige errores de memoria de la GPU, lo que mejora la estabilidad y la confiabilidad a costa de reducir ligeramente la memoria GPU disponible. ACK no impone una configuración uniforme de ECC, por lo que los ajustes pueden variar entre nodos.
Cuándo habilitar o deshabilitar ECC:
|
Recommendation |
Workload type |
|
Deshabilitar ECC |
Cargas de trabajo sensibles al costo e inference de baja latencia, como la inference en línea en tiempo real. |
|
Habilitar ECC |
Cargas de trabajo que requieren consistencia e integridad de datos, como servidores de bases de datos, sistemas financieros, cómputo científico y cómputo de alto rendimiento (HPC). |
Establezca el modo ECC para un nodo GPU:
-
Compruebe el estado actual de ECC.
nvidia-smiSalida esperada:
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 | +---------------------------------------------------------------------------------------+En la columna
Volatile Uncorr. ECC:0indica que ECC está habilitado y no hay errores;Offsignifica que ECC está deshabilitado. -
Habilite o deshabilite ECC según sea necesario.
Para habilitar ECC en todas las GPU del nodo:
nvidia-smi -e 1Para deshabilitar ECC en todas las GPU del nodo:
nvidia-smi -e 0
-
Reinicie el sistema operativo para que el cambio surta efecto.
ImportanteGuarde todos los datos necesarios antes de reiniciar el nodo.
-
Confirme el nuevo estado de ECC con
nvidia-smi. La siguiente salida muestra ECC deshabilitado: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 admite instancias aceleradas por vGPU?
Las instancias aceleradas por vGPU requieren una licencia GRID de NVIDIA. Adquiera una licencia y construya su propio servidor de licencias.
Alibaba Cloud no proporciona servidores de licencias, por lo que las instancias aceleradas por vGPU no se pueden utilizar directamente, incluso en un clúster acelerado por vGPU. La consola de ACK ya no permite seleccionar instancias aceleradas por vGPU como nodos del clúster.
Los prefijos de instancia no compatibles incluyen ecs.vgn5i, ecs.vgn6i, ecs.vgn7i y ecs.sgn7i. Para usar estas instancias, adquiera una licencia GRID de NVIDIA y construya su propio servidor de licencias. Utilice una instancia de Elastic Compute Service (ECS) y siga el tutorial oficial de NVIDIA. Consulte NVIDIA.
Se requiere un servidor de licencias para actualizar la licencia del controlador NVIDIA en instancias aceleradas por vGPU.
Adquiera una instancia ECS y siga el tutorial oficial de NVIDIA para construir un servidor de licencias.
Si cuenta con un servidor de licencias, siga estos pasos para agregar instancias aceleradas por vGPU a un clúster ACK.
Agregar instancias aceleradas por vGPU a un clúster ACK:
Vaya a Privilege Quota y solicite la función de imagen de SO personalizada.
Cree una imagen de SO personalizada basada en CentOS 7.x o Alibaba Cloud Linux 2 con el controlador NVIDIA GRID y la licencia GRID configurados. Consulte Create a custom image from an instance y Install a GRID driver on a vGPU-accelerated instance (Linux).
Cree un node pool. Consulte Create and manage a node pool.
Agregue las instancias aceleradas por vGPU al node pool. Consulte Add existing nodes.
Pasos siguientes: Consulte Update the NVIDIA driver license for vGPU-accelerated (vGPU) instances in an ACK cluster.
Cómo actualizar manualmente el kernel en un nodo GPU de un clúster existente
Después de actualizar el kernel, reinstale el controlador NVIDIA para restaurar la funcionalidad de la GPU.
Actualice el kernel solo si su versión es anterior a 3.10.0-957.21.3.
Este procedimiento no cubre la actualización del kernel en sí. Solo describe la reinstalación del controlador NVIDIA necesaria después de actualizar el kernel.
-
Aísle el nodo GPU para marcarlo como no programable. Este ejemplo utiliza el nodo
cn-beijing.i-2ze19qyi8votgjz12345.kubectl cordon cn-beijing.i-2ze19qyi8votgjz12345 node/cn-beijing.i-2ze19qyi8votgjz12345 already cordoned -
Drene el nodo 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 -
Desinstale el controlador NVIDIA actual.
NotaEste ejemplo utiliza la versión 384,111 del controlador. Para una versión diferente, descargue el paquete correspondiente desde NVIDIA y reemplace el número de versión.
-
Inicie sesión en el nodo GPU y compruebe la versión del controlador mediante
nvidia-smi.sudo nvidia-smi -a | grep 'Driver Version' Driver Version : 384.111 -
Descargue el paquete de instalación del controlador NVIDIA.
cd /tmp/ && sudo curl -O https://cn.download.nvidia.cn/tesla/384.111/NVIDIA-Linux-x86_64-384.111.runNotaDebe usar el paquete de instalación para desinstalar el controlador NVIDIA.
-
Desinstale el controlador.
sudo chmod u+x NVIDIA-Linux-x86_64-384.111.run sudo sh ./NVIDIA-Linux-x86_64-384.111.run --uninstall -a -s -q
-
Actualice el kernel.
-
Reinicie la instancia GPU.
sudo reboot -
Inicie sesión nuevamente en el nodo GPU e instale el paquete kernel-devel.
sudo yum install -y kernel-devel-$(uname -r) -
Descargue e instale el controlador NVIDIA requerido desde el sitio web de NVIDIA. Este ejemplo utiliza la versión 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 -
Compruebe que
/etc/rc.d/rc.localcontenga la siguiente configuración. Agréguela si falta.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 -
Reinicie kubelet y Docker.
sudo service kubelet stop sudo service docker restart sudo service kubelet start -
Configure el nodo GPU como programable nuevamente.
kubectl uncordon cn-beijing.i-2ze19qyi8votgjz12345 node/cn-beijing.i-2ze19qyi8votgjz12345 already uncordoned -
Verifique la versión del controlador en el pod del plugin de dispositivo en el nodo GPU.
Si
docker psno muestra contenedores ejecutándose en el nodo GPU, consulte Fix container startup issues on GPU nodes .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 | +-----------------------------------------------------------------------------+
Solucionar problemas de inicio de contenedores en nodos GPU
Síntoma: Después de reiniciar kubelet y Docker en un nodo GPU, no se inicia ningún contenedor.
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
Causa: Una discrepancia en el controlador de Cgroup entre Docker y kubelet. Compruebe el controlador de Cgroup para Docker:
sudo docker info | grep -i cgroup
Cgroup Driver: cgroupfs
Solución: Si la salida muestra cgroupfs, siga estos pasos.
-
Realice una copia de seguridad de
/etc/docker/daemon.jsony luego actualícelo con la siguiente configuración.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 -
Reinicie Docker y 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 -
Confirme que el controlador de Cgroup ahora es
systemd.sudo docker info | grep -i cgroup Cgroup Driver: systemd
¿Qué hago si falla la adición de un nodo de instancia bare metal de ECS?
Síntoma: Falla la adición de un nodo de instancia bare metal de ECS ecs.ebmgn7 a un clúster.
Causa: Las instancias bare metal de ECS (ecs.ebmgn7) admiten GPU de múltiples instancias (MIG). ACK restablece la configuración existente de MIG al agregar estos nodos para evitar conflictos. Si el restablecimiento excede el tiempo de espera, falla la adición del nodo.
Diagnóstico: Revise el registro de despliegue de ACK en el host del nodo.
sudo cat /var/log/ack-deploy.log
Si el registro muestra este error, el restablecimiento de MIG excedió el tiempo de espera:
command timeout: timeout 300 nvidia-smi --gpu-reset
Solución: Agregue el nodo nuevamente. Consulte Add existing nodes.
¿Qué hago si aparece Failed to initialize NVML: Unknown Error al ejecutar un contenedor GPU en Alibaba Cloud Linux 3?
Síntoma: Al ejecutar nvidia-smi en un contenedor GPU, se obtiene:
sudo nvidia-smi
Failed to initialize NVML: Unknown Error
Causa: Ejecutar systemctl daemon-reload o systemctl daemon-reexec en Alibaba Cloud Linux 3 actualiza las configuraciones de cgroup, lo que interfiere con el acceso a la biblioteca de administración de NVIDIA (NVML) en los contenedores. Consulte los problemas de la comunidad #1671 y #48.
Solución: Aplique una de las siguientes soluciones según su configuración.
-
Si usa
NVIDIA_VISIBLE_DEVICES=all: Agregueprivileged: truealsecurityContextdel contenedor.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 Si usa programación compartida de GPU: Cambie a Alibaba Cloud Linux 2 o CentOS 7.
Solución rápida: Vuelva a crear el pod de la aplicación. Esta es una solución temporal y el problema puede repetirse. Evalúe el impacto en el negocio antes de continuar.
Si ninguna de las anteriores aplica: Evalúe si su carga de trabajo puede ejecutarse en un sistema operativo diferente, como Alibaba Cloud Linux 2 o CentOS 7.
¿Qué hago si una tarjeta GPU deja de estar disponible debido a errores XID 119 o XID 120?
Síntoma: Una tarjeta GPU no se inicializa. Ejecute sh nvidia-bug-report.sh; el registro mostrará errores XID 119 o XID 120. Ejemplo de error XID 119:

Para otros errores XID, consulte Errores XID comunes de NVIDIA .
Causa: Una excepción en el componente del procesador del sistema GPU (GSP).
Solución: Primero, actualice el controlador NVIDIA a la versión más reciente. Si el problema persiste, deshabilite GSP. NVIDIA introdujo GSP en la versión 510 del controlador. Consulte Capítulo 42. Firmware GSP.
Deshabilite GSP según su escenario:
Escalado horizontal de nuevos nodos
Cree un node pool o edite uno existente. En la configuración avanzada, agregue la etiqueta ack.aliyun.com/disable-nvidia-gsp=true. ACK deshabilita automáticamente GSP en los nuevos nodos agregados a este pool.
Consulte Create and manage a node pool.

Deshabilitar GSP puede aumentar el tiempo de escalado horizontal de nodos.
Adición de nodos existentes
-
Cree un node pool o edite uno existente. Agregue la etiqueta
ack.aliyun.com/disable-nvidia-gsp=truea la configuración avanzada del node pool. ACK deshabilita automáticamente GSP cuando se agregan nodos existentes. Consulte Create and manage a node pool.Deshabilitar GSP puede aumentar el tiempo para agregar nodos.

Agregue nodos existentes al node pool. Consulte Add existing nodes.
Gestión de nodos existentes en un clúster
Opción 1: Usar una etiqueta de node pool
-
Agregue la etiqueta
ack.aliyun.com/disable-nvidia-gsp=trueal node pool del nodo. Consulte Edit a node pool.
Elimine el nodo del clúster sin liberar la instancia ECS. Consulte Remove a node from a cluster or node pool.
Vuelva a agregar el nodo al clúster como un nodo existente. Consulte Add existing nodes.
Opción 2: Deshabilitar GSP manualmente en el nodo
Si no puede eliminar y volver a agregar el nodo, inicie sesión en él y deshabilite GSP manualmente. Consulte FAQ.
Al actualizar del controlador 470 al 525, deshabilite GSP para la versión 525. La versión 470 carece de GSP, pero la 525 puede desencadenar un bug de GSP. Después de la actualización, siga los pasos de FAQ para deshabilitar GSP manualmente.
Cómo aislar manualmente una tarjeta GPU defectuosa en un clúster
Con la programación compartida de GPU, una GPU defectuosa puede causar fallos repetidos en los trabajos. Marque la GPU como no saludable para excluirla de la programación.
Requisitos previos:
Para clústeres que ejecutan Kubernetes 1.24 o posterior: versión del programador
1.xx.x-aliyun-6.4.3.xxxo posterior.Para clústeres que ejecutan Kubernetes 1.22: versión del programador
1.22.15-aliyun-6.2.4.xxxo posterior.Shared GPU scheduling está habilitado.
Envíe el siguiente ConfigMap. Reemplace <node-name> con el nombre real del nodo y establezca deviceId con el índice de GPU obtenido de 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
El ConfigMap debe estar en el namespace kube-system con el formato de nombre <node-name>-device-status. En el campo data, deviceId es el índice de GPU de nvidia-smi, deviceType es gpu y healthy es false. Una vez enviado, el programador dejará de asignar trabajo a esa GPU.
Resolver el mensaje "Failed to initialize NVML: Unknown Error" en contenedores GPU
Síntoma: Al ejecutar nvidia-smi en un contenedor GPU, se obtiene:
sudo nvidia-smi
Failed to initialize NVML: Unknown Error
Este problema afecta a nodos que ejecutan Ubuntu 22.04 o Red Hat Enterprise Linux (RHEL) 9.3 de 64 bits.
Causa: Ejecutar systemctl daemon-reload o systemctl daemon-reexec en el nodo actualiza las configuraciones de cgroup, lo que corta el acceso a NVML para los contenedores afectados.
Pods afectados:
Pods que especifican
aliyun.com/gpu-memenresources.limitsPods que establecen
NVIDIA_VISIBLE_DEVICEScomo variable de entorno del contenedorPods que usan una imagen de contenedor que tiene
NVIDIA_VISIBLE_DEVICESestablecido de forma predeterminada
Los pods que solicitan recursos de GPU mediantenvidia.com/gpuenresources.limitsno se ven afectados.
Tanto el plugin de dispositivo NVIDIA como ack-gpu-exporter establecen NVIDIA_VISIBLE_DEVICES=all de forma predeterminada.
Solución:
Solución rápida: Vuelva a crear el pod de la aplicación. Esta es una solución temporal y el problema puede repetirse. Evalúe el impacto en el negocio antes de continuar.
-
Si el pod usa
NVIDIA_VISIBLE_DEVICES=all: Agregueprivileged: truealsecurityContextdel contenedor.ImportanteOtorgar permisos
privilegedintroduce riesgos de seguridad. Prefiera volver a crear el pod cuando sea posible.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
Cómo evitar que el archivo /run/containerd/io.containerd.runtime.v2.task/k8s.io/<container ID>/log.json crezca continuamente en nodos GPU
Síntoma: El archivo /run/containerd/io.containerd.runtime.v2.task/k8s.io/<container ID>/log.json crece continuamente y consume espacio en disco.
Entorno afectado: Nodos donde la versión de nvidia-container-toolkit es anterior a 1.16.2.
Causa: Las llamadas frecuentes de exec a un contenedor (por ejemplo, desde un sondeo exec) provocan que el runtime de contenedores NVIDIA escriba una entrada de registro informativa por cada llamada.
Solución: Inicie sesión en el nodo. Cambie el nivel de registro de info a error y borre el contenido existente del registro.
#!/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