Перейти к содержанию
Новое AiManual теперь в MAX Подписаться
Публикация AiManual

Запуск ASR-модели на ESP32-S3 за $10: архитектура, квантизация и реальные ограничения

Портирование 13.1M-параметрической Conformer ASR-модели на ESP32-S3 за $10: дистилляция, INT8-квантизация, аппаратное ускорение и реальные цифры WER. Инференс 8

Коротко

Что будет в материале

  1. 01

    Реальность ASR на $10: что показал эксперимент с ESP32-S3

  2. 02

    Почему Conformer, а не Whisper Tiny: выбор архитектуры для микроконтроллера

  3. 03

    Как уместить модель в 14 МБ флеш и 4 МБ PSRAM: дистилляция и квантизация

  4. 04

    Цена оптимизации: как изменился Word Error Rate

Реальность ASR на $10: что показал эксперимент с ESP32-S3

Портировать 13.1M-параметрическую Conformer-модель на микроконтроллер ESP32-S3 с 14 МБ флеш-памяти и 4 МБ PSRAM - задача на грани возможного. Эксперимент удался: модель запущена, но инференс 8 секунд аудио занимает десятки секунд. Word Error Rate вырос на ~3% относительно бенчмарков Hugging Face. Это честный разбор без прикрас.

Стоимость чипа ESP32-S3 колеблется около $10. Речь идёт о бюджетном решении для энтузиастов edge AI и разработчиков встраиваемых систем. Результат показывает: ASR на таком железе работает, но до коммерческого использования предстоит решить проблему задержки. Прямой ответ на главный вопрос - да, запустить можно. Цена - скорость и точность.

Ключевые цифры: модель занимает всю доступную флеш-память, PSRAM используется для промежуточных тензоров. Аппаратное ускорение 8-битных операций на ESP32-S3 частично компенсирует нехватку вычислительных ресурсов, но не спасает от узких мест в пропускной способности памяти. Дальше - детальный разбор архитектурных решений и техник сжатия.

Почему Conformer, а не Whisper Tiny: выбор архитектуры для микроконтроллера

Whisper Tiny - очевидный кандидат для ASR на edge-устройствах. Модель от OpenAI показывает хорошие результаты на десктопном железе, но на ESP32-S3 сталкивается с фатальными ограничениями. Whisper Tiny требует больше оперативной памяти для кэша энкодера-декодера, а её архитектура с трансформерными блоками генерирует значительную вычислительную нагрузку на этапе кросс-аттеншена. На 4 МБ PSRAM модель просто не помещается без радикальной нарезки графа вычислений.

Conformer выбран по трём причинам. Первая: комбинация свёрточных и трансформерных слоёв снижает число параметров в self-attention блоках. Вторая: архитектура изначально проектировалась для потоковой обработки речи, что упрощает разбиение на чанки. Третья: поддержка depthwise-свёрток позволяет эффективно использовать SIMD-инструкции ESP32-S3. 13.1M параметров - разумный компромисс между точностью распознавания и возможностью уместить модель в 14 МБ флеш.

Сравнительные тесты на LibriSpeech test-clean: Whisper Tiny в FP32 требует около 18 МБ только под веса, Conformer - 13.1 МБ. После квантизации в INT8 разрыв сохраняется: 9 МБ против 6.5 МБ. На ESP32-S3 каждый мегабайт на счету. Выбор Conformer продиктован не идеологией, а сухими цифрами совместимости с железом.

Как уместить модель в 14 МБ флеш и 4 МБ PSRAM: дистилляция и квантизация

Исходная Conformer-модель в FP32 весит около 52 МБ. Уместить её в 14 МБ флеш-памяти - задача, решаемая двухэтапным сжатием. Первый этап: дистилляция. Второй: квантизация в INT8. Каждый даёт контролируемую потерю точности, но вместе они сокращают размер модели в 4 раза.

Дистилляция: уменьшаем число параметров без катастрофической потери качества

