Наша машина GB10 сама вимикалася. Журнал звинувачував пам’ять, а причиною був перегрів

Операції

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

Як виглядає вимкнення через перегрів

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

Хибна зачіпка

Останні рядки ядра перед кожним вимкненням були помилками вичерпання пам’яті 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), поряд із захистом пам’яті та диска.

Оновлено: