Lo sviluppatore Viacheslav Serbov, che opera sotto lo pseudonimo di slvDev, ha dimostrato ha creato una generazione di testo completamente locale su microcontrollore ESP32-S3. Il modello linguistico da lui sviluppato conta 28,9 milioni di parametri e genera circa 9,9 token al secondo, senza fare riferimento a server o altre risorse di calcolo esterne. I racconti brevi generati vengono visualizzati su un display OLED connesso.
Progetto esp32-ai è stato testato su un modulo ESP32-S3 N16R8, dotato di 512 KB di SRAM integrata, 8 MB di PSRAM e 16 MB di memoria flash. Il modello quantizzato a quattro bit occupa 14,9 MB. Nel repository sono pubblicati il codice sorgente dell'ambiente di esecuzione in C, gli strumenti di addestramento e quantizzazione del modello, il firmware, i test e gli scenari per il suo caricamento sulla scheda.
I 28,9 milioni di parametri dichiarati non devono essere confrontati direttamente con il numero di parametri di LLM desktop comuni. Secondo il dettagliato rapporto dello sviluppatore, il modello è composto da un nucleo computazionale denso di circa 559 mila parametri, uno strato di uscita di 3,1 milioni di parametri e una tabella di rappresentazioni vettoriali per strato di circa 25 milioni di parametri. È proprio quest'ultima a fornire la maggior parte della dimensione formale del modello, ma non viene elaborata completamente nella generazione di ogni token.
Per l'allocazione del modello vengono utilizzati tre livelli di memoria. I dati più frequentemente utilizzati si trovano nella SRAM interna, lo strato di uscita, la cache KV e i buffer temporanei nella PSRAM, mentre la tabella da 25 milioni rimane nella memoria flash ed è accessibile tramite mappatura nello spazio degli indirizzi. Per ogni token vengono lette solo circa sei righe per un totale di circa 450 byte.
Questo dispositivo si basa sulla tecnologia Per-Layer Embeddings, utilizzata da Google in Gemma 3n. Secondo la documentazione di Google, i parametri PLE possono essere memorizzati al di fuori della memoria operativa del modello e aggiunti nel processo di output man mano che vengono elaborati singoli strati. In esp32-ai questo approccio è stato trasferito nella gerarchia di memoria del microcontrollore, dove la SRAM veloce è particolarmente limitata.
La prima versione corretta dell'ambiente di esecuzione scritto in C restituiva solo 0,57 token al secondo. Dopo aver collocato lo strato di uscita nella PSRAM, passando a attivazioni a otto bit, distribuendo i calcoli tra due core Xtensa LX7 e altre ottimizzazioni, il ritardo è stato ridotto a 94,9 ms per passo del modello. La velocità misurata finale ha raggiunto 9,88 token al secondo tenendo conto del processo di generazione completo. Il principale vincolo ora è stata la larghezza di banda della PSRAM nella lettura dello strato di uscita.
Il modello è stato addestrato su un insieme di dati sintetico TinyStories, composto da semplici racconti in inglese con un vocabolario limitato. Pertanto, è in grado di continuare frasi e comporre piccole storie coerenti, ma non è progettato per rispondere a domande, eseguire istruzioni, programmare o riprodurre conoscenze fattuali. Lo sviluppatore considera il lavoro principalmente come una dimostrazione dell'efficace collocamento del modello nella memoria di un microcontrollore e non come un chatbot autonomo finale.
Nella documentazione attuale, l'autore sottolinea separatamente che esp32-ai è uno sviluppo autonomo. I progetti llama2.c di Andrei Karpathy e il lancio precedente del modello da 260.000 parametri su ESP32-S3 sono forniti solo come riferimenti ed esempi di lavori precedenti: il codice, i checkpoint e la metodologia non sono stati direttamente presi da essi. Il codice sorgente di esp32-ai è distribuito con licenza MIT.
Fonte: linux.org.ru
