Nossa máquina GB10 continuava desligando sozinha. O log acusava a memória; era o calor

Operações

Uma de nossas três máquinas NVIDIA GB10 ficou inativa três vezes em quatro dias em setembro: em 10 de setembro, em 12 de setembro (ficou desligada por 17 horas) e em 13 de setembro, doze minutos depois de ser ligada novamente. Cada vez, era necessário que alguém pressionasse o botão de energia.

Como é um desligamento por calor

O journal do sistema simplesmente parou, no meio da atividade, sem registrar um desligamento: um corte abrupto de energia não dá tempo ao journald de gravar seu buffer. Em julho, após um desligamento semelhante, o relógio até voltou com uma data antiga. E o watchdog de hardware, que reinicia uma máquina travada, não fez nada, porque a máquina não havia travado: a energia havia acabado.

A pista errada

As últimas linhas do kernel antes de cada falha eram erros de falta de memória na GPU (NV_ERR_NO_MEMORY), então a memória parecia a culpada. Não era. Essas linhas eram simplesmente a coisa mais comum que o kernel escrevia: 440.580 delas em uma única inicialização que rodou por 19 dias antes de terminar. Quando uma linha aparece com essa frequência, ela será a última linha antes de qualquer coisa. Antes de culpar uma linha de log, conte com que frequência ela aparece quando nada dá errado.

A pista certa

Como o journal perde seus últimos minutos em um corte de energia, adicionamos um pequeno amostrador que grava temperaturas, carga e memória em um arquivo a cada minuto e o descarrega no disco. Ele capturou todas as cinco falhas desde julho. Todas ocorreram com a GPU em carga total (96%), com a CPU entre 85 e 97 °C.

A cronologia explicou o resto. Por volta do início de setembro, havíamos movido a renderização de vídeo para esta máquina. Sua potência da GPU sob carga total passou de cerca de 24 W para 46 W, sua temperatura mediana da GPU de 68 para 86 °C, e os minutos por semana com a CPU em 95 °C ou mais passaram de nenhum para 4.283. Nossas outras duas máquinas GB10, que executam o modelo de linguagem na mesma carga de 96%, permaneceram entre 65 e 81 °C. Esta simplesmente esfriava pior.

A primeira correção: um limite de clock da GPU

Na GB10, o nvidia-smi não consegue definir um limite de potência, mas pode limitar o clock da GPU: nvidia-smi -lgc 0,2000. Em julho, isso reduziu a zona mais quente de 91 °C para 77 a 83 °C em segundos. Dois detalhes importam:

A segunda correção: um guarda de temperatura em etapas

O limite não foi suficiente quando a renderização entrou em ação, então um guarda agora lê todos os sensores uma vez por segundo e age em etapas: um clock da GPU mais baixo a partir de 89 °C e outro mais baixo ainda a partir de 92 °C; a partir de 94 °C, o renderizador é pausado (SIGSTOP) e a CPU desacelerada; a partir de 96 °C, todos os trabalhos da GPU são pausados pelo tempo necessário para esfriar. Ele retorna apenas depois que a máquina permanece mais fria por um tempo. A 97 °C por 20 segundos, um freio de último recurso para o serviço de vídeo completamente.

Nos seus primeiros nove minutos sob renderização, a zona mais quente atingiu o pico de 94 °C com uma mediana de 89 °C, contra platôs de 97 °C antes. Isso tem um preço: em um dia de meados de setembro, o renderizador ficou pausado por 17% do tempo, e a GPU rodou a 900 MHz ou menos durante a maior parte do dia. E não é uma cura: a máquina se desligou mais uma vez, em 11 de outubro, entre 97 e 98 °C. Ela roda sem interrupções desde então, 20 dias enquanto escrevemos isto.

Quatro erros que cometemos no caminho

A conclusão

O software manteve esta máquina viva, mas a causa era física: seu resfriamento era de duas a três vezes pior que o das suas irmãs. Se uma máquina GB10 desliga sozinha sob carga, verifique o fluxo de ar primeiro. Depois, limite o clock da GPU antes que seus serviços iniciem, pause as tarefas pesadas antes que a máquina atinja seu limite e configure alarmes com base nas temperaturas que ela realmente atinge.

Factory Floor inclui um guarda de calor deste tipo: ele lê a maior temperatura entre os sensores da GPU e da zona térmica, pausa as tarefas pesadas que você definir em uma temperatura específica (92 °C por padrão) e as retoma apenas abaixo de uma temperatura menor (84 °C), com guardas de memória e disco ao lado.

Atualizado: