Lo sviluppatore Vyacheslav Serbov, noto con lo pseudonimo slvDev, ha dimostrato ha implementato una generazione di testo completamente locale su microcontrollore ESP32-S3. Il modello linguistico da lui creato contiene 28,9 milioni di parametri e produce circa 9,9 token al secondo, senza ricorrere a server o ad 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 incorporata, 8 MB di PSRAM e 16 MB di memoria flash. Il modello quantizzato a quattro bit occupa 14,9 MB. Nel repository è pubblicato il codice sorgente dell'ambiente di esecuzione in C, gli strumenti per l'addestramento e la quantizzazione del modello, il firmware, i test e gli script per il caricamento sulla scheda.
I dichiarati 28,9 milioni di parametri non devono essere confrontati direttamente con il numero di parametri dei normali LLM da desktop. Secondo un dettagliato rapporto dello sviluppatore, il modello è costituito da un nucleo computazionale denso di circa 559.000 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 durante la generazione di ogni token.
Per allocare il modello sono coinvolti tre livelli di memoria. I dati più frequentemente utilizzati si trovano nella SRAM interna, lo strato di uscita, KV-cache e buffer temporanei sono nella PSRAM, mentre la tabella da 25 milioni rimane nella memoria flash e accessibile tramite mapping 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, applicata da Google in Gemma 3n. Secondo la documentazione di Google, i parametri PLE possono essere memorizzati al di fuori della memoria di lavoro del modello e aggiunti al processo di output man mano che vengono elaborati i singoli strati. In esp32-ai questo approccio è stato trasferito alla gerarchia della memoria del microcontrollore, dove la SRAM veloce è particolarmente limitata.
La prima versione corretta dell'ambiente di esecuzione scritta in C restituiva solo 0,57 token al secondo. Dopo aver messo il layer di output nella PSRAM, passando ad attivazioni a 8 bit, distribuendo i calcoli tra i due nuclei Xtensa LX7 e altre ottimizzazioni, la latenza è stata ridotta a 94,9 ms per passo del modello. La velocità finale misurata ha raggiunto 9,88 token al secondo considerando l'intero processo di generazione. Il principale limite ora è stata la larghezza di banda della PSRAM durante la lettura del layer di output.
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 le frasi e inventare piccole storie coerenti, ma non è progettato per rispondere a domande, eseguire istruzioni, programmare o riprodurre conoscenze factuali. Lo sviluppatore considera il lavoro principalmente come una dimostrazione di un efficace posizionamento del modello nella memoria di un microcontrollore, e non come un chatbot autonomo pronto all'uso.
Nella documentazione attuale, l'autore sottolinea che esp32-ai è uno sviluppo autonomo. I progetti llama2.c di Andrei Karpathy e un lancio precedente del modello da 260.000 su ESP32-S3 vengono citati solo come punti di riferimento e esempi di lavori precedenti: il codice, i punti di controllo e la metodologia non sono stati direttamente presi da essi. Il codice sorgente di esp32-ai viene distribuito con licenza MIT.
Fonte: linux.org.ru
