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

Но если вы изо всех сил пытаетесь разместить свое приложение на чем-то со всем весом Raspberry Pi, знайте, что это можно сделать. Работа с периферией требует отказа от расточительности облака и скряги в вычислениях, учитывающей почти все до единого биты вашей модели. Исходя из нашего опыта развертывания моделей машинного обучения на периферии, мы подобрали несколько общих советов, которые помогут вам сузить свою перспективу до уровня периферии.

Что такое граничное машинное обучение?

Повседневный опыт большинства людей с машинным обучением обычно связан с моделями, развернутыми в облаке. Google Translate, алгоритмы новостных лент Facebook, Amazon Alexa и большинство знакомых людям технологий машинного обучения не выполняются на стороне клиента приложения. Вместо этого эти массивные модели выполняют все свои вычисления в больших облачных средах, а приложение получает инструкции удаленно из облака.

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

Когда следует использовать периферийное машинное обучение?

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

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

Может ли ваша модель поместиться на встроенном устройстве?

Оптимизация вашей модели, чтобы она могла поместиться на небольшом устройстве и быстро работать, является основной частью разработки моделей машинного обучения для периферии, и, как мы увидим, есть ряд приемов, которые вы можете использовать, чтобы существенно сократить вашу модель. . Но у оптимизации есть свои пределы, и модели можно уменьшить только до определенного предела. Если вы используете по-настоящему массивные модели машинного обучения, такие как современные архитектуры Transformer для обработки естественного языка или зрения, заставить ваше приложение работать на периферии может быть просто невозможно (пока!).

Поддерживаются ли операции в вашей модели?

Многие платформы Edge ML поддерживают только самые распространенные операции. Хотя вы можете использовать модель, содержащую неподдерживаемые операции, работая на ЦП, вы существенно пожертвуете эффективностью и производительностью. Например, деформируемые свертки, которые приводят к повышению производительности в некоторых современных детекторах без привязки, могут быть несовместимы с вашей аппаратной платформой. Чтобы решить эти проблемы, вы можете либо полностью перейти на другую архитектуру, либо заменить неподдерживаемые операции поддерживаемыми (хотя при этом вы можете ожидать снижения точности). Фреймворки часто находятся в стадии быстрой разработки, и вы можете поэкспериментировать с ночными сборками, чтобы устранить подробные и неспецифические ошибки.

Безопасность и 100-процентная надежность вызывают беспокойство?

Поскольку им не требуется постоянное подключение к серверам, приложения периферийного машинного обучения по своей природе менее уязвимы к сбоям в работе сети. Для некоторых приложений время безотказной работы менее 100 % не представляет существенных проблем, даже если это создает проблемы для пользователей. Если ваш умный динамик не слышит, как вы просите сыграть Майли Сайрус, вечеринка может прекратиться, но все будет в порядке.

Однако для других приложений задержка передачи или время простоя просто неприемлемы. Самоуправляемые автомобили должны обрабатывать данные на борту, чтобы автомобиль мог продолжать работать, будь то в городе или в пустыне. Приложениям безопасности требуется такая же надежность, чтобы сетевые проблемы не стали угрозой безопасности или чтобы системы проверки не работали со сбоями и люди не могли попасть в здание. Короче говоря, если потеря подключения может привести к серьезному сбою или реальному физическому ущербу, вам, вероятно, лучше всего найти способ заставить ваше приложение работать на периферии.

Должны ли ваши данные оставаться на устройстве?

Учитывая природу типов данных, которые могут обрабатывать приложения периферийного машинного обучения, иногда лучше свести к минимуму передачу конфиденциальной информации через потенциально уязвимые сети. Самый известный пример — Apple Touch ID и Face ID, которые хранят и обрабатывают биометрические данные на устройстве. Хотя это также имеет решающее значение для обеспечения того, чтобы люди могли получить доступ к своим устройствам, даже когда они не в сети, оно также хранит конфиденциальную информацию — — отпечатки пальцев и черты лица пользователей, привязанные к их личности — — вне централизованных хранилищ, где они могут потенциально могут быть доступны злоумышленникам.

Альтернативные методы, такие как федеративное обучение или удаленная обработка хешированных данных, могут полностью исключить необходимость обработки данных на устройстве. Однако эти методы часто требуют сложной инфраструктуры для эффективной работы.

