Внедрение алгоритмов машинного обучения на платформах микроконтроллеров

Расцвет интеллекта Edge: почему микроконтроллеры имеют значение

Машинное обучение традиционно жило в облаке, питаясь кластерами GPU и высокопроизводительных процессоров. Но по мере того, как число подключенных устройств взрывается - прогнозируется, что к 2030 году достигнет более 30 миллиардов конечных точек IoT - растет необходимость перемещать выводы из центра обработки данных непосредственно на крошечные чипы, которые запускают датчики, исполнительные механизмы и носимые устройства. Эти чипы, известные как микроконтроллеры (MCU), являются невоспетыми рабочими лошадками встроенного мира: они запускают все, от интеллектуальных лампочек и фитнес-полос до промышленных контроллеров и медицинских имплантатов. Запуск моделей ML непосредственно на этих устройствах, поле, часто называемое TinyML, разблокирует принятие решений в реальном времени, уменьшает задержку, устраняет необходимость постоянного подключения к облаку и улучшает конфиденциальность, сохраняя данные локальными. Но включение машинного обучения на платформах с всего лишь килобайтами памяти и милливаттами мощности - это не маленький подвиг. Эта статья погружается в проблемы, методы, платформы и реальные приложения, которые делают ML на микроконтроллерах практической реальностью.

Основные ограничения среды микроконтроллера

Прежде чем приступить к изучению решений, необходимо понять, какие жесткие ограничения на ресурсы определяют ландшафт микроконтроллеров. В отличие от смартфона или Raspberry Pi, работающего под управлением Linux, типичный MCU работает под жесткими ограничениями:

Эти ограничения заставляют разработчиков переосмыслить каждый аспект конвейера ML, от архитектуры модели до численного представления.

Основные методы сжатия моделей на микроконтроллеры

Появилось несколько ключевых оптимизаций, позволяющих использовать модели ML на ограниченном оборудовании. Эти методы часто объединяются для достижения целей как по размеру, так и по скорости.

Модель квантирования

Наиболее действенным методом является квантование: снижение численной точности параметров модели. Модель, обученная с 32-битными весами с плавающей точкой, часто может быть преобразована в 8-битные целые числа с незначительной потерей точности путем корректировки на динамический диапазон активаций. Это дает 4-кратное сокращение объема памяти и значительное ускорение (особенно на MCU, которые не имеют FPU). Расширенные схемы, такие как смешанное точное квантование (поддержание некоторых слоев в float16 или int4), могут дополнительно выжать производительность при сохранении точности. Такие структуры, как TensorFlow Lite для микроконтроллеров, автоматически применяют квантование после обучения, но для наилучших результатов рекомендуется обучение с квантованием (QAT).

Модель обрезки и спаривание

Обрезка удаляет избыточные или низковоздействующие соединения (весы) в обученной нейронной сети. Структурированная обрезка удаляет целые нейроны или фильтры, которые отображают непосредственно эффективное умножение матрицы. Неструктурированная обрезка устанавливает индивидуальные веса до нуля, создавая редкость, которую можно использовать пользовательскими ядрами. После обрезки тонкая настройка восстанавливает утраченную точность. Например, полностью связанный слой в модели малого пятнистого ключевого слова может быть сокращен до 70-80% редкости с минимальным падением точности, эффективно уменьшая количество операций многократного накопления аналогичным фактором.

Дистилляция знаний

Вместо того, чтобы обучать небольшую модель непосредственно на исходном наборе данных, дистилляция знаний обучает компактную «студенческую» модель имитировать выходные вероятности большой модели «учителя». Мягкие цели учителя содержат более богатую информацию, чем сырые метки, что позволяет ученику достичь более высокой точности, чем если бы он обучался с нуля. Эта техника особенно полезна, когда целевой MCU имеет серьезные ограничения памяти - студент может быть разработан, чтобы вписаться, скажем, в 10 КБ ОЗУ, сохраняя при этом большую часть производительности учителя.

Архитектурный поиск и эффективные оп-кернели

