EUGEN 160M — mijn codemodel, tik om het te proberen
EUGEN 160M
EUGEN 160M is een klein taalmodel dat helpt bij het schrijven van code: het vult code aan terwijl je typt (autocomplete) en stelt de volgende regel voor. Het is ook getraind om code midden in een bestand aan te vullen (fill-in-the-middle) en is gespecialiseerd in het vertalen van Python naar C++. Het heeft 164,5 miljoen parameters en wordt vanaf nul getraind op één NVIDIA RTX PRO 6000-kaart (96 GB). Door het kleine formaat genereert het ook op een gewone processor snel, tot ongeveer 270 tokens per seconde. Het model is te proberen in de terminal: klik op de knop hieronder.
Eerste resultaten
De training staat nog aan het begin, en de resultaten geven nu al reden tot optimisme. Op HumanEval, waarin het model een Python-functie schrijft op basis van een beschrijving, zijn de best gemeten resultaten van EUGEN 18,9% van de taken bij één poging en 32,9% bij tien. Bij geverifieerde vertaling van Python naar C++ – compiler en tests kiezen een werkende versie uit meerdere voorstellen van het model – compileren 77 van de 100 programma's en slagen er 53 voor alle tests. De stack van het model zorgt ervoor dat alleen vertaalvoorstellen die deze controles doorstaan de gebruiker bereiken. De grafiek zet de resultaten van EUGEN af tegen modellen tot 0,5 miljard parameters.
Modelarchitectuur
EUGEN is een decoder-only transformer met 36 lagen, getraind met MuonH, een variant van Muon die de norm van de gewichtsmatrices constant houdt. Het model zit in de basistraining. Ongeveer 0,35% van de data is eigen data: STaR-oplossingen die EUGEN zelf genereerde en die de tests doorstonden, en vertaalparen tussen Python en C++, Java, Go en Rust, gecontroleerd met compilatie en tests.
Sparse FFN, Triton-kernel
Ik werk ook aan het optimaliseren en versnellen van de training met een sparse FFN en heb daarvoor een eigen GPU-kernel ontwikkeld, geschreven in Triton. In een model van 306 miljoen parameters (FFN 4.096) haalde de geoptimaliseerde kernel een 36% hogere doorvoer dan zijn eerste versie. Onze eerste tests laten zien dat met een groter model en een FFN van 8.192 de sparse kernel uit het EUGEN-project een versnelling van meer dan 40% ten opzichte van een dense model kan opleveren. Of een sparse getraind en aan het eind verdicht model gelijk komt met een dense model, is nog open, maar de eerste resultaten brengen me ertoe het volgende, grotere model zo te trainen.
TetherGate is een mechanisme dat voorkomt dat geleerde gates dichtgaan. Een gate die een residuele tak schaalt – een expert, een adapter of een nieuw toegevoegde laag – wordt door de optimizer vaak geleidelijk naar nul gedrukt, waarna de tak niets meer aan het model bijdraagt. TetherGate combineert een ondergrens die afhangt van de trainingsstap met een veer die de drempel van de gate naar een bewegend anker trekt, berekend uit het actuele stuursignaal. Dat signaal kan elke statistiek zijn. Ik heb het mechanisme experimenteel getest in mijn eigen modellen.
Ik doe voortdurend eigen onderzoek naar AI. Dat gaat onder meer over signalen uit het netwerk zelf: de activaties van de gates in FFN-lagen en de daarop gebaseerde Gate Sparseness Index (GSI), die volgens voorlopige resultaten kan helpen om nog vóór het antwoord vragen waarop het model het antwoord weet te onderscheiden van vragen waarbij het begint te confabuleren. Latere analyse liet zien dat een deel van het effect voortkomt uit de lengte van de vragen – na correctie daarvoor blijft het signaal bij het Llama-model overeind, de andere resultaten moeten opnieuw worden gemeten. Ik heb geen formele opleiding in dit vakgebied, maar ik probeer zo professioneel mogelijk te werken: met openbaar gemaakte data, herhaalbare metingen en duidelijk benoemde beperkingen.
Hoe ik met AI werk
Ik schrijf geen code met de hand. Ik ontwerp de taken en leid teams van AI-agents, en elk resultaat controleer ik. Een team werkt in drie fasen: research, uitvoering en verificatie. Twee onafhankelijke controleurs houden toezicht op de uitvoering: de ene bewaakt de reikwijdte van de taak, de andere de technische kwaliteit.
Ik leid twee à drie van zulke teams tegelijk, dus als één taak mijn aandacht nodig heeft, gaan de andere gewoon door. Als een model vastloopt, leg ik het probleem voor aan een model van een ander bedrijf.
Ik besteed grote brokken werk uit, maar alleen tot de grens waarop ik ze nog grondig kan controleren, en daarna reserveer ik tijd voor correcties. Of iets klaar is, beslist een test of een meting, niet de bewering van het model.