Каковы основные фреймворки Edge ML?

Организации выпустили и спонсировали ряд сред ML с открытым исходным кодом, каждая из которых имеет свои преимущества и ограничения. Вот основные игроки:

ТензорФлоу Лайт

TensorFlow Lite — это облегченная версия TensorFlow, ориентированная в первую очередь на оптимизацию для небольших двоичных файлов и эффективное выполнение моделей машинного обучения на устройствах ARM. TensorFlow Lite — это необходимая структура для развертывания на Google Edge TPU, которая лучше всего интегрируется с замороженными графами TensorFlow.

ПиТорч Мобильный

PyTorch Mobile — это версия PyTorch, предназначенная для работы на мобильных устройствах и имеющая встроенную поддержку интерпретатора для Android и iOS. Он имеет менее специализированную поддержку аппаратного ускорения (например, GPU, DSP, NPU) по сравнению с TensorFlow Lite и лучше всего интегрируется с моделями, разработанными с помощью PyTorch.

ТензорРТ

TensorRT — это библиотека NVIDIA для ускорения логического вывода, которая выполняет квантование моделей, слияние слоев, настройку ядра и многое другое. TensorRT разработан специально для графических процессоров NVIDIA и может использоваться как на облачном сервере графических процессоров, так и в среде встроенных устройств NVIDIA Jetson. Он изначально интегрируется с TensorFlow и MXNet и может принимать модели, сохраненные в формате ONNX.

ОпенВИНО

OpenVINO оптимизирован для процессоров Intel, интегрированных графических процессоров, Neural Compute Stick и Vision Processing Unit. Его оптимизатор моделей является кроссплатформенным и поддерживает модели, созданные с помощью TensorFlow, PyTorch (через ONNX), Caffe, MXNet и других. OpenVINO предоставляет механизм логического вывода, который компилирует преобразованную модель OpenVINO для оптимизации выполнения на устройствах Intel, включая процессоры.

Ядро МЛ 3

Core ML 3 — это собственная платформа машинного обучения Apple, оптимизированная для оборудования Apple с минимальным объемом памяти и энергопотреблением. Он имеет специальную поддержку для тонкой настройки моделей на устройстве с локальными данными пользователя и, как таковой, обеспечивает отличную поддержку конфиденциальности, избегая необходимости в централизованном сервере. Платформа поддерживает построение, обучение и вывод, а также поддерживает преобразование моделей из популярных сторонних платформ, таких как TensorFlow, PyTorch и scikit-learn.

Встроенная обучающая библиотека

Embedded Learning Library — это проект Microsoft с открытым исходным кодом для машинного обучения, в котором используется кроссплатформенный компилятор, специализированный для оборудования с ограниченными ресурсами.

Какие аппаратные решения существуют?

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

Потребительские устройства

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

Между тем, линейка смартфонов Google Pixel недавно объявила о включении проприетарного чипа Tensor. Помимо прочего, чип Tensor повысит возможности Pixel в вычислительной фотографии, которая включает в себя такие процессы, как объединение нескольких ночных фотографий для создания единого оптимального изображения, портретные режимы на основе ИИ и многое другое. Хотя Google еще не объявила, как будет использоваться ее специализированный чип машинного обучения, ожидается, что качество видео с телефонов Pixel может значительно улучшиться благодаря таким подполям компьютерного зрения, как сверхвысокое разрешение.

Микроконтроллеры и микрокомпьютеры

Микроконтроллеры и микрокомпьютеры, такие как Raspberry Pi и другие устройства на базе ARM, хотя и не предназначены для глубокого обучения, являются доступными, расширяемыми и модульными, что облегчает интеграцию внешнего оборудования, например, добавление камер или световых модулей. Однако выполнение сложных моделей будет расширять пределы скорости обработки и памяти этих устройств. Увеличить вычислительную мощность можно с помощью плат PCIe и USB-ускорителей, как описано ниже.

графические процессоры

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

NVIDIA Jetson предлагает семейство модулей, оснащенных графическими процессорами NVIDIA, в компактном форм-факторе. В отличие от семейства Coral от Google, у Jetson более широкий спектр продуктов с разной степенью вычислительной мощности. Подобно линейке продуктов Google Coral, NVIDIA предлагает платы для разработчиков, одноплатные компьютеры SoM, а также ускорители PCIe и M.2, подходящие для производственных сред.

