Mașina noastră GB10 se oprea singură. Jurnalul acuză memoria; cauza era supraîncălzirea
Operațiuni
Una dintre cele trei mașini NVIDIA GB10 s-a oprit de trei ori în patru zile în septembrie: pe 10 septembrie, pe 12 septembrie (a rămas oprită timp de 17 ore) și pe 13 septembrie, la douăsprezece minute după ce a fost pornită din nou. De fiecare dată a fost nevoie ca o persoană să apese butonul de pornire.
Cum arată o oprire din cauza supraîncălzirii
Jurnalul de sistem s-a oprit pur și simplu, în plină activitate, fără nicio oprire înregistrată: o oprire bruscă a alimentării nu oferă timp pentru journald să își scrie bufferul. În iulie, după o oprire similară, ceasul a revenit chiar cu o dată veche. Iar watchdog-ul hardware, care repornește o mașină blocată, nu a făcut nimic, pentru că mașina nu se blocase: alimentarea dispăruse.
Indiciul care era greșit
Ultimele linii din kernel înainte de fiecare oprire erau erori de memorie GPU insuficientă (NV_ERR_NO_MEMORY), deci memoria părea vinovată. Nu era. Aceste linii erau pur și simplu cele mai frecvente scrise de kernel: 440.580 într-o singură pornire care funcționase timp de 19 zile înainte de a se termina. Când o linie apare atât de des, va fi ultima linie înainte de orice. Înainte de a acuza o linie din jurnal, numărați cât de des apare când totul merge bine.
Indiciul care era corect
Deoarece jurnalul își pierde ultimele minute în cazul unei opriri a alimentării, adăugaserăm un mic sampler care scrie temperaturile, sarcina și memoria într-un fișier în fiecare minut și îl salvează pe disc. A surprins toate cele cinci opriri din iulie. Fiecare a survenit la sarcină GPU maximă (96%), cu CPU-ul la 85-97 °C.
Cronologia a explicat restul. În jurul începutului lui septembrie, mutaserăm randarea video pe această mașină. Puterea GPU sub sarcină maximă a crescut de la aproximativ 24 W la 46 W, temperatura mediană a GPU-ului de la 68 la 86 °C, iar minutele pe săptămână cu CPU-ul la 95 °C sau mai mult, de la niciuna la 4.283. Celelalte două mașini GB10, care rulează modelul de limbaj la aceeași sarcină de 96%, au rămas la 65-81 °C. Aceasta se răcea pur și simplu mai prost.
Prima soluție: o limită a ceasului GPU
Pe GB10, nvidia-smi nu poate seta o limită de putere, dar poate limita ceasul GPU: nvidia-smi -lgc 0,2000. În iulie, aceasta a redus cea mai fierbinte zonă de la 91 °C la 77-83 °C în câteva secunde. Două detalii contează:
- Aplicați-o înainte de pornirea serviciilor grele. Serviciul nostru de limitare a pornit prima dată la aproximativ 15 secunde după boot, când serverul de model începuse deja să se încarce la putere maximă, moment care prăbușise mașina. Acum rulează înainte ca Docker să pornească.
- Verificați-l sub sarcină. Cu limita activată, ceasul GPU raportat indică încă aproximativ 2.400 MHz când GPU-ul este inactiv. Sub sarcină, se menține la 1.976 MHz.
A doua remediere: un mecanism de siguranță termică în trepte
Limita nu a fost suficientă odată ce randarea a intrat în scenă, așa că un mecanism de siguranță citește acum fiecare senzor o dată pe secundă și acționează în trepte: un ceas GPU mai redus de la 89 °C și încă unul mai redus de la 92 °C; de la 94 °C, randorul este pus în pauză (SIGSTOP) și CPU-ul încetinit; de la 96 °C, fiecare job GPU este pus în pauză pentru secundele necesare răcirii. Revine doar după ce mașina a rămas mai rece pentru o perioadă. La 97 °C timp de 20 de secunde, o frână de ultimă instanță oprește complet serviciul video.
În primele nouă minute sub randare, cea mai fierbinte zonă a atins un vârf de 94 °C cu o mediană de 89 °C, față de platouri de 97 °C înainte. Are un preț: într-o zi de la mijlocul lui septembrie, randorul a fost pus în pauză 17% din timp, iar GPU-ul a rulat la 900 MHz sau mai puțin în cea mai mare parte a zilei. Și nu este un remediu universal: mașina s-a oprit singură încă o dată, pe 11 octombrie, la 97-98 °C. De atunci, funcționează fără întreruperi, 20 de zile la momentul scrierii acestor rânduri.
Patru greșeli pe care le-am făcut pe parcurs
- Punerea în pauză a unui singur job nu a răcit mașina. Frâna s-a declanșat cu randorul deja în pauză, deoarece un model de imagine încă genera și o duzină de timer-e au pornit în același minut. Treapta superioară pune acum în pauză fiecare job GPU intens, nu doar randorul.
- Mecanismul de siguranță pune job-urile în pauză după nume, iar numele s-au schimbat. De două ori un nou motor ar fi scăpat de pauză: un model de imagine cu un nume de proces nou în septembrie și, în octombrie, un randor care rulează într-un container în loc să fie un proces-copil al serviciului de randare. Fiecare schimbare de motor include acum o verificare a listei mecanismului de siguranță.
- Retenția frânei nu s-a ridicat niciodată. A oprit serviciul video și a lăsat un fișier de retenție astfel încât nimic să nu-l repornească. Nimic nu a alertat pe nimeni, iar producția s-a oprit timp de trei zile înainte să observăm. Retenția se ridică acum singură: la cinci minute după ultima frână, fără nicio frână nouă, cu cel puțin 30 GB de memorie liberă și o medie pe zece minute de 93 °C sau mai puțin. Așteptarea răcirii mașinii nu ar fi funcționat niciodată: media era de 88 °C cu și fără randare.
- Alarma a sunat la temperatura normală a mașinii. Pragul de alertă era de 88 °C, care era media acestei mașini. Într-o zi, a petrecut 32% din timp la 90 °C sau mai mult, 8% la 93 °C sau mai mult și 3% la 95 °C sau mai mult, fără să atingă vreodată 97 °C. Am mutat alarma la 97 °C, platoul la care a murit efectiv, iar e-mailurile de alarmă s-au oprit.
Concluzia
Software-ul a menținut această mașină în funcțiune, dar cauza era fizică: răcirea ei era de două-trei ori mai proastă decât a mașinilor similare. Dacă o mașină GB10 se oprește singură sub sarcină, verificați mai întâi fluxul de aer. Apoi limitați ceasul GPU înainte de pornirea serviciilor, întrerupeți sarcinile grele înainte ca mașina să atingă limita și setați alarmele în funcție de temperaturile la care rulează efectiv.
Factory Floor include un mecanism de siguranță termică de acest tip: citește cea mai ridicată valoare dintre senzorii GPU și cei de zonă termică, întrerupeți sarcinile grele specificate de dumneavoastră la o temperatură setată (implicit 92 °C) și le reia doar sub una mai mică (84 °C), având alături mecanisme de siguranță pentru memorie și disc.