Принцип дистилляции для ASR: teacher-модель с 45M параметров обучает student-модель с 13.1M параметров. Teacher - полноразмерный Conformer, предобученный на LibriSpeech и дополненный аугментациями SpecAugment. Student получает не только hard-лейблы (правильные транскрипции), но и soft-лейблы - распределения вероятностей на выходе teacher. Функция потерь комбинирует CTC Loss и KL-дивергенцию между выходными распределениями teacher и student.

Какие слои урезали: число attention heads уменьшено с 8 до 4, размерность фидфорвард-слоёв снижена с 2048 до 1024, количество Conformer-блоков сокращено с 16 до 12. Промежуточный WER на LibriSpeech test-clean после дистилляции вырос с 3.2% до 4.8%. Рост на 1.6 процентных пункта - плата за сокращение модели в 3.4 раза. Модель всё ещё узнаваема и пригодна для распознавания команд.

Квантизация в INT8: использование аппаратного ускорения ESP32-S3

Квантизация переводит веса и активации из 32-битных float в 8-битные целые. ESP32-S3 имеет SIMD-инструкции для умножения 8-битных векторов с накоплением в 32-битный аккумулятор - это даёт теоретический прирост скорости в 4 раза на матричных умножениях. На практике выигрыш скромнее из-за накладных расходов на деквантизацию и пересылки между SRAM и PSRAM.

После квантизации размер модели сократился с 52 МБ до 6.5 МБ - она помещается во флеш-память с запасом. Активации занимают около 3.2 МБ в пике, что укладывается в 4 МБ PSRAM при аккуратном управлении памятью. Скорость инференса выросла в 2.8 раза относительно FP32-эмуляции на том же чипе. Артефакты квантизации проявились в росте WER ещё на 1.4% - с 4.8% до 6.2% на test-clean. Суммарный рост относительно оригинального бенчмарка Hugging Face (3.2%) составил 3 процентных пункта.

Цена оптимизации: как изменился Word Error Rate

Итоговый WER 6.2% на LibriSpeech test-clean против 3.2% у оригинала - это рост на ~3 процентных пункта. На практике это означает: из 100 слов модель ошибается в 6 вместо 3. Для голосовых команд («включи свет», «установи таймер на 10 минут») такая точность приемлема. Для транскрибации связной речи - уже нет.

Примеры ошибок: слово «weather» распознаётся как «whether», «recognize» - как «recognise». Фонетически близкие слова путаются чаще. На зашумлённых данных (test-other) WER подскакивает до 14.8%. Модель чувствительна к темпу речи: быстрая речь увеличивает число ошибок на 2-3 процентных пункта. Для типовых сценариев IoT с фиксированным словарём команд можно дообучить языковую модель под конкретный домен и снизить эффективный WER до 3-4%.

Скорость инференса: почему 8 секунд аудио обрабатываются десятки секунд

Real-time фактор (RTF) - ключевая метрика для ASR. RTF = время обработки / длительность аудио. Для real-time систем RTF должен быть меньше 1. В эксперименте RTF составил от 4 до 8 в зависимости от длины аудио. 8 секунд речи обрабатываются 32-64 секунды. Причина не только в слабом процессоре.

Профиль времени: 15% уходит на загрузку модели из флеш в PSRAM, 10% - на предобработку аудио (MFCC-признаки), 60% - на прогон через энкодер, 15% - через декодер. Энкодер - главный потребитель времени. Каждый Conformer-блок содержит self-attention, который на ESP32-S3 выполняется без оптимизаций под sparse-операции. PSRAM с частотой 80 МГц даёт пропускную способность около 320 МБ/с - в 10 раз медленнее внутренней SRAM. Тензоры, не умещающиеся в 512 КБ SRAM, уходят в PSRAM и создают бутылочное горлышко.

