Узнайте, как легко настроить свое первое приложение Panorama

Почти год назад я опубликовал пошаговое руководство здесь, на сайте Towards Data Science, по развертыванию приложения для обнаружения объектов на AWS Panorama. Статья была довольно длинной (17 минут на чтение!) и содержала множество тонких шагов. Создать приложение Panorama с помощью официальных инструментов непросто: вы должны использовать фиксированную и сложную структуру проекта, помнить множество параметров, касающихся вашего проекта, и передавать их инструментам каждый раз, когда вы их вызываете. Затем файлы и папки должны быть названы определенным образом, и вы должны поддерживать согласованные копии одной и той же информации (например, свойства модели глубокого обучения) в разных частях проекта. Все эти домашние задачи не приносят реальной ценности для бизнеса: они служат только для поддержания проекта и шаблонного кода в актуальном состоянии.

За последние несколько месяцев я создал и развернул дюжину приложений Panorama, испытав это бремя на себе. Очевидно, появились некоторые повторяющиеся задачи и шаблоны, которые подтолкнули меня к максимально возможной автоматизации процесса установки и развертывания любого приложения Panorama. Я рад представить cookiecutter-panorama, инструмент для создания проектов AWS Panorama и систему сборки. Давайте углубимся, начав с определения приложения AWS Panorama.

Анатомия приложения Panorama

Если вы пропустили предыдущие эпизоды, AWS Panorama — это аппаратно-программная платформа, которая позволяет запускать приложения компьютерного зрения (CV), анализирующие видеопотоки с локальных камер с интернет-протоколом (IP).

Приложение Panorama – это набор упакованных моделей глубокого обучения, кода бизнес-логики и структуры манифеста (также называемой "графом приложения"), которая определяет конвейер данных между этими компонентами.

В случае «классических» приложений Panorama модель глубокого обучения (обученная в Pytorch, Tensorflow или MXNet) упаковывается в артефакт, называемый «активом модели», в процессе сборки приложения. Точно так же код вашей бизнес-логики (написанный на Python с использованием SDK приложения Panorama) упакован в артефакт «актив кода». Эти артефакты регистрируются и загружаются в вашу учетную запись AWS. Всякий раз, когда вы хотите развернуть свое приложение CV на устройстве Panorama, вы должны предоставить структуру манифеста, которая ссылается на эти артефакты и описывает, как устройство должно их подключать.

Таким образом, приложение Panorama слабо связано с набором пакетов глубокого обучения и бизнес-логики, связанных вместе файлом манифеста. Разработчик должен постоянно синхронизировать ссылки в файле манифеста приложения и внутри пакетов. Это одна из самых больших задач обслуживания, которую может автоматизировать cookiecutter-panorama.

печенье

Давайте поговорим о том, как сделать печенье!

Cookiecutter — это утилита командной строки, которая создает проекты из cookiecutter (шаблонов проектов). Он стал стандартом де-факто для создания проектов в экосистеме Python, потому что его красивый простой дизайн сочетается с привлекательными функциями. В настоящее время на GitHub опубликовано более 7000 шаблонов проектов cookiecutter. Cookiecutter-panorama добавляет в этот пантеон шаблон приложения Panorama.

Начать!

Сначала установите инструмент командной строки cookiecutter с помощью pip (pip install cookiecutter), conda (conda install -c conda-forge cookiecutter) или pipx (pipx install cookiecutter, рекомендуемый способ).

Создать проект приложения Panorama очень просто:

$ cookiecutter https://github.com/mrtj/cookiecutter-panorama.git

Механизм шаблонов запросит у вас значение набора параметров. Однако он также предоставляет разумные значения по умолчанию, которые в большинстве случаев можно оставить такими, какие они есть, и подтвердить выбор.

Вам нужно настроить только два параметра: project_name и s3_working_bucket. Последнее должно быть именем существующей корзины S3 в вашей учетной записи, где у вас есть права на чтение/запись. Подробное описание параметров вы можете найти в README файле cookiecutter-panorama.

$ cookiecutter https://github.com/mrtj/cookiecutter-panorama.git
project_name [Panorama Video Processor]: ↲
project_slug [panorama_video_processor]: ↲
s3_working_bucket [my_bucket]: my_real_bucket
s3_working_path [s3://my_real_bucket/panorama_projects/panorama_video_processor]: ↲
camera_node_name [camera_input]: ↲
display_node_name [display_output]: ↲
code_package_name [panorama_video_processor_logic]: ↲
code_package_version [1.0]: ↲
code_asset_name [panorama_video_processor_logic_asset]: ↲
code_node_name [panorama_video_processor_logic_node]: ↲
model_package_name [panorama_video_processor_model]: ↲
model_package_version [1.0]: ↲
model_asset_name [panorama_video_processor_model_asset]: ↲
model_node_name [panorama_video_processor_model_node]: ↲
model_input_name [input0]: ↲
model_processing_width [224]: ↲
model_processing_height [224]: ↲

Cookiecutter сгенерирует ваш проект в каталоге с именем параметра project_slug, в приведенном выше случае panorama_video_processor:

$ cd panorama_video_processor

Батарейки в комплекте: система сборки

Как только проект будет сгенерирован, вы можете начать взаимодействовать с Makefile. Система сборки предоставляет широкий набор функций: настроить репозиторий git, создать контейнер приложения и модель глубокого обучения, загрузить пакеты в свою учетную запись AWS, готовые к развертыванию на устройстве Panorama, запустить приложение на рабочей станции разработки с помощью Test Utility, защитит вас от утечки идентификатора вашей учетной записи AWS в общедоступные репозитории git и т. д. Полный список функций см. в файле README, созданном в рамках проекта Panorama. Здесь — превью.

Некоторые задачи, предоставляемые cookiecutter-panorama, вам могут быть полезны:

  • make init-repo: инициализировать репозиторий git
  • Установите необходимые инструменты сборки: aws-cli, panorama-cli и docker. Настройте aws-cli на учетные данные учетной записи, в которой зарегистрировано устройство Panorama.
  • make import: импортируйте проект в свою учетную запись AWS
  • make build: создайте проект и создайте фиктивную модель глубокого обучения, которую впоследствии можно будет заменить реальной моделью. Фиктивная модель будет вычислять среднее значение каналов RGB входного видеокадра, используя инфраструктуру пакета модели и реальный графический процессор устройства Panorama.
  • make package: загрузите скомпилированный контейнер приложения и упакованную модель глубокого обучения в свою учетную запись AWS. Этот скрипт также выводит путь к скомпилированному манифесту JSON.

Затем вы можете взять манифест в формате JSON, перейти в Консоль AWS Panorama и развернуть свое приложение!

Вопросы? Проблемы? Предложения? Откройте вопрос в проекте cookiecutter-panorama github или свяжитесь с нами по указанным ниже контактам!

Об авторе

Янош Толгьеси (Janos Tolgyesi) — специалист по созданию сообщества AWS и руководитель группы машинного обучения в Neosperience с более чем 5-летним опытом работы с технологиями машинного обучения и более 8-летним опытом работы в AWS. Он любит что-то создавать, пусть это будет приложение для видеоаналитики на периферии или профилировщик пользователей на основе событий истории кликов. Вы можете найти меня в Twitter, Medium и LinkedIn.

Открытый проект cookiecutter-panorama был поддержан компанией Neosperience.

Отдельное спасибо Luca Bianchi за корректуру этой статьи.