Машинное обучение становится необходимым для многих компаний, и они хотят использовать его для оптимизации своей деятельности и создания новых услуг. Одна из проблем заключается в том, что иногда вам нужно развернуть модель в среде с ограниченным подключением к Интернету и отсутствием операторов для управления инфраструктурой машинного обучения. В этом случае вам нужно использовать машинное обучение на Edge и иметь возможность удаленно развертывать и отслеживать свои модели и приложения.
AWS Panorama — это устройство машинного обучения от AWS с комплектом для разработки программного обеспечения и соответствующим сервисом AWS, который управляет устройствами и приложениями. Он ориентирован на работу с моделями компьютерного зрения и видеопотоками. Я получил устройство AWS Panorama от AWS для проверки и развернул пару приложений. Итак, в этом сообщении в блоге я хочу осветить основные темы, которые вам нужно знать об AWS Panorama, и о том, можно ли его применить в вашем случае.
Что делать и чего не делать
- Устройство анализирует только видеопотоки с IP-камер в локальной сети
- Устройство выводит видеопотоки с IP-камер с настраиваемой визуализацией поверх
- Устройство не сохраняет видеопотоки или изображения в облаке, если вы не реализуете это в коде.
- У устройства нет локального состояния (например, БД), поэтому события можно записывать только через облачный или локальный сервер.
- Устройство нельзя подключить по ssh или удаленно, поэтому вы можете устранять неполадки с помощью журналов телеметрии или облачных часов.
Архитектура приложения
Приложение AWS Panorama определяется как граф с узлами и ребрами (этот граф называется манифестом). Узлы — это модели, код, потоки камер, вывод и параметры. Каждый узел также имеет входы или выходы в зависимости от вывода и типа (например, код обычно вводит и выводит видео). Ребра соединяют разные узлы.
Например, самое простое приложение будет иметь следующую архитектуру:
Узлы
- Поток камеры
- Код
- Модель
- Выход
Края
- Поток с камеры ‹› Код
- Код ‹› Выход
Обратите внимание, что модель не связана ни с одним узлом, а вместо этого вызывается узлом «Код».
Артефакты кода
Артефакт кода определяется как образ контейнера Docker. Код на AWS Panorama управляет следующим:
- Обработка каждого изображения из видеопотока
- Предварительно обработайте изображение перед запуском модели
- Запуск модели на изображении
- Аннотирование изображения перед отправкой на вывод
- Создание журналов и метрик cloudwatch
Контейнер упакован с помощью Panorama-Cli и использует базовый док-образ панорамы public.ecr.aws/panorama/panorama-application.
Артефакты модели
AWS Panorama поддерживает большинство популярных фреймворков (Keras/MXNet/ONNX/Tensorflow/Torch), но требует использования формата, ожидаемого SageMaker Neo (подробнее см. https://docs.aws.amazon.com/sagemaker/latest/dg/neo- компиляция-подготовка-модель.html). Это связано с тем, что AWS Panorama использует Amazon SageMaker Neo для компиляции модели перед ее отправкой на устройство. Ожидается, что модель будет запускаться на изображении, но также может работать с несколькими входными данными.
Запуск локально
Лучший способ запустить приложение локально — использовать образцы AWS Panorama (https://github.com/aws-samples/aws-panorama-samples). В репозитории примеров есть блокноты (пример https://github.com/aws-samples/aws-panorama-samples/blob/main/samples/people_counter/people_counter_tutorial.ipynb), которые можно запускать в облаке или локально (требуется настройка среды докера).
Эта записная книжка позволяет сделать следующее:
- проверьте, как ваша модель будет преобразована в SageMaker Neo (используя задание компиляции SageMaker)
- проверьте, как ваш график и код будут работать на примере видео
- проверьте, как ваша модель будет работать на видео и как ваш код будет аннотировать ее
Все три описанных выше рабочих процесса можно выполнить без устройства AWS Panorama. Если у вас есть настроенное устройство, записная книжка покажет вам, как программно развернуть приложение и модель.
Развертывание приложения
Есть два способа развернуть ваше приложение — через веб-консоль и программно. Оба потребуют от вас:
- определили манифест, поэтому имейте это в виду перед развертыванием. Вы можете протестировать свой манифест, используя блокноты из абзаца выше.
- используйте панораму-cli для создания контейнера и приложения для упаковки. panorama-cli — это интерфейс командной строки для управления приложением AWS Panorama, который можно установить через pip (https://pypi.org/project/panoramacli/)
Если вы хотите развернуть примеры приложений:
- через веб-консоль — пример hello world, который вы можете использовать для тестирования развертывания и журналов https://docs.aws.amazon.com/panorama/latest/dev/gettingstarted-deploy.html
- программно — два семпла из репозитория https://github.com/aws-samples/aws-panorama-samples, которые мы обсуждали ранее
Кроме того, имейте в виду, что если вы хотите обновить модель или контейнер кода, вам необходимо обновить манифест и повторно развернуть приложение программно или через консоль.
Мониторинг
Устройство AWS Panorama можно отслеживать с помощью веб-консоли и журналов CloudWatch. Первое можно использовать для проверки того, что ваше устройство и видеопоток находятся в сети, а второе — для проверки правильности работы вашего приложения.
AWS Panorama передает журналы в cloudwatch для каждого приложения и устройства. Журналы приложений содержат журналы для каждого узла, а журналы устройств содержат журналы системного уровня.
Подробнее о логах описано здесь https://docs.aws.amazon.com/panorama/latest/dev/monitoring-logging.html
Краткое содержание
AWS Panorama имеет отличное оборудование и интеграцию с AWS, которая занимается развертыванием модели и кода, а также мониторингом. Чтобы понять, применимо ли это к вашему случаю, я бы рекомендовал попробовать наши примеры из репозитория https://github.com/aws-samples/aws-panorama-samples и запустить их в режиме локальной разработки или в облаке. Это даст вам много информации о том, как его можно использовать для вашего варианта использования.