Home / News / Un LLM su microcontrollore da meno di 10 dollari raggiunge quasi 10 token al secondo

Un LLM su microcontrollore da meno di 10 dollari raggiunge quasi 10 token al secondo

Uno sviluppatore è riuscito a far funzionare un piccolo modello linguistico direttamente su un microcontrollore ESP32-S3 con un costo inferiore ai 10 dollari. Grazie a tecniche di quantizzazione, allo spostamento degli embedding nella memoria Flash e all’utilizzo di codice C ottimizzato, il sistema raggiunge circa 9 token al secondo, aprendo nuove possibilità per l’intelligenza artificiale integrata.

Un LLM su microcontrollore da meno di 10 dollari raggiunge quasi 10 token al secondo

Far girare un modello linguistico localmente su notebook, smartphone o mini-PC è ormai una realtà consolidata. Molto più insolito è riuscire a eseguire un LLM direttamente su un microcontrollore dal costo inferiore ai 10 dollari, progettato principalmente per applicazioni IoT, sensori remoti ed elettronica embedded. A dimostrarlo è lo sviluppatore ucraino Slava S, noto online come SlvDev, che ha documentato il progetto su GitHub e presentato i risultati sul canale YouTube Better Stack.

L’esperimento si basa sull’ESP32-S3, un chip dotato di 512 KB di SRAM (secondo le specifiche Espressif) e 8 MB di PSRAM, con versioni che integrano fino a 16 MB di memoria Flash. Si tratta di una quantità di memoria estremamente limitata, inferiore a quella disponibile su molti personal computer degli anni Novanta e lontana dai requisiti dei moderni modelli linguistici.

Il problema principale è l’occupazione in memoria dei pesi del modello. Anche un LLM relativamente piccolo richiede generalmente da uno a quattro byte per parametro, motivo per cui l’inferenza viene normalmente affidata a GPU dotate di decine di gigabyte di memoria.

Per adattarsi ai vincoli dell’ESP32-S3, SlvDev ha scelto TinyStories, un modello sviluppato da Microsoft Research con 28,9 milioni di parametri, circa diecimila volte più piccolo rispetto ai modelli all’avanguardia. Anche questa dimensione, tuttavia, era insufficiente. In precisione a 16 bit il modello occupa circa 60 MB, ben oltre le capacità del microcontrollore.

La prima tecnica impiegata è stata la quantizzazione, che ha ridotto la precisione numerica dei pesi fino a 4 bit. Questo comporta una lieve perdita di accuratezza, ma consente di diminuire l’occupazione della memoria di circa il 75%, portando il modello a circa 14,9 MB.

La riduzione non era comunque sufficiente. Il passo successivo è stato adottare un approccio ispirato ai modelli Gemma di Google, denominato Per-Layer Embedding (PLE). L’idea consiste nello spostare nella memoria Flash la grande tabella degli embedding, che contiene circa 25 milioni di parametri e viene utilizzata prevalentemente in lettura, senza partecipare direttamente ai calcoli più intensivi. In questo modo, circa 12 MB di dati vengono conservati nella Flash da 16 MB, mentre nella memoria veloce rimangono soltanto le strutture indispensabili per generare il token successivo, come gli embedding attivi, la cache KV, l’output head e le componenti legate ai meccanismi di attenzione e feed-forward. Le attivazioni continuano invece a essere elaborate nella SRAM interna del chip.

A differenza delle tradizionali tecniche di offload verso SSD o unità NVMe, che possono rallentare drasticamente l’inferenza quando i dati devono essere recuperati continuamente, il metodo PLE limita gli accessi alla memoria Flash, riducendo l’impatto sulle prestazioni.

Il risultato è un’impronta in memoria di circa 2 MB per la parte realmente attiva del modello durante l’esecuzione. Anche il software è stato progettato per ridurre al minimo l’overhead: l’intera implementazione è scritta in C puro, senza sistema operativo né interpreti come Python, seguendo un approccio simile a quello del progetto llama2.c di Andrej Karpathy.

Grazie a queste ottimizzazioni il sistema ha raggiunto una velocità di circa 9-9,9 token al secondo, una prestazione sorprendente considerando l’hardware utilizzato e sufficiente, secondo lo sviluppatore, a superare la normale velocità di lettura di una persona. Naturalmente i limiti rimangono evidenti.

TinyStories è stato addestrato sull’omonimo dataset di Microsoft, pensato per insegnare a piccoli modelli la generazione di racconti semplici. Il modello non è quindi adatto alla scrittura di codice, alla risposta a domande articolate o all’esecuzione di agenti AI. Inoltre, ogni modifica del prompt richiede il riflash completo della scheda e il sistema tende frequentemente a deviare dalla richiesta iniziale, tornando a generare storie con protagonisti ricorrenti, conseguenza diretta del limitato dataset di addestramento.

Esistono modelli alternativi, come Barista, capace di rispondere a domande sul mondo dell’espresso con prestazioni persino superiori, ma anch’esso estremamente specializzato. L’esperimento mantiene quindi soprattutto il valore di dimostrazione tecnica, che evidenzia come strategie di compressione e gestione intelligente della memoria possano estendere l’esecuzione locale dei modelli linguistici anche a piattaforme embedded estremamente limitate.

Lo stesso insieme di tecniche – quantizzazione e offload degli embedding – viene in queste ore utilizzato anche su hardware decisamente più potente. Ad esempio, Gemma 4-E2B-it di Google riesce a eseguire un modello multimodale da 5,1 miliardi di parametri in poco più di 1 GB di memoria utilizzando pesi a 4 bit, con ulteriori ottimizzazioni che possono ridurre il fabbisogno a circa 500 MB.

* Contenuto realizzato con l’ausilio di sistemi di intelligenza artificiale.