Можно ускорить: использовать DMA для асинхронных пересылок между SRAM и PSRAM, разбивать аудио на чанки по 2 секунды и обрабатывать с перекрытием, применять INT4-квантизацию для весов (требует калибровки и растёт WER). Потенциальный выигрыш - до 2 раз, но RTF всё равно останется выше 1. Для сравнения: на Raspberry Pi 4 та же модель в INT8 даёт RTF 0.3-0.5 - real-time достижим на более мощном edge-железе.

Практические рекомендации: что нужно знать перед портированием своей ASR-модели

Чеклист для портирования: оцените размер модели в INT8 (веса * 1 байт + активации), убедитесь что он влезает в 14 МБ флеш и 4 МБ PSRAM. Проверьте поддержку Ops в TensorFlow Lite Micro - не все операции из стандартного TFLite доступны на микроконтроллерах. Подготовьте аудио: частота дискретизации 16 кГц, 16 бит, моно, длина кадров 25 мс с шагом 10 мс. Отлаживайте на десктопе с эмулятором ESP-IDF перед заливкой на чип.

Инструменты и фреймворки для портирования на ESP32-S3

Основной стек: TensorFlow Lite Micro для инференса, ESP-IDF v5.1+ для сборки и прошивки. Конвертация модели: PyTorch → ONNX → TFLite с калибровкой на репрезентативном датасете из 500-1000 аудиосэмплов. Для калибровки INT8 используйте TFLiteConverter с параметром optimizations=[tf.lite.Optimize.DEFAULT] и representative_dataset_gen. Альтернатива - ONNX Runtime для микроконтроллеров, но поддержка ESP32-S3 в нём пока экспериментальная.

Настройка окружения: установите ESP-IDF, настройте toolchain для xtensa-esp32s3-elf, добавьте компонент tflite-micro в проект. Пример конфигурации CMakeLists.txt включает флаги оптимизации -O3 и -mcpu=esp32s3. Для работы с аудио используйте драйвер I2S и библиотеку esp-dsp для вычисления MFCC на лету. Типичная ошибка: переполнение стека FreeRTOS - увеличьте размер стека задачи инференса до 16 КБ.

Ограничения и сценарии, где это действительно работает

Сценарии применения: офлайн-распознавание коротких команд (до 3 секунд), голосовое управление IoT-устройствами без подключения к облаку, простые диктофоны с отложенной транскрибацией. Модель способна обработать словарь из 200-500 команд с точностью выше 95% при условии тихой обстановки.

Где не использовать: real-time потоковая речь, длинные монологи, сценарии с высокими требованиями к точности (медицинская транскрибация, голосовые ассистенты общего назначения). Для этих задач смотрите в сторону Raspberry Pi 5 или специализированных NPU-ускорителей. Наш разбор 1-битных моделей для edge-развёртывания даёт альтернативные подходы к сжатию.

Выводы: стоит ли игра свеч?

Эксперимент показал: ASR на ESP32-S3 возможна, но с жёсткими компромиссами. Модель 13.1M параметров умещается в 14 МБ флеш и 4 МБ PSRAM благодаря дистилляции и INT8-квантизации. Плата - рост WER на ~3% и RTF от 4 до 8. Для голосовых команд это приемлемо, для связной речи - нет.

Направления развития: ESP32-P4 с 32 МБ PSRAM и более быстрым ядром снизит RTF до 1.5-2. INT4-квантизация уменьшит размер модели вдвое ценой роста WER ещё на 2-3%. Аппаратные ускорители вроде Coral TPU или Hailo-8L дают RTF < 0.1, но увеличивают стоимость решения до $30-50. Финальный вердикт: эксперимент удался как proof of concept. До коммерческого использования нужно либо ждать новые чипы, либо ограничиться узким доменом команд.

Методология сжатия моделей, опробованная в этом эксперименте, перекликается с подходами из статьи про дистилляцию шаблонов и адаптивный роутинг A.L.F.R.E.D., где компактные модели достигают производительности больших аналогов. Принцип тот же: умное сжатие вместо грубой силы.

Подписаться на канал