Думать по-другому
Когда дело доходит до встроенной системы, машинное обучение терпит неудачу. Вот почему
Более пристальный взгляд на встраиваемый мир и на то, с чем отрасль машинного обучения пока не может справиться
Машинное обучение в наши дни достигло своего пика и, наконец, стало использоваться повсеместно. Вы можете увидеть системы распознавания лиц в аэропорту и персональную рекламу в Facebook.
Хотя, когда мы говорим о объединении машинного обучения со встроенными устройствами, все равно остается значительный пробел.
1. Мы не понимаем, что такое встроенный мир
Раньше, работая с ML, мы обладали огромной вычислительной мощностью.
AlexNet требует 727 мегафлопс и 235 МБ памяти для обработки небольшого изображения размером 227x227 пикселей. Например, ARM Cortex-A8 на Google Nexus S может производить 66 мегафлопс в секунду. Итак, вам нужно подождать ~ 11 секунд для вывода. Это много!
* FLOP - операция с плавающей запятой
Дополнительная информация: Оценки потребления памяти и подсчетов FLOP для различных CNN и Производительность ядер ARM с плавающей запятой и их эффективность.
В университете я прошел несколько курсов по машинному обучению. Мы сделали много крутых вещей в домашней работе. Но даже там моей 4ГБ GTX1050 не хватило для обучения всех моделей.
Генеральный инженер машинного обучения редко думает о вычислительных ресурсах. Более того, он / она редко заботится об использовании памяти. Почему? Потому что это дешево, и даже в вашем телефоне довольно хороший процессор и много памяти.
Вы все еще чувствуете нехватку памяти в телефоне, когда дело касается фотографий с прошлой вечеринки? Представьте, что вы работаете с сенсорным контроллером TrueTouch, который имеет 256 КБ флэш-памяти. Да, 256 КБ. И вы не можете использовать все это из-за существующей прошивки. Итак, около 100 КБ. Проверьте свой последний размер модели. Наверное, намного больше.
Становится интересно? Давай продолжим :)
Что вы думаете, когда слышите «встроенное устройство»? Представьте себе картинку и запомните.
1. Это любая электрическая техника. Даже моя микроволновка и стиральная машина
Да, вы правы!
Сегодня практически любое электрическое устройство представляет собой встроенное устройство. В нем может быть один или несколько контроллеров, отвечающих за каждую конкретную функцию: сенсорное управление, мониторинг состояния двигателя и т. д.
2. Arduino и / или Raspberry PI
Поздравляем, вы снова правы!
Это одни из самых популярных и широко используемых наборов для проектов DIY. И да, это встраиваемые устройства.
3. Jetson Nano и аналогичные
И снова верно.
Это специальный комплект разработчика, он же мини-компьютер, разработанный специально для запуска на нем моделей машинного обучения. Он очень мощный и, честно говоря, супер сексуальный.
Но здесь что-то упущено
У меня много друзей, которые делают потрясающие домашние проекты по оборудованию. Обычно они используют Arduino или STM32 (также известный как хардкорный Arduino).
Я знаю нескольких AI-инженеров, которые в восторге от Jetson Nano и подобных устройств. Они думают, что это будущее за встроенным ИИ.
И сейчас. Подумайте, пожалуйста, «Сколько таких устройств используется на уровне производства?»
Ответ - крошечный
Подумайте, сколько электроприборов у вас в доме. Затем добавьте в машину тонны контроллеров. Система безопасности в вашей работе. Я могу продолжить очень длинный список.
И у каждого из этих устройств есть какой-то контроллер. Обычно он миниатюрный и супер дешевый. Его нельзя сравнивать с ресурсами и возможностями Jetson или Raspberry.
Представьте, что у вас есть микроконтроллер. Его основная задача - обрабатывать касания пальцем экрана. Он имеет процессор ARM Cortex-M0, 256 КБ памяти (из которых вам доступно только 80–120). Это система реального времени, поэтому у вас есть небольшое количество времени, чтобы сделать выводы для вашей модели, скажем, 100 микросекунд. И ваша цель - улучшить или заменить там какой-то алгоритм.
Удачи и добро пожаловать в мир «встроенного ИИ».
*** Встраиваемый мир »состоит из микросхем по 1–2 доллара с ограниченными ресурсами. И это то, что используется на уровне производства ***
2. Чистая инфраструктура
Я работаю над описанным выше проектом. Все было супер. Я разработал небольшую сеть, которая потенциально должна вписаться в этот микроконтроллер.
Пришло время перенести модель с компьютера на устройство!
- Квантование.
Этот процессор не мог выполнять операции с числами с плавающей запятой. Даже если бы это было возможно, мы бы не использовали его, потому что это довольно сложная операция и требует много времени.
Итак, я выполнил квантование весов моделей - преобразование непрерывного диапазона значений в конечный диапазон дискретных значений.
И угадай что? Ни PyTorch, ни TensorflowLite не поддерживают его полностью. Они не поддерживают все функции активации (хотя я использовал довольно простой HardTanh). PyTorch даже не смог сохранить квантованную модель в файл.
Так что пришлось делать это вручную.
2. Генерация кода вывода
Вы хотите запустить свою модель на этом контроллере. Верно? Итак, вам нужен C-код для вывода модели.
Это печально, но делать это нужно вручную. Почему? PyTorch не имеет функции генерации кода вывода. Напротив, у TFLite есть, но он довольно ограничен и опять же не поддерживает общие функции активации.
Итак, я снова сделал это вручную.
Я сталкивался с множеством подобных ситуаций на работе. Это не удар в сторону PyTorch или TF, а скорее «крик о помощи».
*** Есть другая сторона сообщества машинного обучения, которая ищет профессиональный инструмент для «встроенного ИИ», но не может его найти. ***
Что-то хорошее?
Я вижу огромный интерес к ИИ со стороны крупных полупроводниковых компаний, и они делают чрезвычайно ценные и важные дела. Они достойны отдельной статьи, поэтому я перечислю пару из них, чтобы не делать эту статью слишком длинной.
- CMSIS-NN - эффективные ядра нейронной сети для процессоров Arm Cortex-M
- Компиляторы, которые производят высокоэффективный код вывода, оптимизированный на основе имеющегося у вас оборудования.
- и много других интересных вещей
Эта статья оказалась полезной? Посмотрите еще одну интересную статью ниже