Проектирование нейронной сети специально для периферийных устройств выходит за рамки сжатия существующей архитектуры. Поиск нейронной архитектуры (NAS) может обнаружить легкие строительные блоки (например, глубинно отделимые извилины, перевернутые узкие места), которые уравновешивают количество параметров и точность. В сочетании с ручной настройкой C-реализаций основных операций (свертывание, объединение, функции активации), которые избегают накладных расходов от общих библиотек, разработчики могут извлечь максимальную производительность из ограниченного оборудования.

Рамки развития и наборы инструментов

Для того чтобы эти оптимизации были реализованы на физическом устройстве, требуется надежный программный стек. Несколько зрелых фреймворков теперь явно нацелены на микроконтроллеры:

Ведущие платформы микроконтроллеров для ML

Выбор MCU сильно влияет на возможную сложность модели и скорость вывода. Ниже представлены популярные платформы, которые оказались подходящими для рабочих нагрузок TinyML.

Arduino Nano 33 BLE Sense (альбом)

Основанная на nRF52840 (ARM Cortex-M4F с 256 КБ ОЗУ, 1 МБ Flash), эта плата включает в себя множество датчиков (микрофон, акселерометр, гироскоп, магнитометр, температура, влажность, давление), что делает ее идеальной платформой для прототипирования. Команда TensorFlow Google выпустила несколько официальных примеров TFLM для нее, включая обнаружение ключевых слов и распознавание жестов.

Серия ESP32 (Эспрессиф)

ESP32 (двухъядерная память Xtensa LX6, до 240 МГц, 520 КБ SRAM) повсеместно используется в проектах IoT. Его щедрая память и встроенный Wi-Fi / Bluetooth делают его привлекательным для задач с краевым ML, которые требуют случайных обновлений облака. Более новый ESP32-S3 включает векторное расширение, которое может ускорить операции нейронной сети. Такие фреймворки, как ESP-DL и TensorFlow Lite для микроконтроллеров, хорошо поддерживаются.

Семейство STM32 (STMicroelectronics)

STM32 MCU охватывают широкий спектр от маломощных Cortex-M0+ (STM32L0) до высокопроизводительных Cortex-M7 (STM32H7) с объемом ОЗУ до 2 МБ. ST предоставляет программный пакет X-CUBE-AI, который преобразует модели TensorFlow, PyTorch или Keras в оптимизированный код C для STM32. Сеть инструментов STM32Cube.AI поддерживает квантование, профилирование и автоматическое генерирование кода, что делает его любимым для промышленных приложений.

Raspberry Pi Pico (RP2040)

С 264 КБ ОЗУ и 2 МБ Flash Pico находится на нижнем конце памяти; его двухъядерный Cortex-M0 + работает на частоте до 133 МГц. Он подходит для очень маленьких моделей (например, для обнаружения аномалий на сенсорных временных рядах). Программируемые машины состояния ввода/вывода RP2040 могут загружать сбор данных, позволяя процессору сосредоточиться на выводе.

Амбик Аполлон4

MCU Ambiq предназначены для сверхнизкого энергопотребления (часто ниже 5 мкА / МГц), но при этом обеспечивают достаточный объем вычислений (Cortex-M4F до 192 МГц, до 1,8 МБ ОЗУ). Они популярны в всегда включенных голосовых помощниках и носимых устройствах для мониторинга здоровья, где время автономной работы имеет решающее значение.

Тематические исследования: TinyML в действии

Вышеприведенные принципы были применены для создания впечатляющих реальных систем, которые работают полностью на устройстве.

Ключевое слово, которое можно найти на Arduino Nano

Демо-версия Google «микроречи» работает на 20-КБ модели на Arduino Nano 33 BLE Sense для обнаружения слов «да» и «нет». Модель использует глубинные отделимые извилины и квантована до 8-битных целых чисел. Она обрабатывает 30-миллисекундные аудиоокна из бортового микрофона, достигая 90% + точности с задержкой до 50 мс и энергопотреблением в низком диапазоне милливатт. Этот тип системы питает голосовые переключатели света и интерфейсы без рук в шумных средах.

Обнаружение аномалий для прогнозного обслуживания

