
Разработчик Слава Сербов запустил языковую модель на 28,9 млн параметров на плате ESP32-S3. Нейросеть работает полностью локально благодаря 4-битной квантизации и умному распределению весов между флеш-памятью и SRAM.
Разработчик Слава Сербов демонстрирует впечатляющий результат: языковая модель на 28,9 миллиона параметров работает на микроконтроллере ESP32-S3. Для эксперимента использовалась плата ESP32-S3 N16R8 с 16 Мбайт флеш-памяти и 512 Кбайт встроенной SRAM, а также двумя 32-битными ядрами Xtensa LX7 частотой до 240 МГц.
Уместить модель в такие ограничения удалось за счёт четырёхбитной квантизации и распределения весов по разным типам памяти. Финальный файл весит всего 14,9 Мбайт. Из 28,9 млн параметров около 559 тысяч относятся к вычислительному ядру, 3,1 млн — к выходному слою, а оставшиеся 25 млн хранятся во флеш-памяти в виде таблицы послойных эмбеддингов — подход, заимствованный у моделей Google Gemma.
Система не загружает всю таблицу в оперативную память, а извлекает только нужные для текущего токена данные — примерно шесть строк за шаг. Вычислительное ядро остаётся в быстрой памяти, выходной слой и рабочие данные размещены в PSRAM. Модель обучалась на датасете TinyStories — синтетических детских рассказах от GPT-3.5 и GPT-4 с лексикой для 3–4 летних детей.
Итоговая модель генерирует простые истории для детей, но не умеет отвечать на вопросы, писать код или оперировать фактами. После оптимизаций скорость генерации составила 9,5 токенов в секунду с выводом через последовательный интерфейс (9,73 токена/с — сами вычисления). Ускорение достигнуто переводом выходного слоя и эмбеддингов в 8-битный формат и распараллеливанием расчётов между двумя ядрами. Ранее Дэйв Беннетт запускал на ESP32 модель всего на 260 тысяч параметров.



