Kaksi DGX Spark -luokan konetta, yksi malli: kopio kummallakin lyö pilkkomisen

Ylläpito

Seitsemän viikkoa paikallinen kielimallimme toimi pilkottuna kahden NVIDIA GB10 -koneen kesken tensor-parallelismin avulla. 22. lokakuuta korvasimme sen mallin täydellisellä kopiolla kummallakin koneella ja vähäisimmän yhteyden välityspalvelimella edessä. Läpimeno nousi noin 180:stä 210:een tokeniin sekunnissa, ja kumpi tahansa kone voi nyt käynnistyä uudelleen viemättä mallia.

Miksi pilkoimme sen

Kussakin koneessa on 128 GB muistia, jonka CPU ja GPU jakavat. Syyskuussa malli mahtui yhteen koneeseen, mutta sen välimuisti tuskin: käyttämämme vLLM-käännös ei pystynyt pitämään tämän mallin KV-välimuistia FP8-muodossa, joten välimuisti oli BF16-muodossa, ja yhdessä koneessa oli tilaa 499 110 tokenille. Se on vähemmän kuin kaksi pyyntöä mallin täydellisellä 262 144 tokenin kontekstilla. Pilkkomalla malli molempien koneiden kesken tensor-parallelismilla niiden suoraa verkkoyhteyttä pitkin välimuisti kasvoi yli kolmeen miljoonaan tokeniin. Pilkoimme mallin tilan, ei nopeuden, vuoksi.

Mitä muuttui

Uudempi 4-bittinen käännös samasta mallista (NVFP4, tehty kvantisointitietoiseen distillaatioon) vie noin 71 GiB muistia, ja yhteisön vLLM-käännös GB10:lle (eugr/spark-vllm-b12x) ajaa sen välimuistin FP8-muodossa. Nyt yksi kone pitää sisällään koko mallin ja 0,76–1,08 miljoonan tokenin välimuistin, tilaa 2,9–4,1 pyynnölle täydellisellä kontekstilla riippuen siitä, kuinka paljon muistia kone sille antaa. Molemmat kopiot käyttävät mallin omaa spekulatiivista dekoodausta (MTP, neljä luonnostokenia). Ennen vaihtoa ajoimme työkalukutsutestin uudella käännöksellä: se sai pisteet 86, korvattu käännös 75.

Mitä mittasimme

Pilkottu kahden koneen keskenKopio kummallakin koneella
KV-välimuistiyli 3 miljoonaa tokenia0,76 ja 1,08 miljoonaa tokenia
Pyyntöjä täydellisellä kontekstillanoin 122,9 ja 4,1
Läpimeno kuormamme allanoin 180 tokenia/s210 tokenia/s (111 + 99)
Käynnistysnoin 20 minuuttia5–13 minuuttia kopiota kohti
Yksi kone käynnistyy uudelleenmalli on alhaallatoinen kopio palvelee

Yksi kopio itsenäisesti, sen mukaan, kuinka monta pyyntöä se palvelee yhtä aikaa: lyhyillä kehotteilla 1 pyyntö tuotti 36 tokenia sekunnissa, 4 pyyntöä 82, 8 pyyntöä 109 ja 16 pyyntöä 150. Sähköpostiagenttimme pidemmillä kehotteilla 4 pyyntöä tuotti 81, 8 pyyntöä 113 ja 16 pyyntöä vain 87: yli kahdeksan tällaisen pyynnön jälkeen lisääminen hidasti suorituskykyä.

Iltapäivän aikana ensimmäinen kopio otti vastaan enintään 12 pyyntöä yhtä aikaa ja toinen 8. Ensimmäinen tuotti 91–93 tokenia sekunnissa ja suoritti 26–27 pyyntöä minuutissa; toinen 81–83 tokenia sekunnissa ja 22 pyyntöä minuutissa. Molemmat ottavat nyt vastaan 12 pyyntöä.

Mistä luovuimme

Tilasta. Jaettu malli käytti yhtä yli kolmen miljoonan tokenin välimuistia; kopioilla on kaksi pienempää välimuistia, ja pyyntö voi käyttää vain sen kopion välimuistia, joka palvelee sitä. Agenttimme lähettävät paljon lyhyitä ja keskipitkiä pyyntöjä, ja niille läpimeno oli tärkeämpää. Jos palvelet muutamia hyvin pitkiä konteksteja yhtä aikaa, jakaminen voi silti olla parempi valinta. Säilytimme jaetun asetuksen, ja takaisin vaihtaminen on yksi skripti.

Mitä meni pieleen vaihdon aikana

  1. Yksitoista minuuttia ilman mallia, sitten 30 sekuntia 502-virheitä. Jaettu malli joutui pysähtymään, ennen kuin kopio voitiin ladata samoihin koneisiin, joten agenttisi odottivat noin yksitoista minuuttia. Kun ensimmäinen kopio käynnistyi, välityspalvelin vastasi vielä noin 30 sekuntia virheellä "502 no live upstreams": se oli merkinnyt taustapalvelimet epäonnistuneiksi niiden ollessa alhaalla (max_fails=3, fail_timeout=30s) eikä yrittänyt niitä uudelleen ennen kuin tämä aika kului umpeen.
  2. Asiakas, joka ohitti välityspalvelimen. Yhdessä eräajossamme oli ensimmäisen koneen osoite konfiguraatiossa, joten koko sen kuorma meni yhdelle kopiolle, kun toisella oli kapasiteettia vapaana. Kaikki asiakkaat kulkevat nyt välityspalvelimen kautta; koneiden omat osoitteet ovat vain kunnonvalvontaa varten.
  3. Hyppineet mittarit. Läpimittaseuranta luki vLLM:n /metrics-pisteen välityspalvelimen kautta. Kahden taustapalvelimen kanssa peräkkäiset luvut tulivat eri kopioista, laskurit hyppelivät edestakaisin ja seuranta ilmoitti mallin olevan nälkiintynyt. Nyt se lukee jokaisen kopion suoraan ja laskee arvot yhteen.
  4. Vanha vahti, joka olisi pysäyttänyt uuden kopion. Jaetussa asennuksessa oli vahti, joka käynnisti palvelun uudelleen, kun malli lakasi vastaamasta. Uusi palvelu ilmoittaa Conflicts= vanhaan palveluun, joten tuo uudelleenkäynnistys olisi pysäyttänyt uuden kopion. Se piti poistaa käytöstä komennolla systemctl disable --now, ei vain pysäyttää, koska operaatiokerroksesi käynnistää uudelleen yksiköt, jotka ovat käytössä mutta eivät käynnissä.
  5. Muisti koneella, joka tekee muutakin työtä. Yhdellä koneella pyörii myös tietokantamme ja sivustomme käännökset. Kun vLLM:n gpu-memory-utilization oli 0,78, muuta käyttöä varten jäi vain 5 GiB, joten laskimme arvon 0,74 ja käynnistimme vain tuon kopion uudelleen toisen hoitaessa kuormaa. Näillä koneilla vLLM:lle antamasi muistiosuus tulee samasta muistista kuin kaikki muu.

Jos sinulla on kaksi tällaista konetta

Factory Floor toimittaa välityspalvelimen ja käynnistysasetukset yhdelle tai kahdelle koneelle, kunnon tarkistuksen sekä työkalukäyttötestin, jonka ajamme ennen mallien vaihtoa, sekä vahdit ja muistiturvarajat koneen muun toiminnan varalle.

Päivitetty: