Náš stroj GB10 sa sám vypínal. Log obviňoval pamäť; príčinou bolo teplo.
Prevádzka
Jeden z našich troch strojov NVIDIA GB10 zhasol trikrát za štyri dni v septembri: 10. septembra, 12. septembra (bol vypnutý 17 hodín) a 13. septembra, dvanásť minút po opätovnom zapnutí. Vždy bolo potrebné, aby niekto stlačil tlačidlo napájania.
Ako vyzerá vypnutie spôsobené prehriatím
Systémový denník jednoducho prestal zapisovať uprostred činnosti, bez záznamu o vypnutí: tvrdé vypnutie nedá journald čas zapísať buffer. V júli sa po podobnom vypnutí hodiny dokonca vrátili so starým dátumom. A hardvérový watchdog, ktorý reštartuje zaseknutý stroj, nič neurobil, pretože stroj sa nezasekol: odišla energia.
Mylná stopa
Posledné riadky kernela pred každým zlyhaním boli chyby nedostatočnej pamäte GPU (NV_ERR_NO_MEMORY), takže pamäť vyzerala ako vinník. Nebola. Tieto riadky boli jednoducho najčastejšie zapisované kernelom: 440 580 z nich pri jednom štarte, ktorý trval 19 dní pred ukončením. Keď sa riadok objavuje tak často, bude posledným riadkom pred čímkoľvek. Pred obvinením riadka v logu si spočítajte, ako často sa objavuje, keď sa nič nepokazí.
Správna stopa
Keďže denník pri vypnutí stratí posledné minúty, pridali sme malý vzorkovač, ktorý každú minútu zapíše teploty, záťaž a pamäť do súboru a uloží ho na disk. Zachytil všetkých päť zlyhaní od júla. Každé nastalo pri plnej záťaži GPU (96 %) s CPU na 85 až 97 °C.
Časovanie vysvetlilo zvyšok. Okolo začiatku septembra sme na tento stroj presunuli vykresľovanie videa. Jeho výkon GPU pri plnej záťaži stúpol z približne 24 W na 46 W, mediánová teplota GPU z 68 na 86 °C a minúty týždenne s CPU na 95 °C alebo viac z nuly na 4 283. Naše dva ďalšie stroje GB10, ktoré bežia s jazykovým modelom pri rovnakej 96 % záťaži, zostali na 65 až 81 °C. Tento sa jednoducho horšie chladil.
Prvá oprava: obmedzenie taktu GPU
Na GB10 nemôže nvidia-smi nastaviť limit výkonu, ale môže obmedziť takt GPU: nvidia-smi -lgc 0,2000. V júli to znížilo najteplejšiu zónu z 91 °C na 77 až 83 °C v priebehu sekúnd. Dva detaily sú dôležité:
- Nastavte ho pred štartom náročných služieb. Naša služba obmedzenia sa najprv spustila asi 15 sekúnd po štarte, keď server s modelom už začal načítavať pri plnom výkone, čo bol moment, ktorý stroj zhodil. Teraz beží pred štartom Docker.
- Skontrolujte to pri záťaži. So zapnutým obmedzením sa uvádzaná hodnota taktu GPU stále pohybuje okolo 2 400 MHz, keď je GPU nečinná. Pri záťaži sa drží na úrovni 1 976 MHz.
Druhá oprava: bezpečnostná poistka proti prehriatiu s postupnými krokmi
Obmedzenie nestačilo, keď začalo prebiehať vykresľovanie, preto bezpečnostná poistka teraz každú sekundu číta všetky senzory a koná v krokoch: zníženie taktu GPU od 89 °C a ďalšie zníženie od 92 °C; od 94 °C sa pozastaví vykresľovač (SIGSTOP) a spomalí sa CPU; od 96 °C sa pozastavia všetky úlohy GPU na čas potrebný na ochladenie. Spätné zvýšenie nastane až po tom, čo stroj zostane chladnejší určitú dobu. Pri 97 °C počas 20 sekúnd zasiahne núdzová brzda, ktorá úplne zastaví video službu.
Počas prvých deviatich minút pri vykresľovaní dosiahla najteplejšia zóna vrchol 94 °C s mediánom 89 °C, oproti predchádzajúcim plató na úrovni 97 °C. Má to svoju cenu: jeden deň v polovici septembra bol vykresľovač pozastavený 17 % času a GPU bežala väčšinu dňa na 900 MHz alebo menej. A nie je to liek: stroj sa ešte raz sám vypol, 11. októbra, pri 97 až 98 °C. Odvtedy beží bez prerušenia, 20 dní od napísania tohto textu.
Štyri chyby, ktoré sme po ceste urobili
- Pozastavenie jednej úlohy stroj neochladilo. Brzda zasiahla, keď bol vykresľovač už pozastavený, pretože model na generovanie obrázkov stále kreslil a tucet časovačov sa spustilo v tej istej minúte. Najvyšší stupeň teraz pozastaví všetky náročné úlohy GPU, nielen vykresľovač.
- Bezpečnostná poistka pozastavuje úlohy podľa názvu a názvy sa zmenili. Dvakrát by nový engine unikol pozastaveniu: model na generovanie obrázkov s novým názvom procesu v septembri a v októbri vykresľovač, ktorý beží v kontajneri namiesto toho, aby bol podriadeným procesom vykresľovacej služby. Každá zmena enginu teraz zahŕňa kontrolu zoznamu bezpečnostnej poistky.
- Zádrž brzdy sa nikdy nezrušila. Zastavila video službu a ponechala súbor so zádržou, aby sa nič nespustilo znova. Nikoho to ani neupozornilo a výstup bol zastavený tri dni, kým sme si toho všimli. Zádrž sa teraz ruší sama: päť minút po poslednej brzde, bez novej brzdy, s aspoň 30 GB voľnej pamäte a desaťminútovým priemerom 93 °C alebo menej. Čakanie na ochladenie stroja by nikdy nefungovalo: priemer bol 88 °C s vykresľovaním aj bez neho.
- Alarm zazvonil pri bežnej teplote stroja. Hladina upozornenia bola 88 °C, čo bola priemernej teplota tohto stroja. Počas jedného dňa strávil 32 % času pri teplote 90 °C a viac, 8 % pri 93 °C a viac a 3 % pri 95 °C a viac a nikdy nedosiahol 97 °C. Posunuli sme alarm na 97 °C, na plateau, kde skutočne zomrel, a e-maily s upozorneniami prestali chodiť.
Zhrnutie
Softvér udržoval tento stroj v prevádzke, ale príčina bola fyzická: jeho chladenie bolo dva až trikrát horšie ako u jeho súrodencov. Ak sa stroj GB10 pod záťažou sám vypne, najprv skontrolujte prietok vzduchu. Potom obmedzte takt GPU pred spustením vašich služieb, pozastavte náročné úlohy skôr, ako stroj dosiahne svoj limit, a nastavte alarmy podľa teplôt, pri ktorých skutočne beží.
Factory Floor obsahuje bezpečnostnú poistku proti prehriatiu tohto typu: číta najvyššiu hodnotu zo senzorov GPU a tepelných zón, pozastaví vami určené náročné úlohy pri nastavenej teplote (predvolene 92 °C) a obnoví ich až pod nižšiu teplotu (84 °C), pričom vedľa nej sú bezpečnostné poistky pre pamäť a disk.