Наша машина 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 за лічені секунди. Важливі дві деталі:
- Застосовуйте його до запуску важких сервісів. Наша служба обмеження спочатку запускалася приблизно через 15 секунд після завантаження, коли сервер моделі вже почав завантажуватися на повній потужності, — саме в цей момент машина й вимикалася. Тепер вона запускається до старту Docker.
- Перевірте під навантаженням. З увімкненим обмеженням, коли GPU простоює, заявлена тактова частота все ще становить близько 2400 МГц. Під навантаженням вона тримається на рівні 1976 МГц.
Друге виправлення: захист від перегріву зі ступенями
Обмеження не вистачило, коли почався рендеринг, тому тепер захист зчитує дані з усіх датчиків щосекунди та діє ступенями: зниження тактової частоти 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 днів на момент написання цього тексту.
Чотири помилки, які ми допустили на шляху
- Призупинення одного завдання не охолоджувало машину. Гальмування спрацювало, коли рендерер уже був призупинений, оскільки модель зображень все ще генерувала, і десятки таймерів запустилися в ту саму хвилину. Тепер верхній ступінь призупиняє всі важкі завдання GPU, а не лише рендерер.
- Захист призупиняє завдання за назвою, а назви змінилися. Двічі новий рушій міг уникнути призупинення: модель зображень із новою назвою процесу у вересні та у жовтні рендерер, який працює в контейнері, а не як дочірній процес сервісу рендерингу. Тепер кожна зміна рушія включає перевірку списку захисту.
- Утримання гальмування ніколи не знімалося. Воно зупинило відеосервіс і залишило файл утримання, щоб ніщо його не перезапустило. Ніхто також не отримував сповіщень, і вивід даних зупинився на три дні, перш ніж ми це помітили. Тепер утримання знімається автоматично: через п’ять хвилин після останнього гальмування, за відсутності нового гальмування, за наявності щонайменше 30 ГБ вільної пам’яті та середнього значення температури за десять хвилин 93 °C або нижче. Чекати, поки машина охолоне, було марно: середня температура становила 88 °C як з рендерингом, так і без нього.
- Сигнал спрацював за нормальної температури машини. Поріг попередження становив 88 °C, що відповідало середній температурі цієї машини. Протягом одного дня вона перебувала при 90 °C або вище 32% часу, при 93 °C або вище — 8%, при 95 °C або вище — 3% і ніколи не досягала 97 °C. Ми перенесли сигнал на 97 °C — плато, за якого машина насправді вимикалася, і листи-попередження припинилися.
Головний висновок
Програмне забезпечення підтримувало роботу цієї машини, але причина була фізичною: її охолодження було в два-три рази гіршим, ніж у подібних машин. Якщо машина GB10 вимикається сама під навантаженням, спершу перевірте повітряний потік. Потім обмежте частоту GPU перед запуском ваших сервісів, призупиняйте важкі завдання, перш ніж машина досягне свого ліміту, і налаштуйте попередження за фактичними робочими температурами.
Factory Floor містить такий захист від перегріву: він зчитує найвищі показники серед датчиків GPU та теплових зон, призупиняє вказані вами важкі завдання за заданої температури (типово 92 °C) і відновлює їх лише нижче за нижчий поріг (84 °C), поряд із захистом пам’яті та диска.