Terveystarkastuksemme käynnisti terveen mallipalvelimen kahdeksan kertaa vuorokaudessa

Ylläpito

22. heinäkuuta vahti käynnisti paikallisen mallipalvelimen kahdeksan kertaa. Yhdessäkään näistä käynnistyksistä ei ollut kaatumista taustalla. Tarkistus, jonka oli tarkoitus pitää malli pystyssä, kaatoi sen.

Mitä tapahtui

Mallipalvelin käytti vLLM:ää yhdellä NVIDIA GB10 -koneella ja tuotti noin 8 tokenia sekunnissa yhtä pyyntöä kohden. Viiden minuutin välein vahti lähetti sille aidon chat-pyynnön ja odotti vastausta enintään 45 sekuntia. Viisi peräkkäistä epäonnistunutta tarkistusta tarkoitti jumiutunutta palvelinta, ja vahti käynnisti sen uudelleen. Uudelleenkäynnistys vei mallin pois käytöstä useiksi minuuteiksi, kun noin 19 GB:n painot ladattiin uudelleen.

Sinä päivänä eräajo piti kaksi–neljä pyyntöä varattuna palvelimella minuuttien kerrallaan. Vahdin pyyntö joutui odottamaan niiden taakse jonossa, aikakatkaisu tuli vastaan ja se laskettiin epäonnistumiseksi. Viiden tällaisen tarkistuksen jälkeen terve palvelin käynnistettiin uudelleen. Meillä oli "busy" (varattu) -lipputiedosto, jota vahti noudatti, mutta eräajo ei koskaan asettanut sitä.

Miten yksi virheellinen uudelleenkäynnistys johti seuraavaan

Jokainen uudelleenkäynnistys epäonnisti käynnissä olevat pyynnöt 500-virheellä ("cannot schedule new futures after shutdown"). Toinen vahti laski 500-virheet ja käynnisti palvelimen uudelleen, kun virheitä oli liikaa, ja mitä enemmän virheitä se näki, sitä nopeammin se reagoi. Joten jokainen virheellinen uudelleenkäynnistys sai seuraavan tapahtumaan aiemmin. Kaiken kaikkiaan neljä erillistä vahtia saattoi käynnistää tuon palvelimen uudelleen 5, 10, 15 ja 30 minuutin ajastimilla.

Sääntö, jonka otimme tästä

Terveystarkastuksen ei saa käyttää sitä, mitä se vartioi. Mallipalvelimen niukka resurssi on sen paikat käynnissä oleville pyynnöille. Tarkistus, joka vie yhden näistä paikoista tai odottaa yhtä, on osa kuormaa, jota sen on tarkoitus arvioida. Tarkista kevyesti ja käynnistä uudelleen vain, kun voit osoittaa palvelimen olevan jumissa.

Tarkistus, joka korvasi sen

vLLM julkaisee omat laskimensa osoitteessa /metrics. Uusi tarkistus lukee ne ensin:

Ensimmäinen versio laski generoidut tokenit etenemiseksi. Se läpäisi kahdeksan testiä, ja ensimmäisessä liveajossa se havaitsi palvelimen varatuksi ja terveeksi: 2 pyyntöä käynnissä, 107 uutta tokenia kahden lukemisen välillä.

Mitä olemme muuttaneet sen jälkeen

Ero on helppo nähdä. Kun kirjoitimme tätä huomautusta, molemmat mallipalvelimemme käsittelivät kumpikin 12 pyyntöä, mikä oli niiden raja. Testipyyntö olisi joutunut odottamaan jonossa. Uusi tarkistus ilmoitti molemmat varatuiksi ja terveiksi nopeuksilla 126 ja 101 tokenia sekunnissa ilman, että se lähetti yhtään pyyntöä.

Factory Floor 1.0.2 sisältää tämän tarkistuksen tiedostossa models/llm-health.py, ja siinä on testit tyhjille, varatuille, jumittuneille ja käynnistetyille palvelimille, palvelimelle ilman mittareita, välityspalvelimelle ja kuolleelle taustapalvelimelle.

Päivitetty: