Прорыв в эффективности памяти
На микроконтроллер ESP32-S3 стоимостью около 8 долларов была успешно портирована языковая модель с 28.9 миллионами параметров. Это примерно в 100 раз больше, чем предыдущий рекорд для подобных чипов (260 тысяч параметров). Ключевое отличие — полная автономность: модель работает локально, не отправляя данные на сервер, и выводит текст на подключенный дисплей.
Техническая реализация: Per-Layer Embeddings
Главная проблема микроконтроллеров — нехватка быстрой оперативной памяти (SRAM). В ESP32-S3 доступно всего 512 КБ SRAM, чего недостаточно для хранения весов большой модели. Решение, заимствованное из архитектуры Google Gemma (Per-Layer Embeddings), позволяет хранить основную таблицу эмбеддингов (25 млн параметров) в медленной флеш-памяти (Flash). При генерации каждого токена из флеша считывается лишь небольшой фрагмент (~450 байт), а вычисления происходят в доступной SRAM и PSRAM.
Характеристики системы
Ниже приведены технические спецификации запущенной системы и используемого оборудования:
| Параметр | Значение / Описание |
|---|---|
| Модель | 28.9M параметров (25M в Flash, 3.9M в RAM/PSRAM) |
| Железо | ESP32-S3, ~$8, 512KB SRAM, 8MB PSRAM, 16MB Flash |
| Скорость | ~9.5 токенов/сек (9.7 токенов/сек чистых вычислений) |
| Размер модели | 14.9 МБ (квантование 4-bit) |
| Данные | Обучена на датасете TinyStories (короткие истории) |
Ограничения и возможности
Модель способна генерировать связные короткие истории, но не предназначена для сложных задач. Она не отвечает на вопросы, не пишет код и не хранит фактические знания. Ограничение связано с архитектурой «мышления» модели, а не с методом хранения данных. Проект демонстрирует, что сложные архитектуры можно адаптировать под крайне ограниченные ресурсы, что открывает путь для офлайн-ИИ в IoT-устройствах.
Где найти код
Полный исходный код прошивки, схема подключения и инструкции по прошивке доступны в репозитории firmware/esp32_llm/README.md. Код обучения, аблиационные исследования и метрики производительности находятся в папках src/ и experiments/. Автор также открыто делится историей отладки, включая исправление ошибок в подсчете параметров.
Источник: Github ↗