Пограничные TPU

Однако графические процессоры предназначены для выполнения большего количества задач, чем просто преобразование изображений, и они также оптимизированы для кодирования видео, сжатия видео, затенения и т. д. Блоки тензорной обработки (TPU), специализированные чипы Google, специально разработанные для задач глубокого обучения, удаляют все эти дополнительные функции из графических процессоров, что делает их еще более специализированными для конкретных задач глубокого обучения. Edge TPU — это дополнительно оптимизированные TPU с низким энергопотреблением. предназначен для периферийных устройств. Они занимают очень мало места и хорошо интегрируются с TensorFlow Lite.

Продукты для разработки, в которых используются Edge TPU, включают доску для разработки Google Coral, одноплатный компьютер со встроенным Edge TPU и USB-ускорители, USB-накопитель, который лучше всего подходит для ускорения Edge TPU в существующих системах. Ускорители PCIe — это готовые к развертыванию устройства, которые интегрируют пограничные TPU с производственными системами.

Пользовательские SoC

Кроме того, ряд производителей аппаратного обеспечения, в том числе Ambarella, NXP, Texas Instruments, Xilinix и другие, производят встраиваемые устройства по индивидуальному заказу, предназначенные для различных реальных приложений. От FPGA до других специализированных SoC машинного обучения — быстро растет спектр встраиваемого оборудования, предназначенного для логического вывода ИИ.

Каковы важные шаги для развертывания моделей на встроенном устройстве?

Улучшайте свою модель, не увеличивая ее размер

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

Ознакомьтесь с оптимизацией для периферии

Помимо улучшения модели без увеличения ее размера, существуют способы напрямую уменьшить ее размер. Рассмотрите возможность регулярного включения этих методов при оптимизации для края:

  • Квантование: преобразование 32-битных чисел с плавающей запятой в 8-битные (или меньше!) целые числа. Квантуя веса вашей модели, можно значительно уменьшить пространство, необходимое для модели, и увеличить скорость логического вывода, при этом затраты на точность обычно минимальны. Это может быть выполнено после обучения (квантование после обучения) или во время (обучение с учетом квантования). Обучение с учетом квантования сводит к минимуму потерю точности во время логического вывода за счет немного более сложного режима обучения.
  • Структурное сокращение. Алгоритмы структурного сокращения определяют, например, целые каналы фильтров, которые оказывают наименьшее влияние на окончательную классификацию сети, и полностью удаляют их. Это уменьшает как двоичный размер модели, так и ее объем памяти, поскольку размеры тензоров весов уменьшаются, что приводит к меньшему объему памяти. Это также увеличивает скорость логического вывода, так как во время прямого прохода необходимо выполнить меньше вычислений.
  • Сокращение веса (разрежение).В отличие от структурного сокращения, сокращение веса «отключает» соединения, устанавливая определенные веса равными 0. С помощью алгоритмов сжатия, которые специализируются на эффективном хранении разреженных массивов, двоичный размер модели может быть уменьшенный. Поскольку весовые тензоры остаются прежними размерами, объем памяти модели после разрежения остается прежним. Однако некоторые механизмы логического вывода могут разумно преобразовывать эти нулевые веса в «не-OP», так что на самом деле никакие вычисления не выполняются. Пропуская значительную часть операций умножения и сложения, разреженная модель может выиграть от значительного увеличения скорости логического вывода. Совсем недавно в TensorFlow Lite появилась встроенная поддержка логических выводов с разреженными сетями.

Ожидайте проб и ошибок

Многие проблемы, возникающие при запуске моделей на периферии, возникают на очень низких уровнях компьютера: вы имеете дело не только с синтаксическими ошибками, но и с несовместимостью с вашей моделью и базовой системной архитектурой устройства. Отладка вещей на этом уровне, как и ожидалось, более сложна и менее ясна, чем поиск в Stack Overflow решения для исключения Python.

Другие оптимизации также не будут явно успешными или неудачными, пока вы не попытаетесь их выполнить — например, операция может быть передана от TPU к CPU на основе размера тензора без предупреждений, только для того, чтобы быть обнаруженной путем тестирования задержки во время вывода.

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

Связаться с нами

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

*Эта статья была впервые опубликована в блоге Strong Analytics здесь.