NETBYTE
Start et prosjekt

Forskning

Helix, del 1: vi trener en europeisk språkmodell

Vi trener vår egen språkmodell. Den er liten – 320 millioner parametere – men den leser alle de 24 offisielle språkene i Den europeiske union, og den trener på skjermkort laget for spill. Denne første delen forteller hvordan vi kom hit; den andre kommer når treningen er ferdig.

Av Marcus Weitschat 8 min lesing

Punktmatrise over hva hvert token i Helix kan rette oppmerksomheten mot: et blått bånd for det lokale vinduet, gule prikker for sin egen blokk og spredte oransje prikker for gjenkalling over lange avstander.

Hvorfor et spillstudio trener en språkmodell

NETBYTE lager spill, apper og nettsteder. Språkmodeller sitter stadig oftere inne i slike produkter: som figurer som svarer, som hjelp som forstår et spørsmål, som verktøy som gjør noe. De fleste åpne modeller tenker engelsk først; estisk, irsk eller maltesisk havner i utkanten. Vi ville forstå hele kjeden selv – data, tokenizer, arkitektur, trening – og finne ut hvor pengene egentlig går.

parametere
320 mill.
offisielle EU-språk
24
treningstokens
6,5 mrd.
for de leide GPU-ene
≈ 12 $

Helix begynte som en forskningsprototype. Alt nedenfor er en beslutning som formet den, hver av dem støttet av en måling – pluss feilene som kostet oss mest tid.

Fire ideer, én overlevde

Prototypen gikk etter fire kjente svakheter ved dagens tekstgeneratorer. Den skriver i blokker på 16 tokens i stedet for ett token om gangen, den kan kjøre en felles kjerne av lag flere ganger, den forutsier en kompakt «plan» for hver blokk, og den blander billig lokal attention med lineær attention over lange avstander.

Blokkskrivingen virket med en gang: En liten testmodell skrev 64 tokens på 13 gjennomløp av nettverket, der en vanlig modell trenger ett gjennomløp per token – omtrent en femdel av arbeidet. De tre andre ideene strøk på en hardere test. Vi bygde oppgaver der svaret ligger langt utenfor det lokale vinduet, slik at modellen må se tilbake gjennom hele teksten.

Figur 1 Gjenkalling over lange avstander Andel riktige svar på en gjenkallingsoppgave der ledetråden ligger utenfor det lokale vinduet. Liten referansemodell, samme budsjett for hver variant.
  1. Bare lokalt vindu 23,1 %
  2. + lineær attention, plan og løkker 23,1 %
  3. + 2 eksakte globale hoder 49,4 %
  4. Full attention (kontroll) 49,0 %
Vis data
VariantRiktig
Bare lokalt vindu23,1 %
+ lineær attention, plan og løkker23,1 %
+ 2 eksakte globale hoder49,4 %
Full attention (kontroll)49,0 %
Tilfeldig (25 %)25,0 %

Bare eksakt attention over hele avstanden løste dem. Lineær attention, plan og løkker ble liggende på tilfeldighetsnivå; optimalisereren hadde til og med skrudd det lineære minnet ned til en halveringstid på under ett token. To eksakte globale hoder var nok til å ta igjen full attention.

Den endelige modellen beholder derfor åtte lokale hoder med et vindu på 256 tokens i hvert lag og legger til to eksakte globale hoder i annethvert lag; lagene imellom beholder to hoder med portstyrt lineær attention. Plan og løkker er slått av. De ligger fortsatt i koden og er testet, men på ekte tekst tjente de ikke inn kostnaden.

Figur 2 Hva hvert lag ser på Ti attention-hoder per lag, tolv lag. Hvert lag har åtte lokale hoder; oddetallslag legger til to eksakte globale hoder, partallslag to hoder med portstyrt lineær attention.
  • Lokal, vindu på 256 tokens
  • Eksakt global attention
  • Portstyrt lineær attention
Vis data
HodetypeLagHoder per lag
Lokal, vindu på 256 tokens1–128
Eksakt global attention1, 3, 5, 7, 9, 112
Portstyrt lineær attention2, 4, 6, 8, 10, 122

Mål, ikke gjett

Vi testet hvert treningstriks på en modell med 94 millioner parametere og samme budsjett per kjøring: 29,5 millioner tokens, samme seed, samme datarekkefølge. To kjøringer av samme konfigurasjon skiller seg med ±0,03, så alt mindre er støy.

