СХД – это системы хранения данных, сервера или иные устройства с большим количеством установленных дисков и системами быстрого доступа к ним с гарантией сохранности информации (например, аппаратные или программные RAID-контроллеры). Если речь идёт про хранение видео с нескольких камер, то специализированных решений не требуется. СХД или обычные диски будут использоваться для хранения видеоархива и там же или на отдельном носителе будут храниться события (результат детекции, например, нарушения ПДД или пресечение запретных зон) для дальнейшего доступа к ним и анализа. Но если камер много, например, 80 штук и мы рассматриваем поток RTSP Full HD, 15 FPS с дорожных камер, то зарегистрированных событий в сутки будет уже около 100 Гб. Для хранения таких объемов данных требуются уже специализированные решения. Мы остановили свой выбор на СХД от компании QNAP, куда смогли встроить свой собственный продукт Cumulator. Цель и задача этого продукта – сбор событий с множества устройств: серверов для инференса (исполнения нейронных сетей), камер или микрокомпьютеров, установленных в непосредственной близости от камер.
Сервер на базе Intel NUC, который осуществляет обработку данных с 80 камер с агрегацией этих данных через ПО Cumulator
Цели и задачи, которые решает программный продукт Cumulator:
Для интеграции мы остановились на QNAP AppCenter, т.к. внутри используются Docker-контейнеры, в рамках которых может работать программное обеспечение сторонних разработчиков. Тестовое оборудование QNAP:
СХД QNAP для агрегации данных в объектовой видеоаналитике
Для инференса (исполнения нейронных сетей) применяется три типа устройств: сервера в ДЦ в стойках на Intel NUC8i5BEK в форм-факторе 1U, сервера на Intel VCA2 на платформе Supermicro 1U, камеры с установленным в них ПО (Axis, Vivotek и др.), микрокомпьютеры наружной установки (в нашем варианте это или ARM на базе FriendlyARM Nano Pi M4, или х86 UP Board Intel Atom X5). Далее, с множества устройств (например, 2 сервера, 15 камер, 30 микрокомпьютеров) требуется агрегация и хранение данных. Для этого мы выбрали СХД от QNAP.
Общая схема работы гибридного инференса
Все ПО было запущено на QNAP TVS-871T, Intel Core(TM) i5-4590S CPU 3.00GHz, Version 4.4.1.1086 (2019/10/10), Linux-kernel 4.14.24-qnap, под system-docker Version:17.09.1-ce, API version: 1.32, OS/Arch: linux/amd64
При тестировании решения СХД укомплектовали дисками Seagate 7200 Exos 7E2 объемом 1 Tb.
Cumulator запустился из консоли с помощью system-docker и через Container Station V2.0.356 (приложение в GUI-обертке для docker из AppCenter).
QNAP Container Station
Параллельно мы протестировали работу инференса на СХД. Мы смогли запустить инференс только в консоли на system-docker. Причина – в графическом интерфейсе нет настроек по расширенному монтированию разделов (проблема всех GUI-приложений — урезание настроек, которые обычным пользователям не нужны).
Docker-контейнеры собираются из образа с помощью docker-compose, на этом этапе сборку из Dockerfile не делали. Строка запуска выглядит так:
Как можно заметить, мы запустили Docker в привилегированном режиме для того, чтобы ПО смогло обнаружить USB-ключи Sentinel (все порты, так как мы заранее не знаем куда могут быть вставлены ключи, в каком количестве и не будут ли они потом перемещены на другой порт). На этом этапе запуск в привилегированном режиме посчитали приемлемым.
Приложение Cumulator, запущенное на QNAP со статистикой потребления ресурсов CPU, RAM:
Приложение Cumulator, запущенное на СХД QNAP
По статистике потребления ресурсов видно, что их достаточно в рамках СХД. Фактически, инференс, т.е. исполнение нейронных сетей, выполняется на удаленных устройствах (серверах, камерах, специализированных устройствах рядом с камерами), а агрегацией, сборкой и хранением данных занимается само СХД со специализированным ПО. Это программное обеспечение собирает данные по REST API и по мере необходимости отдает смежным информационным системам.
Сервер на базе Intel NUC, который осуществляет обработку данных с 80 камер с агрегацией этих данных через ПО Cumulator
Цели и задачи, которые решает программный продукт Cumulator:
- Сборка данных с множества устройств
- Единая точка доступа к событиям по REST API
- Централизованное хранение событий
- Визуализация и отображение данных об установленных и подключенных устройствах и событиях на них в режиме реального времени
- Управление множеством устройств (мониторинг, подключение)
Для интеграции мы остановились на QNAP AppCenter, т.к. внутри используются Docker-контейнеры, в рамках которых может работать программное обеспечение сторонних разработчиков. Тестовое оборудование QNAP:
СХД QNAP для агрегации данных в объектовой видеоаналитике
Общая схема работы гибридного инференса
Для инференса (исполнения нейронных сетей) применяется три типа устройств: сервера в ДЦ в стойках на Intel NUC8i5BEK в форм-факторе 1U, сервера на Intel VCA2 на платформе Supermicro 1U, камеры с установленным в них ПО (Axis, Vivotek и др.), микрокомпьютеры наружной установки (в нашем варианте это или ARM на базе FriendlyARM Nano Pi M4, или х86 UP Board Intel Atom X5). Далее, с множества устройств (например, 2 сервера, 15 камер, 30 микрокомпьютеров) требуется агрегация и хранение данных. Для этого мы выбрали СХД от QNAP.
Общая схема работы гибридного инференса
Технические детали
Все ПО было запущено на QNAP TVS-871T, Intel Core(TM) i5-4590S CPU 3.00GHz, Version 4.4.1.1086 (2019/10/10), Linux-kernel 4.14.24-qnap, под system-docker Version:17.09.1-ce, API version: 1.32, OS/Arch: linux/amd64
При тестировании решения СХД укомплектовали дисками Seagate 7200 Exos 7E2 объемом 1 Tb.
Cumulator запустился из консоли с помощью system-docker и через Container Station V2.0.356 (приложение в GUI-обертке для docker из AppCenter).
QNAP Container Station
Параллельно мы протестировали работу инференса на СХД. Мы смогли запустить инференс только в консоли на system-docker. Причина – в графическом интерфейсе нет настроек по расширенному монтированию разделов (проблема всех GUI-приложений — урезание настроек, которые обычным пользователям не нужны).
Docker-контейнеры собираются из образа с помощью docker-compose, на этом этапе сборку из Dockerfile не делали. Строка запуска выглядит так:
system-docker run --detach --name=edgeserver-testing -p 18081:8081 -p 18082:8082 -p 15433:5433 --mount type=bind,source=/sys/fs/cgroup,target=/sys/fs/cgroup --mount type=bind,source=/sys/fs/fuse,target=/sys/fs/fuse --mount type=tmpfs,destination=/run --privileged -v /dev/bus/usb:/dev/bus/usb --mount type=tmpfs,destination=/run/lock ubuntu-edge
Как можно заметить, мы запустили Docker в привилегированном режиме для того, чтобы ПО смогло обнаружить USB-ключи Sentinel (все порты, так как мы заранее не знаем куда могут быть вставлены ключи, в каком количестве и не будут ли они потом перемещены на другой порт). На этом этапе запуск в привилегированном режиме посчитали приемлемым.
Резюме
Приложение Cumulator, запущенное на QNAP со статистикой потребления ресурсов CPU, RAM:
Приложение Cumulator, запущенное на СХД QNAP
По статистике потребления ресурсов видно, что их достаточно в рамках СХД. Фактически, инференс, т.е. исполнение нейронных сетей, выполняется на удаленных устройствах (серверах, камерах, специализированных устройствах рядом с камерами), а агрегацией, сборкой и хранением данных занимается само СХД со специализированным ПО. Это программное обеспечение собирает данные по REST API и по мере необходимости отдает смежным информационным системам.