Наш компьютер GB10 сам выключался. В журнале была ошибка памяти, а на деле всё было в перегреве

Операции

Один из трёх наших компьютеров NVIDIA GB10 трижды отключался за четыре дня в сентябре: 10 сентября, 12 сентября (он оставался выключенным 17 часов) и 13 сентября, через двенадцать минут после включения. Каждый раз требовалось, чтобы человек нажал кнопку питания.

Как выглядит отключение из-за перегрева

Системный журнал просто останавливался посреди активности, без записи о завершении работы: при жёстком отключении питания у journald не остаётся времени на запись буфера. В июле после похожего отключения часы даже вернулись к старой дате. А аппаратный watchdog, который перезагружает зависшую машину, ничего не сделал, потому что машина не зависла: питание пропало.

Ложная зацепка

Последние строки ядра перед каждым отключением содержали ошибки нехватки памяти GPU (NV_ERR_NO_MEMORY), поэтому память выглядела виновной. Но это было не так. Эти строки были просто самым частым, что писало ядро: 440 580 таких строк за одну загрузку, которая длилась 19 дней до завершения. Когда строка появляется так часто, она будет последней перед любым событием. Прежде чем винить строку журнала, посчитайте, как часто она появляется, когда всё в порядке.

Верная зацепка

Поскольку журнал теряет последние минуты при отключении питания, мы добавили небольшой сэмплер, который каждую минуту записывает температуры, нагрузку и память в файл и сбрасывает его на диск. Он зафиксировал все пять отключений с июля. Каждое происходило при полной нагрузке GPU (96%), при температуре CPU от 85 до 97 °C.

Тайминг объяснил остальное. Примерно в начале сентября мы перенесли рендеринг видео на эту машину. Потребление GPU под полной нагрузкой выросло с примерно 24 Вт до 46 Вт, медианная температура GPU — с 68 до 86 °C, а количество минут в неделю с температурой CPU 95 °C и выше — с нуля до 4 283. Два других наших компьютера GB10, которые запускают языковую модель при той же нагрузке 96%, оставались в диапазоне 65–81 °C. Эта машина просто хуже охлаждалась.

Первое решение: ограничение частоты GPU

На GB10 утилита nvidia-smi не может задать лимит мощности, но может ограничить частоту GPU: nvidia-smi -lgc 0,2000. В июле это снизило температуру самой горячей зоны с 91 °C до 77–83 °C за считанные секунды. Важны две детали:

Второе исправление: защитный механизм от перегрева с несколькими порогами

Ограничения оказалось недостаточно после подключения рендеринга, поэтому теперь защитный механизм считывает данные всех датчиков раз в секунду и действует поэтапно: снижение частоты GPU при 89 °C и повторное снижение при 92 °C; при 94 °C рендерер приостанавливается (SIGSTOP), а процессор замедляется; при 96 °C все задачи GPU приостанавливаются на время, необходимое для охлаждения. Пороги снижаются обратно только после того, как машина некоторое время остаётся прохладной. При 97 °C в течение 20 секунд аварийный тормоз полностью останавливает видеосервис.

За первые девять минут рендеринга самая горячая зона достигла пика в 94 °C при медиане 89 °C, тогда как раньше наблюдались плато на уровне 97 °C. Это имеет свою цену: в один из дней в середине сентября рендерер был приостановлен на 17% времени, а GPU большую часть дня работал на частоте 900 МГц или ниже. И это не панацея: машина снова выключилась сама, 11 октября, при 97–98 °C. С тех пор она работает без перерывов, 20 дней на момент написания этого текста.

Четыре ошибки, которые мы допустили по ходу работы

Главный вывод

Программное обеспечение поддерживало работу этой машины, но причина была физической: её охлаждение было в два-три раза хуже, чем у аналогичных машин. Если машина GB10 выключается сама под нагрузкой, сначала проверьте воздушный поток. Затем ограничьте частоту GPU перед запуском ваших сервисов, приостановите ресурсоемкие задачи до того, как машина достигнет предела, и настройте оповещения на основе фактических рабочих температур.

Factory Floor включает в себя защитный механизм от перегрева такого типа: он считывает показания самого горячего из датчиков GPU и тепловых зон, приостанавливает указанные вами ресурсоемкие задачи при заданной температуре (по умолчанию 92 °C) и возобновляет их только при температуре ниже порога (84 °C), а также содержит защитные механизмы для памяти и диска.

Обновлено: