Нашата машина 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 W на 46 W, медианната температура на 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 часовник показва около 2 400 MHz, когато GPU е в режим на готовност. Под натоварване той се задържа на 1 976 MHz.
Второто решение: защитен механизъм за прегряване на стъпки
Ограничението не беше достатъчно, след като рендирането започна, затова сега защитният механизъм чете всеки сензор веднъж в секунда и действа на стъпки: по-нисък GPU часовник от 89 °C и още по-нисък от 92 °C; от 94 °C рендерът е паузиран (SIGSTOP) и CPU е забавен; от 96 °C всяка GPU задача е паузирана за секундите, необходими за охлаждане. Той се връща назад само след като машината е останала по-хладна за известно време. При 97 °C за 20 секунди аварийна спирачка спира напълно видео услугата.
През първите девет минути под рендиране най-горещата зона достигна връх от 94 °C с медиана 89 °C, в сравнение с предишни платоета от 97 °C. Това има цена: един ден в средата на септември рендерът беше паузиран за 17% от времето, а GPU работеше на 900 MHz или по-малко през по-голямата част от деня. И това не е панацея: машината се изключи още веднъж, на 11 октомври, при 97 до 98 °C. Оттогава работи без прекъсване, 20 дни към момента, в който пишем това.
Четири грешки, които допуснахме по пътя
- Паузирането на една задача не охлади машината. Спирачката се активира, когато рендерът вече беше паузиран, защото един image модел все още генерираше и дузина таймера стартираха в същата минута. Горната стъпка сега паузира всяка тежка GPU задача, а не само рендера.
- Защитният механизъм паузира задачи по име, а имената се промениха. Два пъти нов engine щеше да избегне паузата: image модел с ново име на процес през септември и през октомври рендер, който работи в контейнер, вместо като дъщерен процес на render услугата. Всяка промяна на engine сега включва проверка на списъка на защитния механизъм.
- Задържането на спирачката никога не се освободи. Тя спря видео услугата и остави файл за задържане, така че нищо да не я рестартира. Нищо не предупреди никого и изходът спря за три дни, преди да забележим. Задържането сега се освобождава само: пет минути след последната спирачка, без нова спирачка, с поне 30 GB свободна памет и десетминутна средна стойност от 93 °C или по-малко. Изчакването машината да се охлади никога нямаше да проработи: тя имаше средна стойност 88 °C с и без рендиране.
- Алармата звънеше при нормалната температура на машината. Прагът за предупреждение беше 88 °C, което беше средната стойност за тази машина. За един ден тя прекарваше 32% от времето при 90 °C или повече, 8% при 93 °C или повече и 3% при 95 °C или повече, и никога не достигаше 97 °C. Преместихме алармата на 97 °C – платото, при което тя всъщност умираше, и имейлите с предупреждения спряха.
Изводът
Софтуерът поддържаше тази машина жива, но причината беше физическа: охлаждането ѝ беше два до три пъти по-лошо от това на сестринските модели. Ако GB10 машина се изключи сама под натоварване, първо проверете въздушния поток. След това ограничете тактовата честота на GPU-то, преди услугите ви да стартират, паузирайте тежките задачи, преди машината да достигне лимита си, и задайте алармите според температурите, при които тя всъщност работи.
Factory Floor включва защитен механизъм за прегряване от този тип: той чете най-високата стойност от сензорите на GPU-то и термичните зони, паузира тежките задачи, които посочите, при зададена температура (по подразбиране 92 °C) и ги възобновява само под по-ниска такава (84 °C), като до него има и защитни механизми за памет и диск.