LLM da 29M parametri su microcontroller ESP32: l'inferenza locale senza Wi-Fi
Un ricercatore ha fatto girare un modello linguistico di 28,9 milioni di parametri su un ESP32-S3, il microcontroller che costa circa 8 dollari. Genera testo a circa 9,5 token al secondo, interamente sul chip, senza connessione a nessun server.
Il record precedente su un chip di questa categoria era 260 mila parametri. Il salto, cento volte, viene da un’idea presa in prestito dai modelli Gemma di Google: la maggior parte dei parametri di un LLM sta in una tabella di embedding che il modello legge, non calcola. Se la lasci nella memoria flash lenta del chip e tiri su solo le poche righe che servono per ogni token (circa 450 byte), il modello “grande” costa quasi nulla in RAM.
Come raccontavamo il 20 luglio con i LLM a 1 bit nel browser, l’inferenza locale sta scendendo lungo la catena dei dispositivi. Dal Mac al browser, ora al microcontroller da 8 dollari senza Wi-Fi.
Per chi costruisce su hardware vincolato o fa fai-da-te offline, il segnale è che la soglia di un agente che funziona sul dispositivo si sta abbassando. Questo modello specifico sa solo scrivere storie brevi (è addestrato su TinyStories), non risponde a domande né segue istruzioni. Ma l’architettura, il trucco di memoria che fa stare un modello cento volte più grande su un chip senza espansione, è la parte che conta.
Nel dettaglio
Il problema classico dell’inferenza su microcontroller è la RAM. L’ESP32-S3 ha 512KB di SRAM, la memoria veloce dove il chip fa i calcoli. Un modello linguistico, anche piccolo, normalmente deve stare tutto in quella memoria per essere eseguito. 512KB bastano per circa 260 mila parametri, ed è lì che si era fermato il record precedente su questo tipo di hardware.
Il trucco viene dai modelli Gemma 3n e Gemma 4 di Google, chiamato Per-Layer Embeddings. In un LLM, la maggior parte dei parametri (in questo caso 25 milioni su 28,9 totali) forma una tabella di embedding: il vocabolario che il modello consulta per trasformare parole in numeri e viceversa. Il modello legge da questa tabella, ma non ci fa calcoli pesanti. Quindi puoi lasciarla nella memoria flash del chip, lenta ma capiente (16MB), e caricare in SRAM solo le poche righe che servono per il token corrente: circa 450 byte per step, sei righe della tabella.
La parte che fa il ragionamento vero, il nucleo da 3,9 milioni di parametri, sta in SRAM. La tabella da 25 milioni vive in flash e viene campionata un pezzetto alla volta. Il risultato è un modello da 14,9MB a 4 bit che genera testo a 9,5 token al secondo, end-to-end, su un chip che consuma una frazione di watt.
Il modello è addestrato su TinyStories, un dataset di storie brevi e semplici pensato per modelli minuscoli. Scrive frasi coerenti sul genere “il cane corre nel parco”, ma non risponde a domande, non segue istruzioni, non sa fatti. Il limite non sta nella memoria, sta nella parte di modello che fa il ragionamento, e il trucco della memoria non lo cambia. Il progetto è onesto su questo punto: l’interesse sta nell’architettura, non in ciò che il modello sa dire.
Cosa cambia per chi legge? Fino a ieri, “inferenza locale” significava un laptop, o un browser con WebGPU. Adesso la soglia scende a un chip da 8 dollari con 512KB di RAM e nessuna connessione di rete. Per chi progetta dispositivi embedded, sensori con un po’ di logica, interfacce vocali per prototipi offline, l’architettura dimostra che un modello linguistico può stare dentro il dispositivo stesso. Niente cloud, niente latenza di rete, niente chiave API.
Resta aperto quanto sia replicabile su compiti utili. Il repo include firmware, wiring e istruzioni di flashing, più il codice di training e quantizzazione in Python. Ma il salto da “scrive storie” a “segue istruzioni” richiede un modello più capace. E un modello più capace richiede più parametri attivi in SRAM, il che riporta al collo di bottiglia originale. Il trucco della memoria espande la tabella di embedding, non il cervello.