Это третья часть нашей серии статей, в которой мы проектируем и реализуем конвейер MLOps для визуального контроля качества на периферии. В этом посте мы сосредоточимся на том, как автоматизировать часть периферийного развертывания сквозного конвейера MLOps. Мы покажем вам, как использовать AWS IoT Greengrass для управления логическими выводами моделей на периферии и как автоматизировать этот процесс с помощью AWS Step Functions и других сервисов AWS.
Обзор решения
В первой части этой серии мы описали архитектуру нашего сквозного конвейера MLOps, который автоматизирует весь процесс машинного обучения (ML), от маркировки данных до обучения модели и развертывания на периферии. Во второй части мы показали, как автоматизировать части конвейера, связанные с маркировкой и обучением моделей.
Примером варианта использования, используемого в этой серии, является решение для визуального контроля качества, которое может обнаруживать дефекты на металлических бирках, которые можно использовать в рамках производственного процесса. На следующей диаграмме показана высокоуровневая архитектура конвейера MLOps, которую мы определили в начале этой серии статей. Если вы еще не читали, рекомендуем просмотреть Часть 1.
Автоматизация периферийного развертывания модели машинного обучения
После обучения и оценки модели машинного обучения ее необходимо развернуть в производственной системе, чтобы создать ценность для бизнеса путем прогнозирования входящих данных. Этот процесс может быстро усложниться в периферийных условиях, когда модели необходимо развертывать и запускать на устройствах, которые часто расположены далеко от облачной среды, в которой модели обучались. Ниже приведены некоторые проблемы, уникальные для машинного обучения на периферии:
- Модели машинного обучения часто требуют оптимизации из-за ограничений ресурсов на периферийных устройствах.
- Edge-устройства нельзя перераспределить или даже заменить, как сервер в облаке, поэтому вам необходим надежный процесс развертывания модели и управления устройствами.
- Связь между устройствами и облаком должна быть эффективной и безопасной, поскольку она часто проходит через ненадежные сети с низкой пропускной способностью.
Давайте посмотрим, как мы можем решить эти проблемы с помощью сервисов AWS в дополнение к экспорту модели в формат ONNX, который позволяет нам, например, применять такие оптимизации, как квантование, чтобы уменьшить размер модели для ограничивающих устройств. ONNX также обеспечивает оптимизированную среду выполнения для наиболее распространенных периферийных аппаратных платформ.
Если разобрать процесс периферийного развертывания, нам потребуются два компонента:
- Механизм развертывания для доставки модели, который включает в себя саму модель и некоторую бизнес-логику для управления моделью и взаимодействия с ней.
- Механизм рабочего процесса, который может организовать весь процесс, чтобы сделать его надежным и повторяемым.
В этом примере мы используем различные сервисы AWS для создания механизма автоматического периферийного развертывания, который объединяет все необходимые компоненты, которые мы обсуждали.
Сначала мы моделируем периферийное устройство. Чтобы упростить вам сквозной рабочий процесс, мы используем экземпляр Amazon Elastic Compute Cloud (Amazon EC2) для имитации периферийного устройства, установив на него программное обеспечение AWS IoT Greengrass Core. Вы также можете использовать экземпляры EC2 для проверки различных компонентов в процессе контроля качества перед развертыванием на реальном периферийном производственном устройстве. AWS IoT Greengrass — это среда выполнения и облачный сервис Интернета вещей (IoT) с открытым исходным кодом, который помогает создавать, развертывать и управлять программным обеспечением периферийных устройств. AWS IoT Greengrass упрощает создание, развертывание и управление программным обеспечением периферийных устройств безопасным и масштабируемым способом. После установки программного обеспечения AWS IoT Greengrass Core на свое устройство вы можете добавлять или удалять функции и компоненты, а также управлять приложениями своих устройств IoT с помощью AWS IoT Greengrass. Он предлагает множество встроенных компонентов, которые облегчат вашу жизнь, например компоненты брокера StreamManager и MQTT, которые вы можете использовать для безопасного взаимодействия с облаком, поддерживая сквозное шифрование. Вы можете использовать эти функции для эффективной загрузки результатов вывода и изображений.
В производственной среде обычно используется промышленная камера, передающая изображения, для которых модель машинного обучения должна давать прогнозы. В нашей настройке мы имитируем этот ввод изображения, загружая набор изображений в определенный каталог на периферийном устройстве. Затем мы используем эти изображения в качестве входных данных для модели.
Мы разделили весь процесс развертывания и вывода на три последовательных этапа, чтобы развернуть обученную в облаке модель машинного обучения в периферийной среде и использовать ее для прогнозирования:
- Подготовить – Упакуйте обученную модель для развертывания на периферии.
- Развертывать – Перенос компонентов модели и вывода из облака на периферийное устройство.
- Вывод – Загрузите модель и запустите код вывода для прогнозирования изображений.
На следующей диаграмме архитектуры показаны подробности этого трехэтапного процесса и то, как мы реализовали его с помощью сервисов AWS.
В следующих разделах мы обсудим детали каждого шага и покажем, как внедрить этот процесс в автоматизированный и повторяемый рабочий процесс оркестрации и CI/CD как для моделей ML, так и для соответствующего кода вывода.
Подготовить
Периферийные устройства часто имеют ограниченные вычислительные ресурсы и память по сравнению с облачной средой, где мощные процессоры и графические процессоры могут легко запускать модели машинного обучения. Различные методы оптимизации модели позволяют адаптировать модель для конкретной программной или аппаратной платформы, чтобы увеличить скорость прогнозирования без потери точности.
В этом примере мы экспортировали обученную модель в конвейере обучения в формат ONNX для обеспечения переносимости, возможной оптимизации, а также оптимизации среды выполнения на периферии и зарегистрировали модель в реестре моделей Amazon SageMaker. На этом этапе мы создаем новый компонент модели Greengrass, включая последнюю зарегистрированную модель, для последующего развертывания.
Развертывать
Безопасный и надежный механизм развертывания является ключевым моментом при развертывании модели из облака на периферийное устройство. Поскольку AWS IoT Greengrass уже включает в себя надежную и безопасную систему периферийного развертывания, мы используем ее для наших целей развертывания. Прежде чем мы подробно рассмотрим процесс развертывания, давайте кратко рассмотрим, как работает развертывание AWS IoT Greengrass. В основе системы развертывания AWS IoT Greengrass лежат компоненты, которые определяют программные модули, развернутые на периферийном устройстве, на котором работает AWS IoT Greengrass Core. Это могут быть либо частные компоненты, которые вы создаете, либо общедоступные компоненты, предоставляемые AWS или более широким сообществом Greengrass. Несколько компонентов могут быть объединены в рамках развертывания. Конфигурация развертывания определяет компоненты, включенные в развертывание, и целевые устройства развертывания. Его можно определить либо в файле конфигурации развертывания (JSON), либо через консоль AWS IoT Greengrass при создании нового развертывания.
Мы создаем следующие два компонента Greengrass, которые затем развертываются на периферийном устройстве в процессе развертывания:
- Пакетная модель (частный компонент) – Этот компонент содержит обученную модель и модель машинного обучения в формате ONNX.
- Код вывода (частный компонент) – Помимо самой модели МО, нам необходимо реализовать некоторую логику приложения для выполнения таких задач, как подготовка данных, связь с моделью для вывода и постобработка результатов вывода. В нашем примере мы разработали частный компонент на основе Python для решения следующих задач:
- Установите необходимые компоненты среды выполнения, такие как пакет Python Ultralytics YOLOv8.
- Вместо того, чтобы брать изображения из прямой трансляции с камеры, мы имитируем это, загружая подготовленные изображения из определенного каталога и подготавливая данные изображения в соответствии с входными требованиями модели.
- Сделайте вызовы вывода для загруженной модели с подготовленными данными изображения.
- Проверьте прогнозы и загрузите результаты вывода обратно в облако.
Если вы хотите более подробно изучить созданный нами код вывода, обратитесь к Репозиторий GitHub.
Вывод
Процесс вывода модели на периферийном устройстве автоматически запускается после завершения развертывания вышеупомянутых компонентов. Пользовательский компонент вывода периодически запускает модель машинного обучения с изображениями из локального каталога. Результатом вывода для каждого изображения, возвращенного из модели, является тензор со следующим содержимым:
- Оценка уверенности – Насколько уверена модель в отношении обнаружений
- Координаты объекта – Координаты царапины (x, y, ширина, высота), обнаруженные моделью на изображении.
В нашем случае компонент вывода отправляет результаты вывода в конкретную тему MQTT в AWS IoT, где их можно прочитать для дальнейшей обработки. Эти сообщения можно просмотреть с помощью тестового клиента MQTT на консоли AWS IoT для отладки. В производственных условиях вы можете автоматически уведомить другую систему, которая позаботится об удалении неисправных металлических бирок с производственной линии.
оркестровка
Как видно из предыдущих разделов, требуется несколько шагов для подготовки и развертывания модели машинного обучения, соответствующего кода вывода и необходимой среды выполнения или агента на периферийном устройстве. Step Functions — это полностью управляемый сервис, который позволяет вам организовывать эти отдельные шаги и проектировать рабочий процесс в виде конечного автомата. Бессерверный характер этого сервиса и встроенные возможности Step Functions, такие как интеграция API сервисов AWS, позволяют быстро настроить этот рабочий процесс. Встроенные возможности, такие как повторные попытки или ведение журнала, являются важными моментами для создания надежной оркестровки. Более подробную информацию об определении конечного автомата см. Репозиторий GitHub или проверьте график конечного автомата в консоли Step Functions после развертывания этого примера в своей учетной записи.
Развертывание инфраструктуры и интеграция в CI/CD
Конвейер CI/CD для интеграции и создания всех необходимых компонентов инфраструктуры построен по той же схеме, что и на рис. Часть 1 этой серии. Мы используем AWS Cloud Development Kit (AWS CDK) для развертывания необходимых конвейеров из AWS CodePipeline.
Обучение
Существует несколько способов построения архитектуры автоматизированной, надежной и безопасной системы развертывания периферийной модели машинного обучения, которые часто сильно зависят от варианта использования и других требований. Однако вот несколько уроков, которыми мы хотели бы поделиться с вами:
- Заранее оцените, подходят ли дополнительные требования к вычислительным ресурсам AWS IoT Greengrass вашему случаю, особенно с ограниченными периферийными устройствами.
- Создайте механизм развертывания, который включает этап проверки развернутых артефактов перед запуском на периферийном устройстве, чтобы гарантировать, что во время передачи не произошло никакого вмешательства.
- Рекомендуется сохранять компоненты развертывания в AWS IoT Greengrass как можно более модульными и автономными, чтобы иметь возможность развертывать их независимо. Например, если у вас есть относительно небольшой модуль кода вывода, но большая модель машинного обучения с точки зрения размера, вы не всегда хотите развертывать их оба, если изменился только код вывода. Это особенно важно, если у вас ограниченная пропускная способность или дорогое подключение периферийных устройств.
Заключение
На этом завершается наша серия из трех частей, посвященная построению сквозного конвейера MLOps для визуального контроля качества на периферии. Мы рассмотрели дополнительные проблемы, возникающие при развертывании модели машинного обучения на периферии, такие как упаковка модели или сложная оркестровка развертывания. Мы реализовали конвейер полностью автоматически, чтобы мы могли запускать наши модели в производство надежным, безопасным, повторяемым и отслеживаемым способом. Не стесняйтесь использовать архитектуру и реализацию, разработанные в этой серии, в качестве отправной точки для вашего следующего проекта с поддержкой машинного обучения. Если у вас есть вопросы о том, как спроектировать и построить такую систему для вашей среды, свяжитесь с нами. Другие темы и варианты использования можно найти в наших блогах о машинном обучении и IoT.
Об авторах
Майкл Рот — старший архитектор решений в AWS, помогающий клиентам-производителям в Германии решать их бизнес-задачи с помощью технологий AWS. Помимо работы и семьи, он увлекается спортивными автомобилями и любит итальянский кофе.
Йорг Верле — архитектор решений в AWS, работающий с производственными заказчиками в Германии. Будучи страстным поклонником автоматизации, Йорг до прихода в AWS работал разработчиком программного обеспечения, DevOps-инженером и инженером по надежности объектов. Помимо облаков, он амбициозный бегун и любит проводить время со своей семьей. Так что, если у вас есть задача DevOps или вы хотите пробежаться: сообщите ему об этом.
Йоханнес Лангер — старший архитектор решений в AWS, работающий с корпоративными клиентами в Германии. Йоханнес увлечен применением машинного обучения для решения реальных бизнес-задач. В личной жизни Йоханнес любит работать над проектами по благоустройству дома и проводить время на свежем воздухе со своей семьей.