Крупный производитель промышленных двигателей развернул сенсорные узлы на базе STM32, которые контролируют вибрацию и температуру. Компактный автокодер (≈30 Кб весов, квантованный до int8) обучался на нормальных рабочих данных. На приборе вывод вычисляет погрешность реконструкции каждую секунду. Если ошибка превышает порог, узел отправляет локальное оповещение. Модель работает в режиме реального времени на STM32L4, потребляя всего 6 мДж на вывод, и позволил на 40% сократить незапланированные простои. Вся система работает в течение двух лет на четырех батареях АА.

Умное сельское хозяйство с датчиками почвы

Стартап agtech использовал Edge Impulse для обучения классификатора на данных от датчиков влажности почвы, pH и температуры. Окончательная модель (≈25 КБ) работает на микроконтроллере ESP32. Он обнаруживает, когда почвенные условия оптимальны для орошения или добавления питательных веществ, и запускает водяной клапан напрямую - без необходимости в облачной кругосветке. Фермеры сообщили о 30%-ном сокращении использования воды без снижения урожайности.

Современные ограничения и открытые вызовы

Хотя TinyML добилась значительного прогресса, остаются некоторые препятствия.

Будущие направления

Следующая волна TinyML будет управляться аппаратным и алгоритмическим со-дизайном. Мы уже видим:

  • Аппаратные ускорители: MCU, интегрирующие специализированные ускорители нейронных сетей (например, EIQ NXP с Ethos-U55 microNPU), могут выполнять извилины на долю энергии обычного процессора.
  • Федерированное обучение на грани: Прототипы исследований позволяют MCU обмениваться обновлениями моделей без обмена исходными данными, сохраняя конфиденциальность, одновременно позволяя совместное улучшение глобальной модели.
  • Нейроморфная обработка: Нейроморфные сети (SNN) могут работать на чипах, управляемых событиями, таких как Loihi от Intel или Akida от BrainChip, потребляя всего лишь микроватты для определенных задач непрерывного времени, таких как распознавание жестов или сейсмический мониторинг.
  • Автоматические инструменты для TinyML: Инструменты, которые автоматически ищут самую маленькую и быструю архитектуру модели, которая все еще отвечает ограничениям точности, становятся более доступными, снижая барьер для экспертов, не являющихся ИИ.

Начало работы над первым проектом TinyML

Если вы готовы попробовать внедрение ML на микроконтроллере, вот рекомендуемый рабочий процесс:

  1. Выберите доску: Arduino Nano 33 BLE Sense или ESP32-DevKitC — отличная отправная точка, поскольку они имеют достаточно памяти и хорошо поддерживают фреймворки.
  2. Выберите проблему: Начните с небольшой задачи классификации на основе датчиков (например, распознавание жестов с помощью акселерометра), чтобы избежать сложности звука или зрения.
  3. Сбор данных: Использование самой платы или телефона для сбора помеченных примеров. Цель — не менее 100 образцов на класс.
  4. Обучите модель: Используйте Edge Impulse или TensorFlow для обучения модели с помощью обучения квантованию. Обратите пристальное внимание на размер модели (должен соответствовать SRAM).
  5. Развернуть и протестировать: Перевернуть преобразованную модель на плату и измерить задержку, точность и энергопотребление. Перемещать на обрезке или архитектуре, если модель слишком медленная или большая.

Заключение

Внедрение алгоритмов машинного обучения на платформах микроконтроллеров больше не является теоретическим любопытством — это практическая, растущая область, которая приносит интеллект миллиардам устройств с низким энергопотреблением. Используя тщательное сжатие моделей, специализированные фреймворки и специальное оборудование, инженеры могут разблокировать вывод в реальном времени в местах, где зависимость от облака невозможна или нежелательна. По мере появления инструментов зрелая и новая архитектура ускорителей TinyML станет стандартным компонентом каждой встроенной системы. Примеры и методы, представленные здесь, обеспечивают прочную основу для тех, кто хочет добавить возможности ML в свой следующий проект на основе микроконтроллера.

Внешние ресурсы: