Kubernetes 1.36: Cómo Manejar Fallas de Dispositivos GPU sin Pendientes Infinitos
NVIDIA
Meta
En Kubernetes, una falla de dispositivo GPU no conduce automáticamente a la reprogramación del pod; en cambio, el kubelet reinicia el contenedor en el mismo dispositivo muerto, causando un bucle de bloqueo. El artículo demuestra este escenario en un entorno de pruebas y muestra cómo los nuevos mecanismos en Kubernetes 1.36, como el estado de salud del dispositivo y las manchas, pueden romper el ciclo.
El artículo destaca que Kubernetes, por defecto, maneja los fallos de dispositivos simplemente reiniciando el contenedor, lo cual es insuficiente para cargas de trabajo aceleradas por GPU. Citando un estudio de Meta sobre el entrenamiento de Llama 3 405B, señala que los clústeres con miles de GPUs experimentan interrupciones frecuentes, a menudo debidas a fallos de GPU y de memoria. El autor explica las limitaciones del enfoque clásico de plugin de dispositivo, que solo reduce el recuento asignable, y lo contrasta con el modelo más reciente de DRA (Asignación Dinámica de Recursos), que proporciona gestión de dispositivos basada en objetos. En un clúster de prueba, el autor simula un fallo de GPU extrayendo en caliente un dispositivo del bus PCIe, lo que resulta en Xid 79. El pod entra entonces en un bucle de caídas, reiniciándose en el dispositivo muerto, y el planificador no lo reprograma porque sigue vinculado al nodo. Kubernetes 1.36 introduce varias características beta para abordar esto: estado de salud del dispositivo en el estado del pod, taints y tolerancias de dispositivo, y dispositivos particionables. Usando estas características, se puede hacer que el clúster reconozca el fallo y programe el pod en una GPU saludable, evitando reinicios interminables.
Fuente: Habr — хаб ML —
original
