NETBYTE
Projekt indítása

Kutatás

Helix, 1. rész: európai nyelvi modellt tanítunk

Saját nyelvi modellt tanítunk. Kicsi – 320 millió paraméter –, de az Európai Unió mind a 24 hivatalos nyelvén olvas, és játékokra készült videokártyákon tanul. Ez az első rész arról szól, hogyan jutottunk idáig; a második a tanítás végén következik.

Szerző: Marcus Weitschat 8 perc olvasás

Pontmátrix arról, mire figyelhet a Helix minden egyes tokenje: kék sáv a helyi ablaknak, sárga pontok a saját blokknak, szórt narancssárga pontok a nagy távolságú felidézésnek.

Miért tanít egy játékstúdió nyelvi modellt

A NETBYTE játékokat, alkalmazásokat és weboldalakat készít. Az ilyen termékekben egyre gyakrabban ott vannak a nyelvi modellek: válaszoló szereplőként, a kérdést értő súgóként, valamit elvégző eszközként. A legtöbb nyílt modell elsősorban angolul gondolkodik; az észt, az ír vagy a máltai csak a peremen jelenik meg. Az egész láncot magunk akartuk megérteni – adatok, tokenizáló, architektúra, tanítás –, és kideríteni, valójában hová megy a pénz.

paraméter
320 millió
hivatalos uniós nyelv
24
tanítótoken
6,5 milliárd
a bérelt GPU-kért
≈ 12 $

A Helix kutatási prototípusként indult. Minden, ami következik, egy-egy döntés, amely formálta, mindegyik méréssel alátámasztva – és a hibák, amelyek a legtöbb időnkbe kerültek.

Négy ötlet, egy maradt

A prototípus a mai szöveggenerátorok négy ismert gyengeségét vette célba. Egyetlen token helyett 16 tokenes blokkokban ír, egy közös rétegmagot többször is be tud járni, minden blokkhoz tömör „tervet” jósol, és az olcsó helyi figyelmet lineáris figyelemmel ötvözi a nagy távolságokhoz.

A blokkos írás azonnal működött: egy kis tesztmodell 64 tokent 13 hálózati futással írt meg, ahol egy hagyományos modellnek tokenenként egy futás kell – nagyjából az ötödannyi munka. A másik három ötlet elbukott egy keményebb teszten. Olyan feladatokat építettünk, amelyekben a válasz messze a helyi ablakon kívül van, így a modellnek az egész szövegen végig kell visszanéznie.

1. ábra Felidézés nagy távolságon A helyes válaszok aránya egy felidézési feladatban, amelynek a nyoma a helyi ablakon kívül van. Kis referenciamodell, minden változatnak azonos keret.
  1. Csak helyi ablak 23,1%
  2. + lineáris figyelem, terv és ciklusok 23,1%
  3. + 2 pontos globális fej 49,4%
  4. Teljes figyelem (kontroll) 49,0%
Adatok megjelenítése
VáltozatHelyes
Csak helyi ablak23,1%
+ lineáris figyelem, terv és ciklusok23,1%
+ 2 pontos globális fej49,4%
Teljes figyelem (kontroll)49,0%
Véletlen (25%)25,0%

Ezeket csak a teljes távolságon át pontos figyelem oldotta meg. A lineáris figyelem, a terv és a ciklusok a véletlen szintjén maradtak; az optimalizáló a lineáris memóriát egy tokennél rövidebb felezési időre szabályozta le. Két pontos globális fej elég volt ahhoz, hogy utolérje a teljes figyelmet.

A végleges modell ezért minden rétegben nyolc helyi fejet tart meg 256 tokenes ablakkal, és minden második rétegben két pontos globális fejet ad hozzá; a köztes rétegek két kapuzott lineáris figyelemfejet tartanak meg. A terv és a ciklusok ki vannak kapcsolva. Továbbra is benne vannak a kódban, és tesztelve vannak, de valódi szövegen nem hozták vissza a költségüket.

2. ábra Mire figyelnek a rétegek Rétegenként tíz figyelemfej, tizenkét réteg. Minden rétegben nyolc helyi fej van; a páratlan rétegek két pontos globális fejet, a párosak két kapuzott lineáris figyelemfejet adnak hozzá.
  • Helyi, 256 tokenes ablak
  • Pontos globális figyelem
  • Kapuzott lineáris figyelem
Adatok megjelenítése
FejtípusRétegekFej rétegenként
Helyi, 256 tokenes ablak1–128
Pontos globális figyelem1, 3, 5, 7, 9, 112
Kapuzott lineáris figyelem2, 4, 6, 8, 10, 122

Mérni, nem feltételezni

Minden tanítási trükköt egy 94 millió paraméteres modellen próbáltunk ki, futásonként azonos kerettel: 29,5 millió token, ugyanaz a seed, ugyanaz az adatsorrend. Ugyanannak a konfigurációnak két futása ±0,03-mal tér el, így minden ennél kisebb különbség zaj.

3. ábra Mi segített – és mi volt zaj A validációs veszteség változása az AdamW-alapvonalhoz képest. 94 millió paraméteres modell, futásonként 29,5 millió token. A nulla alatti érték jobb; a szürke sáv a futások közötti zaj (±0,03).
  1. Muon + WSD-ütemezés -0,587
  2. Muon optimalizáló -0,347
  3. Mélyebb, keskenyebb háló -0,099
  4. WSD-ütemezés -0,080
  5. Értékreziduum -0,007
  6. z-loss +0,029
  7. Csoportosított lekérdezéses figyelem +0,088
Adatok megjelenítése
VáltoztatásΔ veszteség (nat)
Muon + WSD-ütemezés-0,587
Muon optimalizáló-0,347
Mélyebb, keskenyebb háló-0,099
WSD-ütemezés-0,080
Értékreziduum-0,007
z-loss+0,029
Csoportosított lekérdezéses figyelem+0,088

A Muon optimalizáló volt az egyetlen nagy emelő, és jól kombinálható egy warmup-stable-decay tanulásiráta-ütemezéssel. Az embedding és a kimeneti réteg visszaadása az AdamW-nek, ahogy a Muon szerzői javasolják, további 0,12-t hozott, és 5%-kal gyorsította a tanítást. A kombinációk nem egyszerűen összeadódnak: a mélyebb, keskenyebb háló AdamW mellett segített, Muon mellett ártott. Ezért minden ígéretes kombináció saját futást kapott.

24 nyelv, 6,5 milliárd token

A Helix webes szöveget olvas: angolul a FineWeb-Edu, a többi 23 nyelven a FineWeb-2 adatkészletből – a nagyobb nyelveknél annak minőség szerint szűrt felső tizedéből. Kód, matematika és egy kis szintetikus csevegőfolyam egészíti ki a keveréket. Az angol egyharmadot kap. A többi nyelv súlya a rendelkezésre álló szöveg mennyiségét követi, úgy simítva, hogy az ír és a máltai ne vesszen el, és egyetlen forrás sem ismétlődik négynél többször – addig az ismétlés majdnem olyan jó, mint a friss adat.

4. ábra Mit olvas a Helix A tanítótokenek aránya forráscsoportonként. 6,5 milliárd tokenes korpusz 34 folyamban; a kód és jelölőnyelvek közé tartozik a Python, a JavaScript, a C, a C++, a Java, a HTML, a CSS és a Markdown.
  1. A többi 23 uniós nyelv 51,6%
  2. Angol 33,0%
  3. Kód és jelölőnyelvek 10,0%
  4. Matematika 3,0%
  5. Szintetikus csevegés és eszközök 2,4%
Adatok megjelenítése
ForrásArány
A többi 23 uniós nyelv51,6%
Angol33,0%
Kód és jelölőnyelvek10,0%
Matematika3,0%
Szintetikus csevegés és eszközök2,4%

A csevegőfolyam kivonatoló: a válaszok valódi bekezdésekből származnak, az eszközök eredményeit pedig kiszámítjuk, nem kitaláljuk. Formát tanít, nem tudást. A tokenizáló bájtszintű BPE 64 000 bejegyzéssel; minden latin betűs nyelvnél 3,3–4 bájt szöveget tesz egy tokenbe.

Három hiba, amelyet érdemes elmesélni

  • A modell, amely elolvasta a választ. Az egyik kódágban a globális fejek figyelmen kívül hagyták az oksági maszkot, és látták a jövőbeli tokeneket. A veszteség 75 lépés alatt 6,85-ről 1,71-re esett, egy 16 órás futás pedig értéktelen lett. A gyanúsan jó veszteség hibajelentés; most egy regressziós teszt őrzi pontosan ezt az esetet.
  • A karakter nem bájt. A tömörítést karakterekben számoltuk UTF-8 bájtok helyett. Ez kitalált egy „gyengeséget” a kínaiban, a görögöt és a bolgárt pedig majdnem kétszer olyan rossznak mutatta, mint amilyenek.
  • Minden üres sornál széttört dokumentumok. A kódoló minden üres sornál kettévágta a dokumentumokat – üres sor pedig szinte minden forrásfájl közepén akad. A kód- és matematikaszöveg akár 35%-a elveszett. Kijavítottuk az elválasztót, és október 31-én újraépítettük a teljes korpuszt; ez 2 óra 12 percig tartott.

Az asztaltól a bérelt gépig

Az első 1,66 milliárd token egyetlen AMD Radeon RX 7800 XT-n futott. Két dolog tette használhatóvá: egy alapból kikapcsolt figyelemkernel-kapcsoló – nélküle a figyelem 12-szer lassabb volt – és minden réteg lefordítása a torch.compile segítségével. Másodpercenként 11 800 tokenes mediánnal a maradék még majdnem öt napig tartott volna.

Ezért írtunk egy robotpilótát. GPU-kat bérel a Vast.ai oldalon, feltölti a kódot, a korpuszt és az ellenőrzőpontot, tanít, háromóránként hazahoz egy ellenőrzőpontot, és leáll, mielőtt elfogyna a kredit. November 2-án három gépen ment végig, amelyeket a szolgáltatók sosem indítottak el, aztán két németországi RTX 4070 Ti Super mellett maradt óránként 0,363 dollárért. A 15,4 GiB feltöltése 40 percig tartott.

