microGPT-C is een minimalistische implementatie van een GPT-model, volledig geschreven in de C-programmeertaal met enkel gebruik van libc. Het betreft een transformer op karakter-niveau die zowel training (forward pass, backprop, Adam) als inference ondersteunt.
De belangrijkste kenmerken zijn:
- Eenvoud: De gehele implementatie bevindt zich in één enkel C-bestand.
- Compatibiliteit: Het project is compatibel met macOS, Linux en Windows, en maakt gebruik van hardware-optimalisaties zoals NEON (ARM64) en AVX2 (x86-64).
- Efficiëntie: Met slechts 4192 parameters presteert het model verrassend goed in het generaliseren van namen, waarbij het zelfs grotere trigram-modellen verslaat.
- Prestaties: De implementatie is extreem snel, met snelheden tot ruim 10 miljoen tokens per seconde op high-end hardware zoals de Apple M5 Pro.
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
| Machine | Backend | Tok/sec |
| Apple M5 Pro | NEON | 10.168.430 |
| AMD Ryzen 5 5600H | AVX2 | 6.927.775 |
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
| Machine | Backend | Tok/sec |
| Apple M5 Pro | NEON | 10.168.430 |
| AMD Ryzen 5 5600H | AVX2 | 6.927.775 |