microGPT-C

Het betreft een transformer op karakter-niveau met forward pass, backprop, Adam en sampling, geschreven in één enkel C-bestand met niets anders dan libc. Het model traint in een paar seconden op ongeveer 32.000 namen en genereert vervolgens nieuwe namen.

Bouwen en uitvoeren

Gebruik het volgende commando: make run

Of voer het direct uit op elk corpus met één item per regel: ./microgpt data/names.txt

Het project kan gebouwd worden op macOS, Linux en Windows (MSYS2), op ARM64 met NEON en x86-64 met AVX2. De Makefile selecteert automatisch de juiste vlaggen voor de host.

Voorbeeld van uitvoer

step 5000 / 20000 | loss 2.6036  (avg 2.2940)
step 10000 / 20000 | loss 1.9639  (avg 2.2564)
step 15000 / 20000 | loss 2.7007  (avg 2.2151)
step 20000 / 20000 | loss 2.3463  (avg 2.2201)

inference
sample  1: kayley
sample  2: maria
sample  3: arana
sample  4: shayan
sample  5: jayden
sample  6: saria
sample  7: kaylen
sample  8: amari
sample  9: alina
sample 10: mailyn

c fp32+NEON       10168430 tok/sec

Opmerkingen

Het model heeft 4192 parameters en generaliseert in plaats van te memoriseren. Getraind op 20.000 van de 32.033 namen, scoort het 2,2054 nats per karakter op deze namen en 2,2039 op de 12.033 namen die het nooit heeft gezien. Hiermee verslaat het een geïnterpoleerd trigram-model dat bijna vijf keer zoveel parameters heeft.

Technische implementatie

Training en inference maken gebruik van aparte forward passes:

  • gpt_forward slaat activaties op voor backprop.
  • gptforwardinfer is een gespecialiseerd pad voor een enkel token, waarvan de logits overeenkomen tot op de afronding van fp32.

In docs/PERFORMANCE.md wordt beschreven hoe dit pad werkt en wat de beperkingen zijn.

Prestaties

MachineBackendTok/sec
Apple M5 ProNEON10.168.430
AMD Ryzen 5 5600HAVX26.927.775