La nostra macchina GB10 continuava a spegnersi da sola. Il log incolpava la memoria; era il calore

Ops

Una delle nostre tre macchine NVIDIA GB10 si è spenta tre volte in quattro giorni a settembre: il 10 settembre, il 12 settembre (è rimasta spenta per 17 ore) e il 13 settembre, dodici minuti dopo essere stata riavviata. Ogni volta serviva una persona che premesse il pulsante di accensione.

Come appare uno spegnimento per surriscaldamento

Il journal di sistema si è semplicemente fermato, a metà attività, senza registrare lo spegnimento: uno spegnimento hardware non dà a journald il tempo di scrivere il suo buffer. A luglio, dopo un simile spegnimento, l'orologio è persino tornato con una data vecchia. E il watchdog hardware, che riavvia una macchina bloccata, non ha fatto nulla, perché la macchina non era bloccata: l'alimentazione era venuta meno.

L'indizio sbagliato

Le ultime righe del kernel prima di ogni arresto erano errori di memoria GPU esaurita (NV_ERR_NO_MEMORY), quindi la memoria sembrava la colpevole. Non lo era. Quelle righe erano semplicemente la cosa più comune che il kernel scriveva: 440.580 di esse in un singolo avvio durato 19 giorni prima di terminare. Quando una riga appare così spesso, sarà l'ultima riga prima di qualsiasi cosa. Prima di incolpare una riga di log, conta quante volte appare quando non succede nulla.

L'indizio giusto

Poiché il journal perde gli ultimi minuti in uno spegnimento, avevamo aggiunto un piccolo campionatore che scrive temperature, carico e memoria in un file ogni minuto e lo scarica su disco. Ha catturato tutti i cinque arresti da luglio. Ogni singolo si è verificato a pieno carico GPU (96%), con la CPU tra 85 e 97 °C.

La tempistica ha spiegato il resto. Intorno all'inizio di settembre avevamo spostato il rendering video su questa macchina. La potenza GPU a pieno carico è passata da circa 24 W a 46 W, la temperatura mediana della GPU da 68 a 86 °C, e i minuti settimanali con la CPU a 95 °C o più da zero a 4.283. Le nostre altre due macchine GB10, che eseguono il modello linguistico allo stesso carico del 96%, sono rimaste tra 65 e 81 °C. Questa semplicemente si raffreddava peggio.

La prima soluzione: un limite di clock GPU

Su GB10, nvidia-smi non può impostare un limite di potenza, ma può limitare il clock GPU: nvidia-smi -lgc 0,2000. A luglio questo ha portato la zona più calda da 91 °C a 77-83 °C in pochi secondi. Due dettagli contano:

La seconda correzione: una guardia termica a gradini

Il limite non è bastato una volta introdotto il rendering, quindi ora una guardia legge ogni sensore una volta al secondo e agisce a gradini: una frequenza GPU più bassa da 89 °C e una ancora più bassa da 92 °C; da 94 °C il renderer viene messo in pausa (SIGSTOP) e la CPU rallentata; da 96 °C ogni job GPU viene messo in pausa per i secondi necessari a raffreddare. Torna indietro solo dopo che la macchina è rimasta più fresca per un po'. A 97 °C per 20 secondi, un freno di ultima istanza arresta del tutto il servizio video.

Nei suoi primi nove minuti sotto rendering, la zona più calda ha raggiunto un picco di 94 °C con una mediana di 89 °C, contro i plateau di 97 °C precedenti. Ha un prezzo: in un giorno di metà settembre il renderer è stato messo in pausa per il 17% del tempo e la GPU ha funzionato a 900 MHz o meno per la maggior parte della giornata. E non è una cura: la macchina si è spenta di nuovo una volta, l'11 ottobre, a 97-98 °C. Da allora funziona senza interruzioni, 20 giorni mentre scriviamo.

Quattro errori commessi lungo il percorso

Il punto chiave

Il software ha mantenuto viva questa macchina, ma la causa era fisica: il suo raffreddamento era da due a tre volte peggiore rispetto alle sue simili. Se una macchina GB10 si spegne da sola sotto carico, controlla prima il flusso d'aria. Poi limita la frequenza della GPU prima che i tuoi servizi partano, metti in pausa i job pesanti prima che la macchina raggiunga il suo limite e imposta gli allarmi sulle temperature a cui funziona effettivamente.

Factory Floor include una guardia di questo tipo: legge la temperatura più alta tra i sensori GPU e della zona termica, mette in pausa i job pesanti che specifichi a una temperatura impostata (92 °C per impostazione predefinita) e li riprende solo sotto una temperatura inferiore (84 °C), con guardie per memoria e disco accanto.

Aggiornato: