Notre machine GB10 s'éteignait toute seule. Le journal incriminait la mémoire ; c'était la chaleur.

Opérations

L'une de nos trois machines NVIDIA GB10 s'est éteinte trois fois en quatre jours en septembre : le 10 septembre, le 12 septembre (elle est restée éteinte pendant 17 heures) et le 13 septembre, douze minutes après avoir été rallumée. À chaque fois, il fallait qu'une personne appuie sur le bouton d'alimentation.

À quoi ressemble une extinction due à la chaleur

Le journal système s'est simplement arrêté, en pleine activité, sans trace d'arrêt : une coupure brutale de l'alimentation ne laisse pas le temps à journald d'écrire son tampon. En juillet, après une extinction similaire, l'horloge est même revenue avec une date ancienne. Et le chien de garde matériel, qui redémarre une machine bloquée, n'a rien fait, car la machine n'était pas bloquée : l'alimentation était coupée.

L'indice qui était faux

Les dernières lignes du noyau avant chaque extinction étaient des erreurs de mémoire GPU insuffisante (NV_ERR_NO_MEMORY), donc la mémoire semblait coupable. Ce n'était pas le cas. Ces lignes étaient simplement la chose la plus fréquente écrite par le noyau : 440 580 occurrences lors d'un seul démarrage qui avait duré 19 jours avant de s'arrêter. Quand une ligne apparaît aussi souvent, elle sera la dernière ligne avant n'importe quel événement. Avant d'accuser une ligne du journal, comptez à quelle fréquence elle apparaît quand tout va bien.

L'indice qui était juste

Comme le journal perd ses dernières minutes lors d'une coupure d'alimentation, nous avions ajouté un petit échantillonneur qui écrit les températures, la charge et la mémoire dans un fichier chaque minute et le vide sur le disque. Il a capté les cinq extinctions depuis juillet. Chacune est survenue à pleine charge GPU (96 %), avec le CPU entre 85 et 97 °C.

Le calendrier a expliqué le reste. Vers le début du mois de septembre, nous avions déplacé le rendu vidéo sur cette machine. Sa puissance GPU en pleine charge est passée d'environ 24 W à 46 W, sa température GPU médiane de 68 à 86 °C, et les minutes par semaine avec le CPU à 95 °C ou plus sont passées de zéro à 4 283. Nos deux autres machines GB10, qui exécutent le modèle de langage à la même charge de 96 %, sont restées entre 65 et 81 °C. Celle-ci se refroidissait simplement moins bien.

Le premier correctif : un plafond d'horloge GPU

Sur GB10, nvidia-smi ne peut pas définir une limite de puissance, mais il peut plafonner l'horloge GPU : nvidia-smi -lgc 0,2000. En juillet, cela a fait passer la zone la plus chaude de 91 °C à 77-83 °C en quelques secondes. Deux détails comptent :

La deuxième correction : un garde-fou thermique par paliers

Le plafond ne suffisait plus une fois le rendu lancé, donc un garde-fou lit désormais chaque capteur une fois par seconde et agit par paliers : une horloge GPU réduite à partir de 89 °C et une réduction supplémentaire à partir de 92 °C ; à partir de 94 °C, le moteur de rendu est mis en pause (SIGSTOP) et le CPU ralenti ; à partir de 96 °C, chaque tâche GPU est mise en pause pendant le temps nécessaire au refroidissement. Il revient en arrière seulement après que la machine est restée plus froide un certain temps. À 97 °C pendant 20 secondes, un frein de dernier recours arrête complètement le service vidéo.

Durant ses neuf premières minutes sous rendu, la zone la plus chaude a atteint un pic de 94 °C avec une médiane de 89 °C, contre des paliers à 97 °C auparavant. Cela a un coût : un jour de mi-septembre, le moteur de rendu a été mis en pause 17 % du temps, et le GPU a tourné à 900 MHz ou moins la plupart de la journée. Et ce n'est pas une solution miracle : la machine s'est éteinte une fois de plus, le 11 octobre, entre 97 et 98 °C. Elle tourne sans interruption depuis, 20 jours au moment où nous écrivons ces lignes.

Quatre erreurs commises en cours de route

À retenir

Le logiciel maintenait cette machine en vie, mais la cause était physique : son refroidissement était deux à trois fois moins bon que celui de ses homologues. Si une machine GB10 s’éteint seule sous charge, vérifiez d’abord le flux d’air. Puis plafonnez l’horloge du GPU avant le démarrage de vos services, mettez en pause les tâches lourdes avant que la machine n’atteigne sa limite, et configurez les alarmes à partir des températures qu’elle atteint réellement.

Factory Floor inclut un garde-fou thermique de ce type : il lit la température la plus élevée parmi les capteurs GPU et zones thermiques, met en pause les tâches lourdes que vous désignez à une température définie (92 °C par défaut) et ne les reprend qu’en dessous d’une température plus basse (84 °C), avec des garde-fous mémoire et disque à côté.

Mis à jour: