NETBYTE
Začnite projekt

Raziskave

Helix, 1. del: učimo evropski jezikovni model

Učimo lasten jezikovni model. Majhen je – 320 milijonov parametrov –, a bere vseh 24 uradnih jezikov Evropske unije in se uči na grafičnih karticah, narejenih za igre. Ta prvi del pripoveduje, kako smo prišli do sem; drugi bo sledil, ko se učenje konča.

Avtor: Marcus Weitschat 8 min branja

Točkovna matrika tega, čemur lahko vsak žeton v Helixu posveti pozornost: moder pas za lokalno okno, rumene točke za lasten blok, raztresene oranžne točke za priklic na velike razdalje.

Zakaj studio za igre uči jezikovni model

NETBYTE dela igre, aplikacije in spletne strani. Jezikovni modeli so v takih izdelkih vse pogostejši: kot liki, ki odgovarjajo, kot pomoč, ki razume vprašanje, kot orodja, ki nekaj naredijo. Večina odprtih modelov najprej razmišlja v angleščini; estonščina, irščina ali malteščina pridejo na vrsto šele ob robu. Celotno verigo smo želeli razumeti sami – podatke, tokenizator, arhitekturo, učenje – in ugotoviti, kam v resnici gre denar.

parametrov
320 mio.
uradnih jezikov EU
24
učnih žetonov
6,5 mrd.
za najete GPU-je
≈ 12 $

Helix se je začel kot raziskovalni prototip. Vse, kar sledi, je odločitev, ki ga je oblikovala, vsaka podprta z meritvijo – in napake, ki so nam vzele največ časa.

Štiri ideje, preživela je ena

Prototip je ciljal na štiri znane šibkosti današnjih generatorjev besedila. Piše v blokih po 16 žetonov namesto po enega, skupno jedro plasti lahko prehodi večkrat, za vsak blok napove strnjen »načrt« in poceni lokalno pozornost združuje z linearno pozornostjo za velike razdalje.

Pisanje v blokih je delovalo takoj: majhen testni model je 64 žetonov napisal v 13 prehodih skozi mrežo, kjer običajen model potrebuje en prehod na žeton – približno petino dela. Preostale tri ideje so padle na zahtevnejšem preizkusu. Sestavili smo naloge, v katerih je odgovor daleč zunaj lokalnega okna, zato mora model pogledati nazaj čez celotno besedilo.

Slika 1 Priklic na velike razdalje Delež pravilnih odgovorov pri nalogi priklica, katere namig leži zunaj lokalnega okna. Majhen referenčni model, enak proračun za vsako različico.
  1. Samo lokalno okno 23,1 %
  2. + linearna pozornost, načrt in zanke 23,1 %
  3. + 2 natančni globalni glavi 49,4 %
  4. Polna pozornost (kontrola) 49,0 %
Prikaži podatke
RazličicaPravilno
Samo lokalno okno23,1 %
+ linearna pozornost, načrt in zanke23,1 %
+ 2 natančni globalni glavi49,4 %
Polna pozornost (kontrola)49,0 %
Naključje (25 %)25,0 %

Rešila jih je le natančna pozornost čez vso razdaljo. Linearna pozornost, načrt in zanke so ostali na ravni naključja; optimizator je linearni spomin celo zmanjšal na razpolovni čas, krajši od enega žetona. Dve natančni globalni glavi sta zadostovali, da sta se izenačili s polno pozornostjo.

Končni model zato v vsaki plasti obdrži osem lokalnih glav z oknom 256 žetonov in v vsaki drugi plasti doda dve natančni globalni glavi; vmesne plasti ohranijo dve glavi linearne pozornosti z vrati. Načrt in zanke so izklopljeni. Še vedno so v kodi in preizkušeni, a na resničnem besedilu niso upravičili svoje cene.

Slika 2 Kam gleda vsaka plast Deset glav pozornosti na plast, dvanajst plasti. Vsaka plast ima osem lokalnih glav; lihe plasti dodajo dve natančni globalni glavi, sode pa dve glavi linearne pozornosti z vrati.
  • Lokalna, okno 256 žetonov
  • Natančna globalna pozornost
  • Linearna pozornost z vrati
Prikaži podatke
Vrsta glavePlastiGlav na plast
Lokalna, okno 256 žetonov1–128
Natančna globalna pozornost1, 3, 5, 7, 9, 112
Linearna pozornost z vrati2, 4, 6, 8, 10, 122

Meriti, ne domnevati

Vsak trik za učenje smo preizkusili na modelu z 94 milijoni parametrov z enakim proračunom na zagon: 29,5 milijona žetonov, isto seme, isti vrstni red podatkov. Dva zagona iste konfiguracije se razlikujeta za ±0,03, zato je vse manjše šum.

Slika 3 Kaj je pomagalo – in kaj je bil šum Sprememba validacijske izgube glede na osnovo z AdamW. Model s 94 mio. parametri, 29,5 milijona žetonov na zagon. Pod ničlo je bolje; siv pas je šum med zagoni (±0,03).
  1. Muon + urnik WSD −0,587
  2. Optimizator Muon −0,347
  3. Globlja, ožja mreža −0,099
  4. Urnik WSD −0,080
  5. Ostanek vrednosti −0,007
  6. z-loss +0,029
  7. Pozornost z združenimi poizvedbami +0,088
Prikaži podatke
SpremembaΔ izgube (nati)
Muon + urnik WSD−0,587
Optimizator Muon−0,347
Globlja, ožja mreža−0,099
Urnik WSD−0,080
Ostanek vrednosti−0,007
z-loss+0,029
Pozornost z združenimi poizvedbami+0,088

Optimizator Muon je bil edini velik vzvod in se dobro dopolnjuje z urnikom stopnje učenja warmup-stable-decay. Vrnitev vdelave in izhodne plasti na AdamW, kot priporočajo avtorji Muona, je prinesla še 0,12 in učenje pospešila za 5 %. Kombinacije se ne seštevajo kar tako: globlja in ožja mreža je pomagala z AdamW in škodila z Muonom. Zato je vsaka obetavna kombinacija dobila svoj zagon.

24 jezikov, 6,5 milijarde žetonov

Helix bere spletno besedilo iz FineWeb-Edu za angleščino in iz FineWeb-2 za preostalih 23 jezikov – pri večjih iz njegove zgornje desetine, izbrane po kakovosti. Koda, matematika in majhen sintetični tok klepetov dopolnjujejo mešanico. Angleščina dobi tretjino. Drugi jeziki so uteženi po količini razpoložljivega besedila, zglajeni tako, da irščina in malteščina ne utoneta, in noben vir se ne ponovi več kot štirikrat – do te meje je ponavljanje skoraj tako dobro kot sveži podatki.

Slika 4 Kaj bere Helix Delež učnih žetonov po skupinah virov. Korpus s 6,5 milijarde žetonov v 34 tokovih; koda in označevanje zajemata Python, JavaScript, C, C++, Javo, HTML, CSS in Markdown.
  1. Preostalih 23 jezikov EU 51,6 %
  2. Angleščina 33,0 %
  3. Koda in označevanje 10,0 %
  4. Matematika 3,0 %
  5. Sintetični klepeti in orodja 2,4 %
Prikaži podatke
VirDelež
Preostalih 23 jezikov EU51,6 %
Angleščina33,0 %
Koda in označevanje10,0 %
Matematika3,0 %
Sintetični klepeti in orodja2,4 %

Tok klepetov je ekstraktiven: odgovori so prevzeti iz resničnih odstavkov, rezultati orodij pa izračunani, ne izmišljeni. Uči obliko, ne znanja. Tokenizator je bajtni BPE s 64.000 vnosi; za vsak jezik v latinici v en žeton spravi od 3,3 do 4 bajte besedila.

Tri napake, vredne pripovedi

  • Model, ki je bral odgovor. V eni veji kode so globalne glave prezrle vzročno masko in videle prihodnje žetone. Izguba je v 75 korakih padla s 6,85 na 1,71 in 16-urni zagon je bil ničvreden. Sumljivo dobra izguba je poročilo o napaki; prav to zdaj varuje regresijski test.
  • Znaki niso bajti. Stiskanje se je štelo v znakih namesto v bajtih UTF-8. To si je izmislilo »šibkost« kitajščine, grščina in bolgarščina pa sta bili videti skoraj dvakrat slabši, kot v resnici sta.
  • Dokumenti, razlomljeni ob vsaki prazni vrstici. Kodirnik je dokumente delil ob vsaki prazni vrstici – prazne vrstice pa so sredi skoraj vsake izvorne datoteke. Izgubili smo do 35 % besedila s kodo in matematiko. Popravili smo ločilo in 31. oktobra na novo zgradili celoten korpus; trajalo je 2 uri in 12 minut.

Od mize do najetega stroja

Prvih 1,66 milijarde žetonov je teklo na eni sami AMD Radeon RX 7800 XT. Uporabno sta to naredili dve stvari: zastavica jedra pozornosti, ki je privzeto izklopljena – brez nje je bila pozornost 12-krat počasnejša –, in prevajanje vsake plasti s torch.compile. Pri mediani 11.800 žetonov na sekundo bi preostanek trajal še skoraj pet dni.

Zato smo napisali avtopilota. GPU-je najame na Vast.ai, naloži kodo, korpus in kontrolno točko, uči, vsake tri ure prinese kontrolno točko domov in se ustavi, preden zmanjka dobroimetja. Drugega novembra je šel skozi tri stroje, ki jih ponudniki nikoli niso zagnali, nato pa se ustalil pri dveh RTX 4070 Ti Super v Nemčiji za 0,363 $ na uro. Nalaganje 15,4 GiB je trajalo 40 minut.

Slika 5 Hitrost učenja Žetoni na sekundo za model s 320 mio. parametri pri dolžini zaporedja 1024 (mediana). Lokalno: ena AMD Radeon RX 7800 XT. Najem: dve NVIDIA RTX 4070 Ti Super.
  1. Lokalno, pred optimizacijo 8319
  2. Lokalno, prevedeno 11.830
  3. Najem, 2 GPU-ja 41.367
Prikaži podatke
PostavitevŽetoni/s
Lokalno, pred optimizacijo8319
Lokalno, prevedeno11.830
Najem, 2 GPU-ja41.367

41.400 žetonov na sekundo je 3,5-kratnik mize. Najeti del – 4,8 milijarde žetonov v približno 33 urah – stane okoli 12 $.

Kje je Helix danes

Slika 6 Dosedanje učenje Izguba v natih na žeton, nižje je bolje. Zadržano: besedilo, na katerem se model nikoli ne uči. Učenje: povprečje na vsakih 50 milijonov žetonov; med ohlajanjem pada hitreje, deloma zato, ker se spremeni mešanica podatkov. Os se konča pri načrtovanih 6,5 milijarde žetonov.
  • Zadržano
  • Učenje

Izguba (nati na žeton)

Prebrani žetoni v milijardah

Prikaži podatke
Prebrani žetoni v milijardahZadržanoUčenje
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

Na dan 3. novembra 2026 je Helix prebral 5,35 od svojih 6,5 milijarde žetonov. Od 5,2 milijarde teče faza ohlajanja: stopnja učenja pada, mešanica pa se premika k matematiki, kodi in klepetu. Na zadržanem besedilu iz vseh tokov je izguba 3,12 nata na žeton.

Slika 7 Kje je posamezen jezik Biti na bajt na zadržanem besedilu po 5,35 milijarde žetonov, nižje je bolje. Grščina in bolgarščina sta videti boljši deloma zato, ker vsaka njuna črka zasede dva bajta.
  1. grščina 0,721
  2. bolgarščina 0,844
  3. francoščina 1,065
  4. angleščina 1,086
  5. španščina 1,135
  6. portugalščina 1,219
  7. nemščina 1,257
  8. nizozemščina 1,268
  9. italijanščina 1,277
  10. poljščina 1,355
  11. danščina 1,364
  12. madžarščina 1,407
  13. slovaščina 1,412
  14. malteščina 1,415
  15. romunščina 1,416
  16. švedščina 1,418
  17. irščina 1,422
  18. slovenščina 1,431
  19. češčina 1,444
  20. litovščina 1,450
  21. latvijščina 1,451
  22. hrvaščina 1,507
  23. finščina 1,508
  24. estonščina 1,727
Prikaži podatke
JezikBiti na bajt
grščina0,721
bolgarščina0,844
francoščina1,065
angleščina1,086
španščina1,135
portugalščina1,219
nemščina1,257
nizozemščina1,268
italijanščina1,277
poljščina1,355
danščina1,364
madžarščina1,407
slovaščina1,412
malteščina1,415
romunščina1,416
švedščina1,418
irščina1,422
slovenščina1,431
češčina1,444
litovščina1,450
latvijščina1,451
hrvaščina1,507
finščina1,508
estonščina1,727

Kaj to pomeni v praksi, najbolje pokaže neurejen vzorec iz kontrolne točke pri približno 4,9 milijarde žetonov. Začetek je naš, preostanek je Helixov:

Vzorec v angleščini, kontrolna točka pri 4,9 milijarde žetonov, neurejen

Začetek besedila: The history of the printing press begins in the fifteenth century, when Johannes Gutenberg introduced movable type to Europe. Before that, books Izhod modela: 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.

Slovnica, izbira besed in tema držijo; dejstva ne. Približno to lahko pričakujemo od 320 milijonov parametrov in 6,5 milijarde žetonov: tekoč model, ki si izmišljuje.

Kaj sledi

Predučenje se konča v nekaj urah. Nato sledijo faza dolgega konteksta s knjigami iz Project Gutenberg in pravnimi besedili EU iz EUR-Lex, fino uglaševanje za pogovor in uporabo orodij ter majhen osnutni model, ki pospeši generiranje.

Nazaj na vse prispevke

Naslednji korak

Kaj naj nastane naslednje?

Povejte nam o svoji igri, aplikaciji, spletni strani ali projektu z umetno inteligenco. Za začetek zadostuje kratko sporočilo.