Nuestra máquina GB10 se apagaba sola. El registro culpaba a la memoria; era el calor

Operaciones

Una de nuestras tres máquinas NVIDIA GB10 se apagó tres veces en cuatro días en septiembre: el 10 de septiembre, el 12 de septiembre (permaneció apagada durante 17 horas) y el 13 de septiembre, doce minutos después de encenderla de nuevo. Cada vez necesitaba que una persona pulsara el botón de encendido.

Cómo es un apagado por calor

El registro del sistema simplemente se detuvo, a mitad de una actividad, sin ningún apagado registrado: un corte de energía no da tiempo a journald para escribir su búfer. En julio, tras un apagado similar, el reloj incluso volvió con una fecha antigua. Y el watchdog de hardware, que reinicia una máquina bloqueada, no hizo nada, porque la máquina no se había bloqueado: se había ido la corriente.

La pista equivocada

Las últimas líneas del kernel antes de cada caída eran errores de memoria GPU agotada (NV_ERR_NO_MEMORY), por lo que la memoria parecía la culpable. No lo era. Esas líneas eran simplemente lo más común que escribía el kernel: 440.580 de ellas en un solo arranque que había funcionado durante 19 días antes de terminar. Cuando una línea aparece tan a menudo, será la última línea antes de cualquier cosa. Antes de culpar a una línea del registro, cuenta con qué frecuencia aparece cuando no falla nada.

La pista correcta

Como el registro pierde sus últimos minutos en un corte de energía, habíamos añadido un pequeño muestreador que escribe temperaturas, carga y memoria en un archivo cada minuto y lo vuelca al disco. Capturó las cinco caídas desde julio. Todas se produjeron con la GPU al 96% de carga, con la CPU entre 85 y 97 °C.

El momento explicaba el resto. Alrededor del inicio de septiembre habíamos movido el renderizado de vídeo a esta máquina. Su potencia de GPU bajo carga completa pasó de unos 24 W a 46 W, su temperatura mediana de GPU de 68 a 86 °C, y los minutos por semana con la CPU a 95 °C o más pasaron de ninguno a 4.283. Nuestras otras dos máquinas GB10, que ejecutan el modelo de lenguaje a la misma carga del 96%, se mantuvieron entre 65 y 81 °C. Esta simplemente se enfriaba peor.

La primera solución: un límite de reloj de GPU

En GB10, nvidia-smi no puede establecer un límite de potencia, pero puede limitar el reloj de la GPU: nvidia-smi -lgc 0,2000. En julio, esto redujo la zona más caliente de 91 °C a 77-83 °C en segundos. Dos detalles importan:

La segunda corrección: una salvaguarda térmica por pasos

El límite no fue suficiente cuando se incorporó el renderizado, así que ahora una salvaguarda lee cada sensor una vez por segundo y actúa por pasos: una frecuencia de reloj de la GPU más baja desde 89 °C y otra más baja desde 92 °C; desde 94 °C se pausa el renderizador (SIGSTOP) y se ralentiza la CPU; desde 96 °C se pausan todos los trabajos de GPU durante los segundos necesarios para enfriar. Solo vuelve a subir gradualmente después de que la máquina haya permanecido más fría durante un tiempo. A 97 °C durante 20 segundos, un freno de último recurso detiene por completo el servicio de vídeo.

En sus primeros nueve minutos bajo renderizado, la zona más caliente alcanzó un pico de 94 °C con una mediana de 89 °C, frente a las mesetas de 97 °C anteriores. Tiene un precio: un día de mediados de septiembre el renderizador estuvo pausado el 17% del tiempo y la GPU funcionó a 900 MHz o menos durante la mayor parte del día. Y no es una cura: la máquina se apagó sola una vez más, el 11 de octubre, a 97-98 °C. Desde entonces ha funcionado sin interrupciones, 20 días mientras escribimos esto.

Cuatro errores que cometimos por el camino

La conclusión

El software mantuvo esta máquina viva, pero la causa era física: su refrigeración era de dos a tres veces peor que la de sus hermanas. Si una máquina GB10 se apaga sola bajo carga, revisa primero el flujo de aire. Luego limita la frecuencia de la GPU antes de que arranquen tus servicios, pausa los trabajos pesados antes de que la máquina alcance su límite y configura las alarmas según las temperaturas a las que realmente funciona.

Factory Floor incluye una salvaguarda térmica de este tipo: lee la más alta de las temperaturas de los sensores de la GPU y de las zonas térmicas, pausa los trabajos pesados que indiques a una temperatura establecida (92 °C por defecto) y los reanuda solo por debajo de una inferior (84 °C), junto con salvaguardas de memoria y disco.

Actualizado: