Naš nadzorni proces je restartovao ispravan serverski model osam puta u jednom danu

Operacije

22. jula je nadzorni proces restartovao naš lokalni serverski model osam puta. Ni jedan od tih restartova nije imao pad sistema iza sebe. Provera koja je trebalo da drži model aktivnim bila je ta koja ga je obarala.

Šta se desilo

Serverski model je pokretao vLLM na jednoj NVIDIA GB10 mašini i generisao oko 8 tokena u sekundi za jedan zahtev. Na svakih pet minuta nadzorni proces mu je slao stvarni zahtev za ćaskanje i čekao odgovor do 45 sekundi. Pet neuspešnih provera zaredom značilo je zaglavljen server, i nadzorni proces ga je restartovao. Restart je uklanjao model na nekoliko minuta dok se oko 19 GB težina ponovo nije učitalo.

Tog dana je posao u grupi držao dva do četiri zahteva zauzetim na serveru po nekoliko minuta. Zahtev nadzornog procesa je čekao u redu iza njih, isteklo mu je vreme i računao se kao neuspeh. Nakon pet takvih provera, ispravan server je restartovan. Imali smo datoteku sa oznakom "zauzeto" koju je nadzorni proces poštovao, ali je posao u grupi nikada nije postavio.

Kako je jedan lažni restart doveo do sledećeg

Svaki restart je neuspešno završio zahteve u toku sa greškom 500 ("cannot schedule new futures after shutdown"). Drugi nadzorni proces je brojao greške 500 i restartovao server kada ih je bilo previše, a što je više grešaka video, to je pre reagovao. Dakle, svaki lažni restart je ubrzavao dolazak sledećeg. Ukupno, četiri zasebna nadzorna procesa su mogla da restartuju taj server, na tajmerima od 5, 10, 15 i 30 minuta.

Pravilo koje smo izvukli iz toga

Provera ispravnosti ne sme da koristi ono što čuva. Oskudan resurs serverskog modela su njegova mesta za zahteve u toku. Provera koja zauzme jedno od tih mesta ili čeka na njega, deo je opterećenja koje treba da proceni. Proveravajte jeftino i restartujte samo kada možete da pokažete da je server zaglavljen.

Provera koja ga je zamenila

vLLM objavljuje svoje brojače na /metrics. Nova provera ih prvo čita:

Prva verzija je računala generisane tokene kao napredak. Prošla je osam testova, a pri prvom radu u produkciji našla je server zauzetim i ispravnim: 2 zahteva u toku, 107 novih tokena između dva čitanja.

Šta smo promenili od tada

Razlika se lako uočava. Dok smo pisali ovu napomenu, oba naša serverska modela su izvršavala po 12 zahteva, što je njihov limit. Test zahtev bi čekao u redu. Nova provera je prijavila oba kao zauzeta i zdrava, sa 126 i 101 token u sekundi, bez slanja zahteva.

Factory Floor 1.0.2 isporučuje ovu proveru kao models/llm-health.py, sa testovima za neaktivne, zauzete, zaglavljene i ponovo pokrenute servere, server bez metrika, proksi i mrtav backend.

Ažurirano: