Text-to-image на ESP32: диффузионный трансформер в микроконтроллере
Stable Diffusion требует 4-8 ГБ видеопамяти. А тут ESP32-S3 за несколько сотен рублей: 512 КБ внутренней SRAM, два ядра по 240 МГц и ни одного тензорного ядра. И всё-таки этот микроконтроллер удалось заставить генерировать лица по русским текстовым описаниям.
64×64 пикселя за 5,4 секунды, без обращения к облаку.
Правда, уместить диффузионный трансформер в такое железо оказалось отдельным квестом. Первая версия требовала 430 КБ внутренней памяти при 288 КБ свободных. А когда матричные умножения удалось ускорить, выяснилось, что квантование активаций отнимает ещё больше времени.
Пришлось бороться буквально за каждый килобайт и миллисекунду, отлавливать хитрые ошибки и мириться с тем, что примерно одна генерация из пяти получается неудачной.