Naš GB10 uređaj se sam gasio. Dnevnik je okrivljao memoriju; krivica je bila u pregrevanju
Operacije
Jedan od naša tri NVIDIA GB10 uređaja se ugasio tri puta u četiri dana u septembru: 10. septembra, 12. septembra (ostao je isključen 17 sati) i 13. septembra, dvanaest minuta nakon što je ponovo uključen. Svaki put je bilo potrebno da neko pritisne dugme za uključivanje.
Kako izgleda gašenje usled pregrevanja
Sistemski dnevnik se jednostavno zaustavio, usred aktivnosti, bez zapisa o gašenju: naglo isključenje napajanja ne ostavlja journald-u vremena da upiše bafer. U julu, nakon sličnog gašenja, sat se čak vratio na stari datum. A hardverski nadzorni proces, koji restartuje uređaj koji se zablokirao, nije ništa uradio, jer se uređaj nije zablokirao: nestalo je napajanje.
Pogrešan trag
Poslednje linije kernela pre svakog kvara bile su greške nedostatka GPU memorije (NV_ERR_NO_MEMORY), pa je memorija izgledala kao krivac. Nije bila. Te linije su bile jednostavno ono što je kernel najčešće upisivao: 440.580 takvih linija u jednom pokretanju koje je trajalo 19 dana pre nego što je završeno. Kada se linija pojavljuje toliko često, biće poslednja linija pre bilo čega. Pre nego što okrivite liniju u dnevniku, prebrojite koliko često se pojavljuje kada ništa ne ide naopako.
Tačan trag
Pošto dnevnik gubi poslednje minute pri isključenju napajanja, dodali smo mali uzorkivač koji svaki minut upisuje temperature, opterećenje i memoriju u fajl i upisuje ga na disk. Uhvatio je svih pet kvarova od jula. Svaki se dogodio pri punom GPU opterećenju (96%), sa CPU na 85 do 97 °C.
Tajming je objasnio ostatak. Oko početka septembra prebacili smo renderovanje videa na ovaj uređaj. Snaga njegovog GPU pri punom opterećenju porasla je sa oko 24 W na 46 W, medijalna GPU temperatura sa 68 na 86 °C, a minute nedeljno sa CPU na 95 °C ili više sa nula na 4.283. Naša druga dva GB10 uređaja, koja pokreću jezički model pri istom opterećenju od 96%, ostala su na 65 do 81 °C. Ovaj se jednostavno lošije hladio.
Prva popravka: ograničenje GPU takta
Na GB10, nvidia-smi ne može da postavi ograničenje snage, ali može da ograniči GPU takt: nvidia-smi -lgc 0,2000. U julu je to smanjilo najtopliju zonu sa 91 °C na 77 do 83 °C u roku od nekoliko sekundi. Dva detalja su bitna:
- Primenite ga pre nego što se pokrenu teški servisi. Naša usluga za ograničenje se prvo pokretala oko 15 sekundi nakon pokretanja, kada je server modela već počeo da se učitava punom snagom, što je trenutak koji je rušio uređaj. Sada se pokreće pre nego što se pokrene Docker.
- Proverite pod opterećenjem. Sa aktiviranim ograničenjem, prijavljeni takt GPU-a i dalje iznosi oko 2.400 MHz kada GPU miruje. Pod opterećenjem se drži na 1.976 MHz.
Druga ispravka: zaštitni mehanizam od pregrevanja u koracima
Ograničenje nije bilo dovoljno kada je krenulo renderovanje, pa zaštitni mehanizam sada čita svaki senzor jednom u sekundi i deluje u koracima: niži takt GPU-a od 89 °C i još niži od 92 °C; od 94 °C renderovanje se pauzira (SIGSTOP) i CPU se usporava; od 96 °C svaki GPU posao se pauzira na sekunde potrebne za hlađenje. Vraća se nazad tek nakon što mašina neko vreme ostane hladnija. Na 97 °C tokom 20 sekundi, kočnica kao poslednja mera potpuno zaustavlja video servis.
Tokom prvih devet minuta pod opterećenjem renderovanja, najtoplija zona je dostigla vrhunac od 94 °C sa medijanom od 89 °C, u poređenju sa platoima od 97 °C ranije. To ima svoju cenu: jednog dana sredinom septembra renderovanje je bilo pauzirano 17% vremena, a GPU je radio na 900 MHz ili manje većinu dana. I to nije lek: mašina se još jednom sama isključila, 11. oktobra, na 97 do 98 °C. Od tada radi bez prekida, 20 dana u trenutku kada ovo pišemo.
Četiri greške koje smo napravili usput
- Pauziranje jednog posla nije ohladilo mašinu. Kočnica je aktivirana dok je renderovanje već bilo pauzirano, jer je model za slike i dalje radio i desetak tajmera je startovalo u istom minutu. Najviši nivo sada pauzira svaki teški GPU posao, a ne samo renderovanje.
- Zaštitni mehanizam pauzira poslove po imenu, a imena su se menjala. Dva puta je novi engine mogao da izbegne pauzu: model za slike sa novim imenom procesa u septembru, i u oktobru renderovanje koje radi u kontejneru umesto kao dete render servisa. Svaka promena engine-a sada uključuje proveru liste zaštitnog mehanizma.
- Zadržavanje kočnice se nikada nije podiglo. Zaustavila je video servis i ostavila fajl za zadržavanje tako da ga ništa nije restartovalo. Niko nije bio obavešten, a izlaz je stao na tri dana pre nego što smo to primetili. Zadržavanje se sada samo podiže: pet minuta nakon poslednje kočnice, bez nove kočnice, sa najmanje 30 GB slobodne memorije i prosekom od 93 °C ili manje tokom deset minuta. Čekanje da se mašina ohladi nikada nije funkcionisalo: prosečna temperatura je bila 88 °C sa i bez renderovanja.
- Alarm je zvonio na normalnoj temperaturi mašine. Prag za uzbunu bio je 88 °C, što je bila prosečna temperatura ove mašine. Tokom jednog dana, 32% vremena je bila na 90 °C ili više, 8% na 93 °C ili više i 3% na 95 °C ili više, a nikada nije dostigla 97 °C. Pomerili smo alarm na 97 °C, na plato na kojem je mašina zaista prestajala da radi, i mejlovi sa upozorenjima su prestali.
Zaključak
Softver je održavao ovu mašinu u radu, ali uzrok je bio fizički: njeno hlađenje je bilo dva do tri puta lošije od hlađenja sličnih mašina. Ako se GB10 mašina sama isključi pod opterećenjem, prvo proverite protok vazduha. Zatim ograničite takt GPU-a pre pokretanja servisa, pauzirajte zahtevne poslove pre nego što mašina dostigne svoju granicu i podesite alarme na temperaturama na kojima mašina zaista radi.
Factory Floor sadrži zaštitni mehanizam protiv pregrevanja ove vrste: on očitava najvišu vrednost sa senzora GPU-a i termalnih zona, pauzira navedene zahtevne poslove na zadatoj temperaturi (podrazumevano 92 °C) i nastavlja ih samo ispod niže temperature (84 °C), uz zaštitne mehanizme za memoriju i disk pored njega.