Figur 3 Hva som hjalp – og hva som var støy Endring i valideringstap mot AdamW-grunnlinjen. Modell med 94 mill. parametere, 29,5 millioner tokens per kjøring. Under null er bedre; det grå båndet er støyen mellom kjøringer (±0,03).
  1. Muon + WSD-plan −0,587
  2. Muon-optimaliserer −0,347
  3. Dypere, smalere nettverk −0,099
  4. WSD-plan −0,080
  5. Verdiresidual −0,007
  6. z-loss +0,029
  7. Grouped-query attention +0,088
Vis data
EndringΔ tap (nats)
Muon + WSD-plan−0,587
Muon-optimaliserer−0,347
Dypere, smalere nettverk−0,099
WSD-plan−0,080
Verdiresidual−0,007
z-loss+0,029
Grouped-query attention+0,088

Muon-optimalisereren var den eneste store spaken, og den lar seg kombinere med en warmup-stable-decay-plan for læringsraten. Å flytte embedding og utdatalag tilbake til AdamW, slik Muon-forfatterne anbefaler, ga ytterligere 0,12 og gjorde treningen 5 % raskere. Kombinasjoner legges ikke bare sammen: Et dypere, smalere nettverk hjalp under AdamW og skadet under Muon. Derfor fikk hver lovende kombinasjon sin egen kjøring.

24 språk, 6,5 milliarder tokens

Helix leser nettekst fra FineWeb-Edu for engelsk og fra FineWeb-2 for de øvrige 23 språkene – for de største fra dens kvalitetsfiltrerte øverste tidel. Kode, matematikk og en liten syntetisk chattestrøm fullfører blandingen. Engelsk får en tredjedel. De andre språkene vektes etter hvor mye tekst som finnes, utjevnet slik at irsk og maltesisk ikke drukner, og ingen kilde gjentas mer enn fire ganger – fram til da er gjentakelse nesten like bra som ferske data.

Figur 4 Hva Helix leser Andel treningstokens per kildegruppe. Korpus på 6,5 milliarder tokens i 34 strømmer; kode og markering omfatter Python, JavaScript, C, C++, Java, HTML, CSS og Markdown.
  1. 23 andre EU-språk 51,6 %
  2. Engelsk 33,0 %
  3. Kode og markering 10,0 %
  4. Matematikk 3,0 %
  5. Syntetisk chat og verktøy 2,4 %
Vis data
KildeAndel
23 andre EU-språk51,6 %
Engelsk33,0 %
Kode og markering10,0 %
Matematikk3,0 %
Syntetisk chat og verktøy2,4 %

Chattestrømmen er ekstraktiv: Svarene er kopiert fra ekte avsnitt, og verktøyresultater regnes ut i stedet for å bli funnet på. Den lærer bort format, ikke kunnskap. Tokenizeren er en BPE på bytenivå med 64 000 oppføringer; den pakker mellom 3,3 og 4 byte tekst inn i ett token for hvert språk med latinsk skrift.

Tre feil verdt å fortelle om

  • Modellen som leste svaret. I én kodesti ignorerte de globale hodene den kausale masken og kunne se fremtidige tokens. Tapet falt fra 6,85 til 1,71 på 75 steg, og en kjøring på 16 timer var verdiløs. Et mistenkelig godt tap er en feilrapport; nå vokter en regresjonstest akkurat dette.
  • Tegn er ikke byte. Komprimeringen ble talt i tegn i stedet for UTF-8-byte. Det fant opp en «svakhet» i kinesisk og fikk gresk og bulgarsk til å se nesten dobbelt så dårlige ut som de er.
  • Dokumenter brutt ved hver tomme linje. Koderen delte dokumenter ved hver tomme linje – og tomme linjer står midt i nesten hver kildefil. Opptil 35 % av kode- og matematikkteksten gikk tapt. Vi rettet skilletegnet og bygde hele korpuset på nytt 31. oktober; det tok 2 timer og 12 minutter.

Fra skrivebordet til en leid maskin

De første 1,66 milliardene tokens kjørte på ett enkelt AMD Radeon RX 7800 XT. To ting gjorde det brukbart: et kjerneflagg for attention som er slått av som standard – uten det var attention 12 ganger tregere – og kompilering av hvert lag med torch.compile. Med en median på 11 800 tokens i sekundet ville resten ha tatt nesten fem dager til.

Så vi skrev en autopilot. Den leier GPU-er på Vast.ai, laster opp kode, korpus og sjekkpunkt, trener, henter et sjekkpunkt hjem hver tredje time og stopper før kreditten går tom. Den 2. november gikk den gjennom tre maskiner som leverandørene aldri startet, og landet så på to RTX 4070 Ti Super i Tyskland for 0,363 $ i timen. Opplastingen på 15,4 GiB tok 40 minutter.

Figur 5 Treningshastighet Tokens i sekundet for 320M-modellen ved en sekvenslengde på 1 024 (median). Lokalt: ett AMD Radeon RX 7800 XT. Leid: to NVIDIA RTX 4070 Ti Super.
  1. Lokalt, før optimalisering 8 319
  2. Lokalt, kompilert 11 830
  3. Leid, 2 GPU-er 41 367
Vis data
OppsettTokens/s
Lokalt, før optimalisering8 319
Lokalt, kompilert11 830
Leid, 2 GPU-er41 367

41 400 tokens i sekundet er 3,5 ganger skrivebordet. Den leide delen – 4,8 milliarder tokens på rundt 33 timer – koster omkring 12 $.

Hvor Helix står i dag

Figur 6 Treningen så langt Tap i nats per token, lavere er bedre. Tilbakeholdt: tekst modellen aldri trener på. Trening: gjennomsnitt per 50 millioner tokens; i nedkjølingen faller det raskere, delvis fordi datablandingen endres. Aksen slutter ved de planlagte 6,5 milliardene tokens.
  • Tilbakeholdt
  • Trening

Tap (nats per token)

Leste tokens i milliarder

Vis data
Leste tokens i milliarderTilbakeholdtTrening
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

Per 3. november 2026 har Helix lest 5,35 av sine 6,5 milliarder tokens. Siden 5,2 milliarder har den vært i nedkjølingsfasen: Læringsraten synker, og blandingen forskyves mot matematikk, kode og chat. På tilbakeholdt tekst fra alle strømmer ligger den på 3,12 nats per token.

Figur 7 Hvor hvert språk står Bit per byte på tilbakeholdt tekst etter 5,35 milliarder tokens, lavere er bedre. Gresk og bulgarsk ser bedre ut delvis fordi hver av bokstavene deres tar to byte.
  1. gresk 0,721
  2. bulgarsk 0,844
  3. fransk 1,065
  4. engelsk 1,086
  5. spansk 1,135
  6. portugisisk 1,219
  7. tysk 1,257
  8. nederlandsk 1,268
  9. italiensk 1,277
  10. polsk 1,355
  11. dansk 1,364
  12. ungarsk 1,407
  13. slovakisk 1,412
  14. maltesisk 1,415
  15. rumensk 1,416
  16. svensk 1,418
  17. irsk 1,422
  18. slovensk 1,431
  19. tsjekkisk 1,444
  20. litauisk 1,450
  21. latvisk 1,451
  22. kroatisk 1,507
  23. finsk 1,508
  24. estisk 1,727
Vis data
SpråkBit per byte
gresk0,721
bulgarsk0,844
fransk1,065
engelsk1,086
spansk1,135
portugisisk1,219
tysk1,257
nederlandsk1,268
italiensk1,277
polsk1,355
dansk1,364
ungarsk1,407
slovakisk1,412
maltesisk1,415
rumensk1,416
svensk1,418
irsk1,422
slovensk1,431
tsjekkisk1,444
litauisk1,450
latvisk1,451
kroatisk1,507
finsk1,508
estisk1,727

Hva det betyr i praksis, ser man best i en uredigert prøve fra et sjekkpunkt ved omtrent 4,9 milliarder tokens. Begynnelsen er vår, resten er fra Helix:

Prøve på engelsk, sjekkpunkt ved 4,9 milliarder tokens, uredigert

Begynnelse: The history of the printing press begins in the fifteenth century, when Johannes Gutenberg introduced movable type to Europe. Before that, books Modellens tekst: 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.

Grammatikk, ordvalg og emne holder; fakta gjør det ikke. Det er omtrent det man kan vente seg av 320 millioner parametere og 6,5 milliarder tokens: en flytende modell som finner på ting.

Hva som skjer videre

Fortreningen er ferdig om noen timer. Deretter følger en fase med lang kontekst med bøker fra Project Gutenberg og EU-rettstekster fra EUR-Lex, finjustering for samtale og verktøybruk og en liten utkastmodell som gjør genereringen raskere.

Tilbake til alle innlegg

Neste steg

Hva skal skapes neste gang?

Fortell oss om spillet ditt, appen din, nettstedet ditt eller KI-prosjektet ditt. En kort melding er nok for å komme i gang.