Нашиот 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 дена додека го пишуваме ова.
Четири грешки што ги направивме по пат
- Паузирањето на една задача не ја олади машината. Кочницата се активираше додека рендерерот веќе беше паузиран, бидејќи модел за слики сè уште црташе и десетина тајмери стартуваа во истата минута. Горното ниво сега ги паузира сите тешки GPU задачи, а не само рендерерот.
- Заштитниот механизам ги паузира задачите по име, а имињата се сменија. Двапати нов мотор би избегнал паузирање: модел за слики со ново име на процес во септември, и во октомври рендерер кој работи во контејнер наместо како дете на render сервисот. Секоја промена на моторот сега вклучува проверка на листата на заштитниот механизам.
- Задршката на кочницата никогаш не се ослободи. Го запираше видео сервисот и оставаше фајл за задршка за ништо да не го рестартира. Ниту пак нешто алармираше некој, и излезот застана три дена пред да забележиме. Задршката сега се ослободува сама: пет минути по последната кочница, без нова кочница, со најмалку 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), со заштитни механизми за меморија и диск покрај него.