NETBYTE
Start et projekt

Forskning

Helix, del 1: vi træner en europæisk sprogmodel

Vi træner vores egen sprogmodel. Den er lille – 320 millioner parametre – men den læser alle 24 officielle sprog i Den Europæiske Union, og den træner på grafikkort bygget til spil. Første del fortæller, hvordan vi kom hertil; anden del følger, når træningen er færdig.

Af Marcus Weitschat 8 min. læsning

Punktmatrix over, hvad hvert token i Helix kan rette opmærksomheden mod: et blåt bånd for det lokale vindue, gule prikker for sin egen blok og spredte orange prikker for genkaldelse over lange afstande.

Hvorfor et spilstudie træner en sprogmodel

NETBYTE laver spil, apps og websites. Sprogmodeller sidder oftere og oftere inde i den slags produkter: som figurer, der svarer igen, som hjælp, der forstår et spørgsmål, som værktøjer, der gør noget. De fleste åbne modeller tænker engelsk først; estisk, irsk eller maltesisk kommer i periferien. Vi ville forstå hele kæden selv – data, tokenizer, arkitektur, træning – og finde ud af, hvor pengene egentlig går hen.

parametre
320 mio.
officielle EU-sprog
24
træningstokens
6,5 mia.
for de lejede GPU’er
≈ 12 $

Helix begyndte som en forskningsprototype. Alt herunder er en beslutning, der formede den, hver især bakket op af en måling – plus de fejl, der kostede os mest tid.

Fire idéer, én overlevede

Prototypen gik efter fire kendte svagheder ved nutidens tekstgeneratorer. Den skriver i blokke på 16 tokens i stedet for ét token ad gangen, den kan køre en fælles kerne af lag flere gange, den forudsiger en kompakt „plan“ for hver blok, og den blander billig lokal attention med lineær attention over lange afstande.

Blokskrivningen virkede med det samme: En lille testmodel skrev 64 tokens på 13 gennemløb af netværket, hvor en almindelig model skal bruge ét gennemløb pr. token – omkring en femtedel af arbejdet. De tre andre idéer faldt på en hårdere test. Vi byggede opgaver, hvor svaret ligger langt uden for det lokale vindue, så modellen må se tilbage gennem hele teksten.

Figur 1 Genkaldelse over lange afstande Andel korrekte svar i en genkaldelsesopgave, hvor ledetråden ligger uden for det lokale vindue. Lille referencemodel, samme budget for hver variant.
  1. Kun lokalt vindue 23,1 %
  2. + lineær attention, plan og løkker 23,1 %
  3. + 2 præcise globale hoveder 49,4 %
  4. Fuld attention (kontrol) 49,0 %
Vis data
VariantKorrekt
Kun lokalt vindue23,1 %
+ lineær attention, plan og løkker23,1 %
+ 2 præcise globale hoveder49,4 %
Fuld attention (kontrol)49,0 %
Tilfældighed (25 %)25,0 %

Kun præcis attention over hele afstanden løste dem. Lineær attention, plan og løkker blev på tilfældighedsniveau; optimeringsalgoritmen havde endda skruet den lineære hukommelse ned til en halveringstid på under ét token. To præcise globale hoveder var nok til at matche fuld attention.

Den endelige model beholder derfor otte lokale hoveder med et vindue på 256 tokens i hvert lag og tilføjer to præcise globale hoveder i hvert andet lag; lagene imellem beholder to hoveder med gated lineær attention. Plan og løkker er slået fra. De ligger stadig i koden og er testet, men på rigtig tekst tjente de ikke deres pris hjem.

Figur 2 Hvad hvert lag kigger på Ti attention-hoveder pr. lag, tolv lag. Hvert lag har otte lokale hoveder; ulige lag tilføjer to præcise globale hoveder, lige lag to hoveder med gated lineær attention.
  • Lokal, vindue på 256 tokens
  • Præcis global attention
  • Gated lineær attention
Vis data
HovedtypeLagHoveder pr. lag
Lokal, vindue på 256 tokens1–128
Præcis global attention1, 3, 5, 7, 9, 112
Gated lineær attention2, 4, 6, 8, 10, 122

Mål, gæt ikke

Vi testede hvert træningstrick på en model med 94 millioner parametre og samme budget pr. kørsel: 29,5 millioner tokens, samme seed, samme datarækkefølge. To kørsler af samme konfiguration afviger med ±0,03, så alt mindre er støj.

Figur 3 Hvad der hjalp – og hvad der var støj Ændring i valideringstab i forhold til AdamW-baseline. Model med 94 mio. parametre, 29,5 millioner tokens pr. kørsel. Under nul er bedre; det grå bånd er støjen mellem kørsler (±0,03).
  1. Muon + WSD-plan -0,587
  2. Muon-optimering -0,347
  3. Dybere, smallere netværk -0,099
  4. WSD-plan -0,080
  5. Value-residual -0,007
  6. z-loss +0,029
  7. Grouped-query attention +0,088
Vis data
ÆndringΔ tab (nats)
Muon + WSD-plan-0,587
Muon-optimering-0,347
Dybere, smallere netværk-0,099
WSD-plan-0,080
Value-residual-0,007
z-loss+0,029
Grouped-query attention+0,088

Muon-optimeringen var den eneste store løftestang, og den kan kombineres med en warmup-stable-decay-plan for læringsraten. At flytte embedding og outputlag tilbage til AdamW, som Muon-forfatterne anbefaler, gav yderligere 0,12 og gjorde træningen 5 % hurtigere. Kombinationer lægger sig ikke bare sammen: Et dybere, smallere netværk hjalp under AdamW og skadede under Muon. Derfor fik hver lovende kombination sin egen kørsel.

24 sprog, 6,5 milliarder tokens

Helix læser webtekst fra FineWeb-Edu til engelsk og fra FineWeb-2 til de øvrige 23 sprog – for de største fra dens kvalitetsfiltrerede øverste tiendedel. Kode, matematik og en lille syntetisk chatstrøm fuldender blandingen. Engelsk får en tredjedel. De andre sprog vægtes efter, hvor meget tekst der findes, udglattet så irsk og maltesisk ikke drukner, og ingen kilde gentages mere end fire gange – indtil da er gentagelse næsten lige så godt som friske data.

Figur 4 Hvad Helix læser Andel af træningstokens pr. kildegruppe. Korpus på 6,5 milliarder tokens i 34 strømme; kode og opmærkning omfatter Python, JavaScript, C, C++, Java, HTML, CSS og Markdown.
  1. 23 andre EU-sprog 51,6 %
  2. Engelsk 33,0 %
  3. Kode og opmærkning 10,0 %
  4. Matematik 3,0 %
  5. Syntetisk chat og værktøjer 2,4 %
Vis data
KildeAndel
23 andre EU-sprog51,6 %
Engelsk33,0 %
Kode og opmærkning10,0 %
Matematik3,0 %
Syntetisk chat og værktøjer2,4 %

Chatstrømmen er ekstraktiv: Svarene er kopieret fra rigtige afsnit, og værktøjsresultater beregnes i stedet for at blive opfundet. Den lærer format, ikke viden. Tokenizeren er en byte-level BPE med 64.000 poster; den pakker mellem 3,3 og 4 bytes tekst i ét token for hvert sprog med latinsk skrift.

Tre fejl, der er værd at fortælle om

  • Modellen, der læste svaret. I én kodesti ignorerede de globale hoveder den kausale maske og kunne se fremtidige tokens. Tabet faldt fra 6,85 til 1,71 på 75 skridt, og en kørsel på 16 timer var værdiløs. Et mistænkeligt godt tab er en fejlrapport; nu vogter en regressionstest præcis det.
  • Tegn er ikke bytes. Komprimeringen blev talt i tegn i stedet for UTF-8-bytes. Det opfandt en „svaghed“ i kinesisk og fik græsk og bulgarsk til at se næsten dobbelt så dårlige ud, som de er.
  • Dokumenter brudt ved hver tom linje. Encoderen delte dokumenter ved hver tom linje – og tomme linjer står midt i næsten enhver kildefil. Op til 35 % af kode- og matematikteksten gik tabt. Vi rettede separatoren og byggede hele korpusset om den 31. oktober; det tog 2 timer og 12 minutter.

Fra skrivebordet til en lejet maskine

De første 1,66 milliarder tokens kørte på et enkelt AMD Radeon RX 7800 XT. To ting gjorde det brugbart: et kernel-flag til attention, der som standard er slået fra – uden det var attention 12 gange langsommere – og kompilering af hvert lag med torch.compile. Med en median på 11.800 tokens i sekundet ville resten have taget næsten fem dage mere.

Så vi skrev en autopilot. Den lejer GPU’er på Vast.ai, uploader kode, korpus og checkpoint, træner, henter et checkpoint hjem hver tredje time og stopper, før kreditten slipper op. Den 2. november gik den igennem tre maskiner, som udbyderne aldrig fik startet, og landede så på to RTX 4070 Ti Super i Tyskland for 0,363 $ i timen. Uploaden på 15,4 GiB tog 40 minutter.

Figur 5 Træningshastighed Tokens i sekundet for 320M-modellen ved en sekvenslængde på 1.024 (median). Lokalt: ét AMD Radeon RX 7800 XT. Lejet: to NVIDIA RTX 4070 Ti Super.
  1. Lokalt, før optimering 8.319
  2. Lokalt, kompileret 11.830
  3. Lejet, 2 GPU’er 41.367
Vis data
OpsætningTokens/s
Lokalt, før optimering8.319
Lokalt, kompileret11.830
Lejet, 2 GPU’er41.367

41.400 tokens i sekundet er 3,5 gange skrivebordet. Den lejede del – 4,8 milliarder tokens på cirka 33 timer – koster omkring 12 $.

Hvor Helix står i dag

Figur 6 Træningen indtil nu Tab i nats pr. token, lavere er bedre. Tilbageholdt: tekst, modellen aldrig træner på. Træning: gennemsnit pr. 50 millioner tokens; i nedkølingen falder det hurtigere, delvis fordi datablandingen ændrer sig. Aksen slutter ved de planlagte 6,5 milliarder tokens.
  • Tilbageholdt
  • Træning

Tab (nats pr. token)

Læste tokens i milliarder

Vis data
Læste tokens i milliarderTilbageholdtTræning
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

Pr. 3. november 2026 har Helix læst 5,35 af sine 6,5 milliarder tokens. Siden 5,2 milliarder har den været i nedkølingsfasen: Læringsraten falder, og blandingen skifter mod matematik, kode og chat. På tilbageholdt tekst fra alle strømme ligger den på 3,12 nats pr. token.

Figur 7 Hvor hvert sprog står Bits pr. byte på tilbageholdt tekst efter 5,35 milliarder tokens, lavere er bedre. Græsk og bulgarsk ser delvis bedre ud, fordi hvert af deres bogstaver fylder to bytes.
  1. græsk 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. rumænsk 1,416
  16. svensk 1,418
  17. irsk 1,422
  18. slovensk 1,431
  19. tjekkisk 1,444
  20. litauisk 1,450
  21. lettisk 1,451
  22. kroatisk 1,507
  23. finsk 1,508
  24. estisk 1,727
Vis data
SprogBits pr. byte
græsk0,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
rumænsk1,416
svensk1,418
irsk1,422
slovensk1,431
tjekkisk1,444
litauisk1,450
lettisk1,451
kroatisk1,507
finsk1,508
estisk1,727

Hvad det betyder i praksis, ses bedst i en uredigeret prøve fra et checkpoint ved cirka 4,9 milliarder tokens. Begyndelsen er vores, resten er Helix’:

Prøve på engelsk, checkpoint ved 4,9 milliarder tokens, uredigeret

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

Grammatik, ordvalg og emne holder; fakta gør ikke. Det er cirka, hvad man kan forvente af 320 millioner parametre og 6,5 milliarder tokens: en flydende model, der finder på.

Hvad der kommer nu

Fortræningen slutter om få timer. Derefter følger en fase med lang kontekst med bøger fra Project Gutenberg og EU-retstekster fra EUR-Lex, finjustering til samtale og brug af værktøjer og en lille kladdemodel, der gør genereringen hurtigere.

Tilbage til alle indlæg

Næste skridt

Hvad skal der skabes næste gang?

Fortæl os om dit spil, din app, dit website eller dit AI-projekt. En kort besked er nok til at komme i gang.