Нашей команде уже более 10 лет, и мы создаем решения для корпоративных клиентов билайна. Мы работаем в области машинного обучения и больших данных. У нас сформированы 12 продуктовых команд. Один из наших продуктов – это платформа для видеоаналитики.

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

Платформа видеоаналитики от билайн бизнес

Верхнеуровневое решение состоит из следующих компонентов: 

  • кабинет клиента;
  • кабинет администратора;
  • backend-сервисы;
  • источники информации (это могут быть как камеры, которые передают видеопоток, так и информация с вычислительных плат, то есть передается результат уже обработанного видеоряда на вычислительной плате).
Снимок экрана 2023-04-03 в 17.50.08.png

Настройка системы — k8s или k3s?

Есть два способа получения информации от внешних источников:

  1. Видеопоток с камеры.
  2. Результат обработки видеопотока на микрокомпьютере.

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

Реализуется это все в Kubernetes, который еще называют k8s — это портативная платформа с открытым исходным кодом для управления сервисами. Но дело в том, что k8s сложен в настройке, требует значительных ресурсов и может подойти далеко не для каждого кейса. Его «младший брат» — это k3s, более легкое решение, своего рода дистрибутив Kubernetes. Мы взяли k3s как основу для инфраструктуры для микрокомпьютеров.

А теперь на одном примере расскажу, как в реальности происходит настройка системы с использованием микрокомпьютеров. 

  1. Начальная настройка. На первом этапе происходит развертывание необходимой инфраструктуры на микрокомпьютере. Нам было важно организовать процесс и упаковать инфраструктуру так, чтобы прошивка занимала минимум времени. Согласитесь, прошить одну-две платы — это одна задача. Но когда необходимо прошить, например, сто плат, то и десять минут разницы существенно отражается в человеко-часах и, соответственно, в бюджете. Мы упаковали инфраструктуру в k3s, прошивка одной платы заняла у нас не более часа вместе с установкой нужной ОС и jetpack (в случае использования Jetson).
  2. Мониторинг устройств. Конечно, бывают сбои. Например, сбои в питании микрокомпьютеров, в канале видеокамера → микрокомпьютер, в каких-то сетевых ограничениях со стороны заказчика. Очевидно, что нужен мониторинг доступности и исправности работы. Мы организовали сбор основных метрик на основе telegraf и алертинг (система автоматического оповещения) в мессенджеры и почту.

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

Снимок экрана 2023-04-03 в 19.34.35.png

Новые вызовы

Затрону довольно болезненную тему об ограничениях, с которыми мы столкнулись в доступности микрокомпьютеров. Изначально мы были ориентированы на продукцию компании NVIDIA. Были приемлемое соотношение цены и производительности плат и удобные интерфейсы по настройке устройств. Сейчас мы вынуждены искать альтернативные решения.

Мы сфокусировались на двух направлениях:

  1. Переход на доступные микрокомпьютеры.
  2. Переход на использование CPU.

Если переход на доступные микрокомпьютеры (Khadas, Xilinx) вынуждал нас рефакторить процесс подготовки инфраструктуры и процесс прошивания девайсов, то переход на CPU (центральный процессор) был логичным и оптимальным решением. 

Снимок экрана 2023-04-03 в 19.33.04.png

Некоторые проекты не требуют скорости GPU для их успешной реализации. Если мы говорим об обработке видеопотока, то для многих проектов приемлемая частота обработки изображений – это пять кадров в секунду. Это, в свою очередь, 100-200 мс на цикл обработки изображения. Многие архитектуры нейросетей на современных процессорах с запасом укладываются в данные цифры. Кроме того, существуют библиотеки для оптимизации нейросетей под особенности архитектуры.

На чем мы делаем инференс

Инференс — это вызов нейронной сети. Выполняем инференс мы на Triton — специальном сервисе по деплою нейросетей от NVIDIA. «Тритон» удобен тем, что может вычислять инференс на разных форматах нейросетей и может эффективно скейлиться на GPU-ресурсы, а также содержит много различных фичей. У нас «зоопарк» из видеокарт: уже немолодые T4, более современные A100 и v100. И здесь хочу подсветить важный момент мониторинга нагрузки «железяк»: в зависимости от используемых архитектур нейросетей карты могут обрабатывать примерно следующие цифры видеопотоков (смотри иллюстрацию). Для стабильной работы сервисов и для обеспечения SLA-сервиса (Service level agreement — Соглашение об уровне услуг) клиентам крайне важно это отслеживать. Поиск коробочных решений по распределению видеопотоков на карты не дал успехов, поэтому мы разрабатывали свое решение по мониторингу нагрузки на GPU на основе статистики от «Тритона».

Снимок экрана 2023-04-03 в 18.41.54.png

Цикл разработки решений

У нас есть как коробочные решения, так и кастомная разработка под заказчика. Кастомная разработка требует обучения нейросетей и настройки визуализации необходимых метрик. Мы довольно много ресурсов потратили, организовывая MlOps-процесс (набор практик, нацеленных на надежное и эффективное развертывание и поддержание моделей машинного обучения). Нам в целом удалось добиться прозрачности процесса и некоторой оптимизации по времени. 

Цикл разработки выглядит примерно так:

  1. Выбирается архитектура нейросети.
  2. Размечаются данные в случае необходимости.
  3. Сетка дообучается (transfer learning).
  4. В случае удовлетворительных метрик далее выполняется этап снятия метрик с результата работы нейросети.

Направления развития

Мы намерены развивать и создавать коробочные решения — увеличивать охват рынка готовыми продуктами. Интегрироваться с партнерами — встраивать наши решения в инфраструктуру клиента. Развивать ML-экспертизу — проводить анализ новых архитектур под наши задачи; разрабатывать и применять передовые подходы к обучению, разметки, деплою. Развивать автоматизацию цикла обучения с целью снижения time-to-market.

Снимок экрана 2023-04-03 в 19.37.03.png