- BrainTools - https://www.braintools.ru -

Языковую модель на 28,9 млн параметров запустили на микроконтроллере ESP32-S3

Разработчик Слава Сербов запустил [1] языковую модель на 28,9 млн параметров на плате с микроконтроллером ESP32-S3. Нейросеть работает полностью локально, а сгенерированный текст выводится на небольшой дисплей.

Языковую модель на 28,9 млн параметров запустили на микроконтроллере ESP32-S3 - 1

Для эксперимента разработчик использовал ESP32-S3 N16R8 с 16 Мбайт флеш‑памяти и всего 512 Кбайт встроенной SRAM. Кроме того, чип оснащён двумя 32-битными ядрами Xtensa LX7 с частотой до 240 МГц.

Языковую модель на 28,9 млн параметров запустили на микроконтроллере ESP32-S3 - 2

Уместить модель на устройстве с ограниченной памятью [2] удалось благодаря четырёхбитной квантизации и распределению весов между разными типами памяти. Финальный файл занимает всего 14,9 Мбайт. При этом из 28,9 млн параметров примерно 559 тысяч относятся к вычислительному ядру, 3,1 млн — к выходному слою, а оставшиеся 25 млн хранятся во флеш‑памяти в виде таблицы послойных эмбеддингов. 

Такой подход использовали в моделях Google Gemma. Вместо загрузки сразу всей таблицы в оперативную память система извлекает только те данные, которые необходимы для текущего токена, и добавляет их на разные слои модели. В случае с ESP-32 за один шаг из флеш‑памяти считывается около шести строк таблицы. Вычислительное ядро остаётся в более быстрой памяти, а выходной слой и рабочие данные — в PSRAM.

Модель для проекта обучили на TinyStories [3] — синтетическом наборе коротких англоязычных рассказов, которые сгенерировали с помощью GPT-3.5 и GPT-4. В обучающих текстах используется преимущественно лексика, знакомая детям 3–4 лет. Итоговая модель может генерировать похожие простые рассказы для детей, но не умеет отвечать на вопросы, писать код и оперировать фактами о мире.

После оптимизации LLM на ESP-32 генерирует около 9,5 токенов в секунду с учётом вывода текста через последовательный интерфейс. Сами вычисления выполняются со скоростью 9,73 токена в секунду. Для ускорения система заранее переводит выходной слой и активации эмбеддингов в восьмибитный формат и распределяет расчёты между двумя ядрами микроконтроллера.

Ранее разработчик Дэйв Беннетт (Dave Bennett) тоже запускал [4] LLM на ESP32, но его способа оптимизации хватило на модель с 260 тысячами параметров.

Автор: daniilshat

Источник [5]


Сайт-источник BrainTools: https://www.braintools.ru

Путь до страницы источника: https://www.braintools.ru/article/33675

URLs in this post:

[1] запустил: https://github.com/slvDev/esp32-ai

[2] памятью: http://www.braintools.ru/article/4140

[3] TinyStories: https://huggingface.co/datasets/roneneldan/TinyStories

[4] запускал: https://github.com/DaveBben/esp32-llm

[5] Источник: https://habr.com/ru/news/1064114/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1064114

www.BrainTools.ru

Rambler's Top100