Разработчик Вячеслав Сербов, известен с псевдонима slvDev, показа в напълно локална генерация на текст на микроконтролера ESP32-S3. Създадената от него езикова модел съдържа 28,9 млн параметри и генерира около 9,9 токена в секунда, без да се обръща към сървъра или други външни изчислителни ресурси. Сгенерираните кратки разкази се извеждат на свързания OLED дисплей.
Проект esp32-ai тестен на модула ESP32-S3 N16R8, който разполага с 512 КБ вградена SRAM, 8 МБ PSRAM и 16 МБ флаш памет. Квантованата до четири бита модел заема 14,9 МБ. В хранилището са публикувани изходният код на средата за изпълнение на C, инструменти за обучение и квантоване на модела, фърмуера, тестовете и сценарите за зареждане на платката.
Декларираните 28,9 млн параметри не трябва да се сравняват директно с броя параметри на обичайните настолни LLM. Според подробния отчет на разработчика, моделът се състои от плътно изчислително ядро с приблизително 559 хиляди параметри, изходен слой с 3,1 млн параметри и таблица на слойните векторни представяния с приблизително 25 млн параметри. Именно последното осигурява основната част от формалния размер на модела, но не се обработва изцяло при генерирането на всеки токен.
За разполагането на модела се използват три нива памет. Най-често използваните данни се намират във вътрешната SRAM, изходният слой, KV кеша и временните буфери — в PSRAM, а 25-милионната таблица остава във флаш памет и е достъпна чрез отображение в адресното пространство. За всеки токен от нея се четат само около шест реда с общ обем от около 450 байта.
Това устройство е базирано на технологията Per-Layer Embeddings, както е приложена от Google в Gemma 3n. Според документацията на Google, параметрите на PLE могат да се съхраняват извън работната памет на модела и да се добавят в процеса на извеждане при обработката на отделни слоеве. В esp32-ai този подход е пренесен в йерархията на паметта на микроконтролера, където бързата SRAM е особено ограничена.
Първата коректна версия на C среда за изпълнение даваше само 0,57 токена в секунда. След поставянето на изходния слой в PSRAM, преминаването към 8-битови активации, разпределението на изчисленията между двете ядра Xtensa LX7 и други оптимизации, закъснението беше намалено до 94,9 мс на стъпка на модела. Финалната измерена скорост достигна 9,88 токена в секунда, като се отчита целият процес на генериране. Основното ограничение сега стана пропускателната способност на PSRAM при четене на изходния слой.
Моделът е обучен на синтетичен набор от данни TinyStories, който се състои от простички англоезични разкази с ограничен речник. Поради това той може да продължава фрази и да съчинява малки свързани истории, но не е предназначен за отговори на въпроси, изпълнение на инструкции, програмиране или възпроизвеждане на фактически знания. Разработчикът разглежда работата предимно като демонстрация на ефективно разположение на модела в паметта на микроконтролера, а не като готов автономен чат-бот.
В актуалната документация авторът отделно подчертава, че esp32-ai е самостоятелна разработка. Проектите llama2.c на Андрей Карпати и по-ранен старт на 260-хилядния модел на ESP32-S3 се дават само като ориентири и примери на предишни работи: код, контролни точки и методология не са заимствани директно от тях. Изходният код на esp32-ai се разпространява под лиценз MIT.
Източник: linux.org.ru
