Создание конвейера MLOps от начала до конца для визуальной проверки качества на краю – Часть 3
Создание MLOps конвейера для визуальной проверки качества на краю Шаги от начала до конца – Часть 3
Это часть 3 нашей серии, где мы разрабатываем и внедряем конвейер MLOps для визуальной контроля качества на краю. В этом посте мы сосредоточимся на автоматизации установки на крайнее устройство части конвейера MLOps от начала и до конца. Мы покажем вам, как использовать AWS IoT Greengrass для управления выводом модели на краю и как автоматизировать процесс с помощью AWS Step Functions и других сервисов AWS.
Обзор решения
В части 1 этой серии мы описали архитектуру нашего конвейера MLOps, который автоматизирует весь процесс машинного обучения (ML), от разметки данных до обучения модели и развертывания на краю. В части 2 мы показали, как автоматизировать разметку и обучение модели в рамках конвейера.
В качестве примера использования, использованного в этой серии, рассматривается решение визуального контроля качества, способное обнаруживать дефекты на металлических ярлыках, которое можно развернуть как часть процесса производства. Ниже приведена схема высокоуровневой архитектуры конвейера MLOps, которую мы определили в начале этой серии. Если вы еще не читали ее, мы рекомендуем ознакомиться с частью 1.
- Улучшите качество прогнозирования в индивидуальных моделях классификации с помощью Amazon Comprehend
- Быстрая и экономически эффективная настройка LLaMA 2 с помощью AWS Trainium
- Создайте приложение для суммирования HCLS-документов с помощью Falcon, используя Amazon SageMaker JumpStart
Автоматизация развертывания модели ML на краю
После того, как модель ML была обучена и прошла оценку, ее необходимо развернуть на производственной системе, чтобы получить коммерческую выгоду в виде прогнозирования по входным данным. В этом процессе может возникнуть сложность в краевой среде, где модели нужно развертывать и запускать на устройствах, которые часто находятся далеко от облачной среды, в которой модели были обучены. Вот некоторые из уникальных вызовов машинного обучения на краю:
- Модели ML часто требуют оптимизации из-за ограничений ресурсов на краевых устройствах
- Краевые устройства не могут быть переустановлены или заменены, как сервер в облаке, поэтому вам требуется надежный процесс развертывания модели и управления устройствами
- Связь между устройствами и облаком должна быть эффективной и безопасной, поскольку она часто проходит через доверенные сети низкой пропускной способности
Давайте посмотрим, как мы можем справиться с этими вызовами с помощью сервисов 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 брокера, с помощью которых можно обеспечить безопасное взаимодействие с облаком с поддержкой конечно-конечного шифрования. Вы можете использовать эти возможности для эффективной загрузки результатов вывода и изображений.
В рабочей среде обычно используется промышленная камера, предоставляющая изображения, для которых модель машинного обучения должна давать прогнозы. Для настройки мы имитируем этот входной сигнал изображения, загружая заранее заданный набор изображений в определенную директорию устройства Edge. Затем мы используем эти изображения в качестве входных параметров для модели.
Мы разделили процесс развертывания и вычисления на три последовательных шага для развертывания модели машинного обучения, обученной в облаке, на устройстве Edge и использования ее для прогнозов:
- Подготовка – Упаковка обученной модели для развертывания на устройстве Edge.
- Развертывание – Передача модели и компонентов вычисления с облака на устройство Edge.
- Вычисление – Загрузка модели и выполнение кода вычисления для прогнозирования изображений.
Следующая структурная схема показывает детали этого трехшагового процесса и то, как мы реализовали его с помощью сервисов AWS.
В следующих разделах мы обсудим подробности каждого шага и покажем, как встраивать этот процесс в автоматизированный и повторяемый оркестрационный и рабочий процесс CI/CD для моделей машинного обучения и соответствующего кода вычислений.
Подготовка
Устройства Edge часто имеют ограниченные ресурсы вычислений и памяти по сравнению с облачной средой, где мощные процессоры и графические процессоры могут легко выполнять модели машинного обучения. Различные техники оптимизации моделей позволяют настроить модель для конкретной программной или аппаратной платформы, увеличивая скорость прогнозирования без потери точности.
В этом примере мы экспортировали обученную модель в формате ONNX для переносимости, возможных оптимизаций, а также оптимизированных сервисов вычисления на устройстве Edge, и зарегистрировали модель в реестре моделей Amazon SageMaker Model Registry. На этом шаге мы создаем новый компонент модели Greengrass, включающий последнюю зарегистрированную модель для последующего развертывания.
Развертывание
Безопасный и надежный механизм развертывания очень важен при развертывании модели с облака на устройство Edge. Поскольку AWS IoT Greengrass уже содержит надежную и безопасную систему развертывания на устройстве Edge, мы используем ее для своих целей развертывания. Перед тем как мы подробно рассмотрим наш процесс развертывания, давайте кратко вспомним, как работают развертывания AWS IoT Greengrass. В основе системы развертывания AWS IoT Greengrass находятся компоненты, которые определяют программные модули, развернутые на устройстве Edge, работающем на платформе AWS IoT Greengrass Core. Они могут быть как частные компоненты, созданные вами, так и общедоступные компоненты, предоставленные либо AWS, либо более широким сообществом Greengrass. Несколько компонентов могут быть объединены вместе в одном развертывании. Конфигурация развертывания определяет компоненты, включенные в развертывание, и целевые устройства развертывания. Она может быть определена в файле конфигурации развертывания (JSON) или через консоль AWS IoT Greengrass при создании нового развертывания.
Мы создаем следующие два компонента Greengrass, которые затем развертываются на устройстве Edge через процесс развертывания:
- Упакованная модель (частный компонент) – Этот компонент содержит обученную модель машинного обучения в формате ONNX.
- Код вычислений (частный компонент) – Кроме самой модели машинного обучения, нам необходимо реализовать некоторую логику приложения для обработки задач, таких как подготовка данных, взаимодействие с моделью для вычислений и постобработка результатов. В нашем примере мы разработали частный компонент на языке Python для выполнения следующих задач:
- Установка необходимых компонентов времени выполнения, например пакета Ultralytics YOLOv8 Python.
- Вместо использования изображений из потока видео с камеры мы имитируем это, загружая подготовленные изображения из определенной директории и подготавливая данные изображения в соответствии с требованиями модели.
- Вызовы вычислений по загруженной модели с подготовленными данными изображения.
- Проверка прогнозов и выгрузка результатов вычислений обратно в облако.
Если вы хотите более подробно ознакомиться с кодом вычислений, который мы создали, обратитесь к репозиторию 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 от начала до конца для визуального контроля качества на устройстве на краю сети. Мы рассмотрели дополнительные вызовы, с которыми сталкиваются при развертывании модели машинного обучения на краю сети, такие как упаковка модели или сложная организация развертывания. Мы полностью автоматизировали процесс построения конвейера, чтобы мы могли развертывать наши модели в производство надежным, безопасным, повторяемым и отслеживаемым способом. Не стесняйтесь использовать созданную в этой серии архитектуру и реализацию в качестве отправной точки для вашего следующего ML-проекта. Если у вас есть вопросы о том, как спроектировать и построить подобную систему для вашей среды, пожалуйста, свяжитесь с нами. Для других тем и случаев использования обратитесь к нашим блогам по Машинному обучению и Интернету вещей.