Содержание
Малая LLM на ESP32-S3 теперь генерирует текст локально со скоростью 9,88 токена в секунду. Разработчик slvDev запустил модель на 28,9 млн параметров на микроконтроллере дешевле $10, то есть около 1000 рублей.
Проект называется esp32-ai. Разработчик выложил код на GitHub в конце июля 2026 года под лицензией MIT. Репозиторий уже собрал больше 3600 звезд и свыше 470 форков. Это не лабораторный стенд с десктопной RTX, а плата класса ESP32-S3, которую обычно ставят в датчики, умные розетки и компактную автоматику.
И тут важна трезвость. Это не карманный ChatGPT и не помощник для кода. Модель пишет короткие истории в духе TinyStories, но не отвечает на вопросы и не следует инструкциям. Зато весь текст рождается на чипе, без облака и передачи данных наружу.
Как 28,9 млн параметров поместили в крошечную память
Главный фокус проекта — не в новой магии нейросетей, а в аккуратной работе с памятью. ESP32-S3 имеет 512 КБ SRAM и 8 МБ PSRAM, а обычная модель на 28,9 млн параметров в 16-битном виде заняла бы почти 60 МБ.
Первый шаг — квантизация. Разработчик ужал веса до 4 бит. Это режет точность, но снижает размер примерно на 75%. Вместо почти 60 МБ получается около 14,9 МБ.
Но даже 14,9 МБ для такой платы — уже перебор. Поэтому slvDev вынес большую часть параметров во flash-память. У платы есть 16 МБ flash, и туда ушли примерно 25 млн параметров, около 12 МБ в 4-битном виде.
Схема опирается на Per-Layer Embeddings, похожий подход использует Google в Gemma 3n. Идея простая: не все веса нужны одинаково часто. То, что модель в основном читает, можно держать в более медленной памяти.
- Параметры модели: 28,9 млн
- Скорость генерации: 9,88 токена в секунду
- SRAM: 512 КБ
- PSRAM: 8 МБ
- Flash: 16 МБ
- Лицензия: MIT
Почему скорость не умерла после переноса весов во flash
Обычно выгрузка весов в медленное хранилище бьет по скорости сразу. На больших моделях это часто превращает генерацию в мучение: не токены в секунду, а секунды на токен.
В esp32-ai этого удалось избежать из-за характера доступа к embedding-таблицам. Модель подтягивает из flash примерно 6 строк на токен, около 450 байт. Для такой нагрузки пропускной способности flash хватает.
Рабочая часть модели занимает ближе к 2 МБ. Плотное ядро и выходная голова лежат в PSRAM. Активации и веса нормализации живут в SRAM. По сути, иерархия памяти стала частью архитектуры модели.
Для микроконтроллера результат выглядит крепко. 9,88 токена в секунду — это быстрее, чем многие люди читают текст. Но скорость не делает модель умнее. Она лишь показывает, что маленькую LLM можно посадить на чип, который раньше казался для этого слишком тесным.
TinyStories вместо универсального ассистента
Модель обучали на наборе TinyStories от Microsoft Research. Поэтому она генерирует короткие, в основном связные истории. Это узкий сценарий, а не универсальный чат-бот.
Ограничение идет от вычислительной части модели. По словам разработчика, за рассуждения отвечает около 4 млн параметров. Трюк с памятью не добавляет фактов, навыков программирования или понимания инструкций.
В репозитории есть и вторая модель — Barista. Она отвечает только на вопросы про эспрессо. Название там не просто шутка: область намеренно зажата до одной темы, чтобы модель не пыталась изображать полноценного ассистента.
Для практики это пока скорее инженерный опыт, чем готовый продукт. Но опыт полезный. Локальная генерация на микроконтроллере может пригодиться там, где сеть недоступна, а данные нельзя отправлять наружу. Например, в автономных датчиках, игрушках, обучающих устройствах или нишевой бытовой электронике.
Код проекта slvDev доступен в репозитории esp32-ai на GitHub. Разработчик выложил его под MIT-лицензией в конце июля 2026 года, вместе с моделью TinyStories и узкой моделью Barista для вопросов про эспрессо.