28,9 millioner parametere kjører på en ESP32 med 512 KB SRAM
onsdag 5. august · KI-generert · Kilde: GitHub (slvDev/esp32-ai)
Flytt 25 av 28,9 millioner parametere til flash, og en språkmodell får plass på en mikrokontroller med 512 KB SRAM.
Prosjektet esp32-ai på GitHub setter to tall opp mot hverandre: 28,9 millioner parametere mot 512 KB SRAM. Modellen genererer tekst direkte på en ESP32-S3 uten å sende noe til en server, og skriver 9,88 tokens i sekundet ut på en liten skjerm koblet til brikken. Regnetiden er 94,9 millisekunder per token.
Løsningen ligger i hvor parameterne bor. 25 av de 28,9 millionene ligger i en oppslagstabell som modellen leser fra i stedet for å regne på, og den tabellen blir liggende i treg flash. Per token hentes rundt seks rader, omtrent 450 byte. Aktiveringer og norm-vekter, som berøres mange ganger per token, får plass i SRAM, mens den tette kjernen og output-hodet leses én gang per posisjon fra 8 MB PSRAM. Ideen heter Per-Layer Embeddings og kommer fra Googles Gemma 3n, her lagt på minnehierarkiet i en mikrokontroller i stedet for en telefon eller en GPU.
Repoet har to ferdigtrente modeller: TinyStories for historiegenerering og Barista for spørsmål om espresso. Brikken holder én av gangen, så utrulling erstatter den som allerede ligger der. TinyStories-modellen skriver korte, enkle historier som stort sett henger sammen, men den svarer ikke på spørsmål, følger ikke instruksjoner, skriver ikke kode og kan ingen fakta. Begrensningen sitter i den lille delen av modellen som faktisk resonnerer, og minnetrikset endrer ikke på det.
Verdien for deg som bygger ligger derfor i arkitekturen, ikke i hva 28,9 millioner parametere har å si. Datasettet TinyStories kommer fra Ronen Eldan og Yuanzhi Li ved Microsoft Research, og treningsoppsettet følger Andrej Karpathys llama2.c. Både treningskoden, ablasjonene og kvantiseringen som reproduserer de publiserte tallene ligger i repoet.
Hva bør du gjøre?
- Hent en av modellene med scripts/fetch_model.sh. Skriptet sjekker SHA-256 og byte-størrelse mot verdier som er låst i skriptet, kryssjekker utgivelsens egen metadata.json mot de samme verdiene, og installerer ingenting hvis en kontroll feiler.
- Kjør scripts/deploy.sh for å generere headere, kompilere og flashe. Det skriptet går aldri på nett, så nedlasting og utrulling er to adskilte operasjoner mot to ulike angrepsflater.
- Les RESULTS.md før du bygger videre på oppsettet. Målingene gjort på selve brikken og ablasjonene ligger der, og den gjenbrukbare arkitekturen ligger i src/.