5. ábra Tanítási sebesség Token másodpercenként a 320 milliós modellnél, 1024-es szekvenciahosszal (medián). Helyben: egy AMD Radeon RX 7800 XT. Bérelve: két NVIDIA RTX 4070 Ti Super.
  1. Helyben, optimalizálás előtt 8319
  2. Helyben, fordítva 11 830
  3. Bérelt, 2 GPU 41 367
Adatok megjelenítése
FelállásToken/s
Helyben, optimalizálás előtt8319
Helyben, fordítva11 830
Bérelt, 2 GPU41 367

Másodpercenként 41 400 token az asztali gép 3,5-szerese. A bérelt rész – 4,8 milliárd token nagyjából 33 óra alatt – körülbelül 12 dollárba kerül.

Hol tart ma a Helix

6. ábra A tanítás eddig Veszteség natban tokenenként, az alacsonyabb a jobb. Félretett: szöveg, amelyen a modell sosem tanul. Tanítás: 50 millió tokenenkénti átlag; a lehűtésben gyorsabban esik, részben mert megváltozik az adatkeverék. A tengely a tervezett 6,5 milliárd tokennél ér véget.
  • Félretett
  • Tanítás

Veszteség (nat tokenenként)

Elolvasott tokenek milliárdban

Adatok megjelenítése
Elolvasott tokenek milliárdbanFélretettTanítás
0,064,5714,261
0,553,7763,574
1,043,6943,469
1,543,5963,421
2,033,4263,238
2,523,3293,143
3,013,2913,113
3,503,2633,076
3,993,2253,079
4,493,2443,076
4,983,2183,036
5,353,1232,884

2026. november 3-án a Helix 6,5 milliárd tokenjéből 5,35-öt olvasott el. 5,2 milliárd óta a lehűtési szakaszban van: a tanulási ráta csökken, a keverék pedig a matematika, a kód és a csevegés felé tolódik. Az összes folyam félretett szövegén a veszteség tokenenként 3,12 nat.

7. ábra Hol tartanak az egyes nyelvek Bit bájtonként félretett szövegen 5,35 milliárd token után, az alacsonyabb a jobb. A görög és a bolgár részben azért tűnik jobbnak, mert minden betűjük két bájtot foglal.
  1. görög 0,721
  2. bolgár 0,844
  3. francia 1,065
  4. angol 1,086
  5. spanyol 1,135
  6. portugál 1,219
  7. német 1,257
  8. holland 1,268
  9. olasz 1,277
  10. lengyel 1,355
  11. dán 1,364
  12. magyar 1,407
  13. szlovák 1,412
  14. máltai 1,415
  15. román 1,416
  16. svéd 1,418
  17. ír 1,422
  18. szlovén 1,431
  19. cseh 1,444
  20. litván 1,450
  21. lett 1,451
  22. horvát 1,507
  23. finn 1,508
  24. észt 1,727
Adatok megjelenítése
NyelvBit bájtonként
görög0,721
bolgár0,844
francia1,065
angol1,086
spanyol1,135
portugál1,219
német1,257
holland1,268
olasz1,277
lengyel1,355
dán1,364
magyar1,407
szlovák1,412
máltai1,415
román1,416
svéd1,418
ír1,422
szlovén1,431
cseh1,444
litván1,450
lett1,451
horvát1,507
finn1,508
észt1,727

Hogy ez mit jelent a gyakorlatban, azt egy szerkesztetlen minta mutatja meg legjobban, egy nagyjából 4,9 milliárd tokennél mentett ellenőrzőpontból. Az eleje tőlünk van, a többi a Helixtől:

Angol nyelvű minta, ellenőrzőpont 4,9 milliárd tokennél, szerkesztetlenül

Kezdőszöveg: The history of the printing press begins in the fifteenth century, when Johannes Gutenberg introduced movable type to Europe. Before that, books A modell kimenete: for printing were usually in the form of texts, usually in the format of illustrations. In its introduction to the printing press, Gutenberg uses one line-of-action model to illustrate a series of printed pieces of a book.

A nyelvtan, a szóválasztás és a téma tart; a tények nem. Nagyjából ezt lehet várni 320 millió paramétertől és 6,5 milliárd tokentől: folyékonyan beszélő modellt, amely kitalál dolgokat.

Mi következik

Az előtanítás néhány órán belül véget ér. Utána jön egy hosszú kontextusú szakasz a Project Gutenberg könyveivel és az EUR-Lex uniós jogi szövegeivel, egy finomhangolás beszélgetésre és eszközhasználatra, valamint egy kis vázlatmodell, amely felgyorsítja a generálást.

Vissza az összes bejegyzéshez

Következő lépés

Mi szülessen meg legközelebb?

Meséljen nekünk a játékáról, alkalmazásáról, weboldaláról vagy MI-projektjéről. Kezdésnek egy rövid üzenet is elegendő.