Введение#
Для запуска FaceStream с помощью данной документации необходимо наличие запущенной LUNA PLATFORM в соответствии с документацией по установке LUNA PLATFORM. При необходимости можно запустить FaceStream с помощью предварительного запуска минимально необходимых сервисов LUNA Configurator, LUNA Licenses, PostgreSQL и InfluxDB/ClickHouse (см. документ "Руководство по установке без запущенной LP").
Данный документ описывает:
- ручной процесс запуска приложения FaceStream и LUNA Streams с помощью Docker;
- автоматическое развертывание приложения FaceStream с помощью Docker Compose.
FaceStream может быть запущен в одном из двух режимов:
- Через LUNA Streams — режим, при котором потоки создаются в сервисе LUNA Streams (используется по умолчанию). Требует развертывания и настройки LUNA Streams.
- В роли агента LUNA PLATFORM — режим, при котором FaceStream регистрируется как агент в уже развёрнутом сервисе LUNA Video Manager и получает потоки через его API. Не требует развертывания LUNA Streams.
Выбор режима регулируется параметром pull_streams_service в конфигурационном файле. При запуске с помощью Docker Compose этот параметр автоматически изменяется с помощью флага --mode.
Перед запуском необходимо ознакомиться с общей информацией и последовательностью действий.
Лицензирование FaceStream зависит от выбранного режима работы. Для режима через LUNA Streams используется лицензионный ключ LUNA PLATFORM, определяющий количество потоков для работы LUNA Streams. Для режима агента LUNA PLATFORM используется лицензионный ключ для Luna Video Manager. Таким образом, в обоих случаях для работы FaceStream необходима лицензия LUNA PLATFORM. Лицензия должна быть активирована перед запуском FaceStream.
Скрипт Docker Compose из данного дистрибутива используется для развертывания LUNA Streams и FaceStream на одном сервере (для режима через LUNA Streams) или только FaceStream (для режима агента LUNA PLATFORM).
Считается, что запуск выполняется на сервере с операционной системой Almalinux, где FaceStream не был установлен.
Администратор должен вручную настроить Firewall и SELinux на сервере. В данном документе не описывается их настройка.
Данный документ не включает руководство по использованию Docker. Пожалуйста, обратитесь к документации Docker для более подробной информации:
В данном документе приведены примеры разворачивания FaceStream в минимальной рабочей конфигурации для использования в демонстрационных целях. Данная конфигурация не является достаточной для реальной эксплуатации системы в продуктивном контуре.
Все описываемые команды необходимо исполнять в оболочке Bash (когда команды запускаются напрямую на сервере) или в программе для работы с сетевыми протоколами (в случае удаленного подключения к серверу), например, Putty.
Подробную информацию по общей работе и настройках приложения см. в руководстве администратора FaceStream.
Подготовка к запуску#
Убедитесь в том, что вы являетесь root-пользователем перед тем, как начать запуск!
Перед запуском FaceStream необходимо выполнить следующие действия:
1. Распаковать дистрибутив FaceStream
2. Создать символическую ссылку
4. Выполнить установку Docker Compose, если планируется запускать FaceStream с помощью автоматического запуска через скрипт Docker Compose
5. Выбрать способ записи логов
6. Настроить вычисления с помощью GPU, если планируется использовать GPU
7. Авторизироваться в registry VisonLabs
После выполненных действий можно приступить к ручному или автоматическому запуску LUNA Streams и FaceStream.
Распаковка архива#
Рекомендуется переместить архив в предварительно созданную директорию для FaceStream и распаковать архив в этой директории.
Указанные команды следует выполнять под пользователем root.
Создайте директорию для FaceStream.
mkdir -p /var/lib/fs
Переместите архив в созданную директорию. Предполагается, что архив сохранён на сервере в директории "/root".
mv /root/facestream_v.5.168.0.zip /var/lib/fs/
Перейдите в директорию.
cd /var/lib/fs/
Установите утилиту unzip, если она ещё не установлена.
yum install unzip
Распакуйте архив.
unzip facestream_v.5.168.0.zip
Создание символической ссылки#
Создайте символическую ссылку. Символическая ссылка указывает на директорию, в которой хранятся файлы для запуска нужной версии программного продукта.
ln -s facestream_v.5.168.0 fs-current
Установка Docker#
Docker требуется для запуска контейнера FaceStream.
Установка Docker описана в официальной документации:
https://docs.docker.com/engine/install/centos/.
Если на сервере уже установлен Docker версии 20.10.8, то выполнять повторную установку не требуется. Не гарантируется работа с более высокими версиями Docker.
Ниже перечислены команды для быстрой установки:
При возникновении проблем с установкой обратитесь к официальной документации Docker.
Установите зависимости.
yum install -y yum-utils device-mapper-persistent-data lvm2
Добавьте репозиторий.
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Установите Docker.
yum -y install docker-ce docker-ce-cli containerd.io
Запустите Docker.
systemctl start docker
systemctl enable docker
Проверьте, статус запуска Docker.
systemctl status docker
Установка Docker Compose#
Примечание. Выполняйте установку Docker Compose только если собираетесь использовать скрипт автоматического запуска FaceStream.
Установите Docker Compose.
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
Для получения более подробной информации обратитесь к официальной документации:
https://docs.docker.com/compose/install/
Выбор способа записи логов#
Существует два способа вывода логов:
- стандартный вывод логов (stdout);
- вывод логов в файл.
Настройки вывода логов сервисов LUNA PLATFORM и сервиса LUNA Streams задаются в секции <SERVICE_NAME>_LOGGER сервиса Configurator.
Настройки вывода логов FaceStream задаются в настройках logging секции FACE_STREAM_CONFIG сервиса Configurator.
При необходимости можно использовать оба способа вывода логов.
Запись логов в stdout#
Данный способ используется по умолчанию и для него не требуется выполнять дополнительных действий.
Рекомендуется настроить ротацию логов Docker для ограничения их размеров (см. раздел "Настройка ротации логов Docker").
Запись логов в файл#
Примечание. При включении сохранения логов в файле необходимо помнить о том, что логи занимают определенное место в хранилище, а процесс логирования в файл негативно влияет на производительность системы.
Для использования данного способа необходимо выполнить следующие дополнительные действия:
- перед запуском сервисов: создать директории для логов на сервере;
- после запуска сервисов: активировать запись логов и задать расположение хранения логов внутри контейнеров сервисов LP;
- во время запуска сервисов: настроить синхронизацию директорий логов в контейнере с логами на сервере с помощью аргумента
volumeпри старте каждого контейнера.
В скрипте Docker Compose не настроена синхронизация директорий с папками. Необходимо вручную добавить монтирование папок в файл
docker-compose.yml.
См. инструкцию по включению записи логов в файлы в разделе "Запись логов на сервер".
Установка зависимостей для GPU#
Пропустите данный раздел если не собираетесь использовать FaceStream с GPU.
Для использования GPU с Docker контейнерами необходимо установить NVIDIA Container Toolkit.
Пример установки приведен ниже.
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | tee /etc/yum.repos.d/nvidia-docker.repo
yum install -y nvidia-container-toolkit
systemctl restart docker
Проверьте работу NVIDIA Container toolkit, запустив базовый контейнер CUDA (он не входит в дистрибутив FaceStream, его необходимо загрузить из Интернета):
docker run --rm --gpus all nvcr.io/nvidia/cuda:12.4.0-base-ubi8 nvidia-smi
См. документацию NVIDIA для дополнительной информации.
Извлечение атрибутов на GPU разработано для максимальной пропускной способности. Выполняется пакетная обработка входящих изображений. Это снижает затраты на вычисления для изображения, но не обеспечивает минимальную задержку для каждого изображения.
GPU-ускорение разработано для приложений с высокой нагрузкой, где количество запросов в секунду достигает тысяч. Нецелесообразно использовать ускорение GPU в сценариях с небольшой нагрузкой, когда задержка начала обработки имеет значение.
Действия для запуска FaceStream с GPU через Docker Compose#
Для запуска FaceStream с GPU через Docker Compose необходимо, кроме вышеописанных действий, добавить секцию deploy в поле facestream в файл docker-compose.yml.
Перед запуском контейнера FaceStream с GPU требуется включить использование GPU для вычислений в настройках FaceStream с помощью параметра "enable_gpu_processing" (см. раздел "Настройки FaceStream" в руководстве администратора).
vi /var/lib/fs/fs-current/example-docker/docker-compose.yml
facestream:
image: ${REGISTRY_ADDRESS}:${DOCKER_REGISTRY_PORT}/facestream:${FACESTREAM_TAG}
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
restart: always
environment:
CONFIGURATOR_HOST: ${HOST_CONFIGURATOR}
CONFIGURATOR_PORT: 5070
driver — в данном поле указывается драйвер для зарезервированного устройства(устройств);
count — в данном поле задается количество графических процессоров, которые должны быть зарезервированы (при условии, что хост содержит такое количество графических процессоров);
capabilities — данное поле выражает как общие, так и специфические возможности драйвера. Его необходимо задать, иначе будет возвращена ошибка при развертывании сервиса.
Для дополнительной информации см. следующую документацию:
https://docs.docker.com/compose/gpu-support/#enabling-gpu-access-to-service-containers.
Авторизация в registry#
При запуске контейнеров необходимо указать ссылку на образ, необходимый для запуска контейнера. Этот образ загружается из VisionLabs registry. Перед этим необходима авторизация.
Логин и пароль можно запросить у представителя VisionLabs.
Введите логин
docker login dockerhub.visionlabs.ru --username <username>
После выполнения команды будет запрошен ввод пароля. Введите пароль.
В команде
docker loginможно вводить логин и пароль одновременно, однако это не гарантирует безопасность, т.к. пароль можно будет увидеть в истории команд.
Проверка наличия лицензии#
Если сервисы LUNA PLATFORM уже запущены и лицензия с параметром, регулирующим количество потоков для работы LUNA Streams или Luna Video Manager, уже активирована, то необходимо убедиться в том, что текущий ключ LUNA PLATFORM содержит соответствующий параметр для выбранного режима работы. Информация может быть предоставлена специалистами VisionLabs.
Если требуемый параметр не содержится в ключе, необходимо запросить новый ключ и обратиться к специалистам VisionLabs для консультации по обновлению лицензионного ключа.
Запуск FaceStream#
Существует два способа запуска FaceStream — ручной и автоматический с помощью скрипта Docker Compose.
Используйте гиперссылки ниже для перехода к инструкции по необходимому способу запуска:
FaceStream может быть запущен в одном из двух режимов, которые определяют, откуда FaceStream будет получать потоки:
- Режим LUNA Streams — FaceStream получает потоки из сервиса LUNA Streams (используется по умолчанию).
- Режим агента LUNA PLATFORM — FaceStream регистрируется как агент в уже развёрнутом сервисе LUNA Video Manager и получает потоки через его API.
Выбор режима регулируется параметром pull_streams_service в конфигурационном файле. При запуске с помощью Docker Compose этот параметр автоматически изменяется с помощью флага --mode. Подробнее о режимах работы см. в разделе "Сервисы для управления потоками" Руководства администратора.
Ручной запуск FaceStream#
Примечание. Выполняйте данные действия, только если собираетесь запускать FaceStream вручную. Если собираетесь запускать FaceStream с помощью скрипта Docker Compose, перейдите в раздел "Запуск FaceStream с помощью Docker Compose".
Выберите режим запуска и выполните шаги в указанном порядке:
- Запуск FaceStream с LUNA Streams — требует развертывания LUNA Streams.
- Запуск FaceStream в режиме агента LUNA PLATFORM — подключается к уже развёрнутому LUNA Video Manager.
Запуск FaceStream с LUNA Streams#
Данный раздел описывает запуск FaceStream с LUNA Streams.
Примечание. Выполняйте данные действия, только если собираетесь запускать FaceStream с LUNA Streams. Если собираетесь запускать FaceStream в роли агента LUNA PLATFORM, перейдите в раздел "Запуск FaceStream в режиме агента LUNA PLATFORM".
Инициализация настроек LUNA Streams в Configurator#
Выполните следующую команду для инициализации настроек LUNA Streams в LUNA Configurator:
docker run \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/streams:/srv/logs \
--entrypoint=/bin/bash \
--rm \
--network=host \
dockerhub.visionlabs.ru/luna/streams-configs:v.1.8.0 \
-c "python3 -m streams_configs.migrate head --config_db_url postgres://luna:luna@127.0.0.1:5432/luna_configurator"
Инициализация настроек FaceStream в Configurator#
Выполните следующую команду для инициализации настроек FaceStream в LUNA Configurator:
docker run \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/facestream:/srv/logs \
--entrypoint=/bin/bash \
--rm \
--network=host \
dockerhub.visionlabs.ru/luna/facestream_configs:v.5.2.29 \
-c "python3 -m configs.migrate head --config_db_url postgres://luna:luna@127.0.0.1:5432/luna_configurator"
Настройка дамп-файла#
Примечание. Пропустите данный раздел, если нужно запустить FaceStream в стандартной конфигурации.
Отредактируйте дамп-файл для задания пользовательских настроек:
vi /var/lib/fs/fs-current/extras/conf/configurator_configs/face_stream_config.json
Загрузка дамп-файла#
Выполните следующую команду для загрузки дамп-файла в Configurator:
docker run \
--rm \
--network=host \
-v /var/lib/fs/fs-current/extras/conf/configs/storages_config.conf:/srv/storages_config.conf \
-v /var/lib/fs/fs-current/extras/conf/configurator_configs/face_stream_config.json:/srv/face_stream_config.json \
dockerhub.visionlabs.ru/luna/storages:v.0.234.0 \
bash -c "luna_prepare load_dump \
--dump-file=/srv/face_stream_config.json \
--config=/srv/storages_config.conf"
Здесь:
luna_prepare load_dump— команда "load_dump", позволяющая загрузить дамп-файл в БД Configurator-v /var/lib/fs/fs-current/extras/conf/configurator_configs/face_stream_config.json:/srv/face_stream_config.json \— команда монтирования дамп-файлаface_stream_config.json--dump-file=/srv/face_stream_config.json— именованный аргумент, содержащий адрес дамп-файла внутри контейнера-v /var/lib/fs/fs-current/extras/conf/configs/storages_config.conf:/srv/storages_config.conf— команда монтирования конфигурационного файла Storages--config=/srv/storages_config.conf— именованный аргумент, содержащий адрес конфигурационного файла для использования сервисом Storages
Создание хранилища данных мониторинга в ClickHouse#
Примечание. Данный раздел актуален только при использовании ClickHouse для хранения данных мониторинга. Пропустите этот раздел, если используется InfluxDB. Дополнительную информацию см. в разделе "Мониторинг" в руководстве администратора.
Для корректной записи данных мониторингa FaceStream в ClickHouse необходимо предварительно создать таблицу fs_requests.
Для этого выполните команду:
docker run \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/streams:/srv/logs \
--entrypoint=/bin/bash \
--rm \
--network=host \
dockerhub.visionlabs.ru/luna/streams-configs:v.1.8.0 \
-c "python3 -m monitoring.migrate -x luna-config=http://localhost:5070/1 -x partition=day -x monitoring-ttl=30 upgrade head"
В команде выше приведены дополнительные параметры:
partition=day— задаёт период партиционирования данных (по дням).monitoring-ttl=30— задаёт время хранения данных (30 дней).
Важно! Без выполнения этой команды таблица fs_requests не будет создана, и данные мониторинга записываться не будут.
Инициализация БД LUNA Streams#
Инициализируйте данные в БД LUNA Streams:
docker run -v /etc/localtime:/etc/localtime:ro \
--rm \
--network=host \
dockerhub.visionlabs.ru/luna/luna-streams:v.1.8.0 \
python3 ./base_scripts/db_create.py --luna-config http://localhost:5070/1
Команда запуска контейнера LUNA Streams#
Запуск контейнера осуществляется следующей командой:
docker run \
--env=CONFIGURATOR_HOST=127.0.0.1 \
--env=CONFIGURATOR_PORT=5070 \
--env=PORT=5160 \
--env=WORKER_COUNT=1 \
--env=RELOAD_CONFIG=1 \
--env=RELOAD_CONFIG_INTERVAL=10 \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/streams:/srv/logs \
--name=luna-streams \
--restart=always \
--detach=true \
--network=host \
dockerhub.visionlabs.ru/luna/luna-streams:v.1.8.0
Для проверки корректности запуска сервиса можно выполнить GET-запрос http://127.0.0.1:5160/version. В ответе должна вернуться версия LUNA Streams v.1.8.0.
Команды запуска контейнера FaceStream#
В приведенных ниже командах запуска используются параметры монтирования конфигурационных файлов faceengine.conf, runtime.conf и trackengine.conf:
-v /var/lib/fs/fs-current/extras/conf/configs/faceengine.conf:/srv/facestream/data/faceengine.conf \— параметр позволяет использовать настройки FaceEngine из конфигурационного файла "faceengine.conf".-v /var/lib/fs/fs-current/extras/conf/configs/runtime.conf:/srv/facestream/data/runtime.conf \— параметр позволяет использовать настройки среды выполнения из конфигурационного файла "runtime.conf".-v /var/lib/fs/fs-current/extras/conf/configs/trackengine.conf:/srv/facestream/data/trackengine.conf \— параметр позволяет использовать настройки TrackEngine из конфигурационного файла "trackengine.conf".
Важно! Параметры могут быть заданы как через сервис Configurator (см. раздел "Настройки, задаваемые в сервисе LUNA Configurator" руководства администратора), так и в конфигурационных файлах одновременно. В случае совпадения параметров приоритет имеет значение, указанное в сервисе Configurator.
В сервисе Configurator можно настроить только основные пользовательские настройки. Для более тонкой настройки следует использовать конфигурационный файл.
Команда запуска контейнера с использованием CPU#
Запуск контейнера осуществляется следующим образом:
docker run \
--env=CONFIGURATOR_HOST=127.0.0.1 \
--env=CONFIGURATOR_PORT=5070 \
-v /var/lib/fs/fs-current/extras/conf/configs/faceengine.conf:/srv/facestream/data/faceengine.conf \
-v /var/lib/fs/fs-current/extras/conf/configs/runtime.conf:/srv/facestream/data/runtime.conf \
-v /var/lib/fs/fs-current/extras/conf/configs/trackengine.conf:/srv/facestream/data/trackengine.conf \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/facestream:/srv/logs \
--env=PORT=34569 \
--detach=true \
--restart=always \
--name=facestream \
--network=host \
dockerhub.visionlabs.ru/luna/facestream:v.5.2.29
Описание остальных параметров и ключей запуска см. в разделе "Описание ключей запуска".
Для проверки корректности запуска можно выполнить GET-запрос http://127.0.0.1:34569/version. В ответе должна вернуться версия FaceStream.
Команда запуска контейнера с использованием GPU#
Примечание. Используйте данную команду только если собираетесь использовать FaceStream с GPU.
Перед запуском FaceStream в режиме GPU необходимо установить дополнительные зависимости (см. раздел "Установка зависимостей для GPU").
Перед запуском контейнера FaceStream с GPU требуется включить использование GPU для вычислений в настройках FaceStream с помощью параметра "enable_gpu_processing" (см. раздел "Настройки FaceStream" в руководстве администратора).
docker run \
--env=CONFIGURATOR_HOST=127.0.0.1 \
--env=CONFIGURATOR_PORT=5070 \
-v /var/lib/fs/fs-current/extras/conf/configs/faceengine.conf:/srv/facestream/data/faceengine.conf \
-v /var/lib/fs/fs-current/extras/conf/configs/runtime.conf:/srv/facestream/data/runtime.conf \
-v /var/lib/fs/fs-current/extras/conf/configs/trackengine.conf:/srv/facestream/data/trackengine.conf \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/facestream:/srv/logs \
--env=PORT=34569 \
--gpus device=0 \
--detach=true \
--restart=always \
--name=facestream \
--network=host \
dockerhub.visionlabs.ru/luna/facestream:v.5.2.29
--gpus device=0 — параметр указывает используемое устройство GPU и позволяет использовать GPU. Один GPU используется для одного экземпляра FaceStream. Использование множества GPU для одного экземпляра невозможно.
Описание остальных параметров и ключей запуска см. в разделе "Описание ключей запуска".
Для проверки корректности запуска можно выполнить GET-запрос http://127.0.0.1:34569/version. В ответе должна вернуться версия FaceStream.
Запуск FaceStream в режиме агента LUNA PLATFORM#
Примечание. Выполняйте данные действия, только если собираетесь запускать FaceStream в роли агента LUNA PLATFORM. Если собираетесь запускать FaceStream с LUNA Streams, перейдите в раздел "Запуск FaceStream с LUNA Streams".
Данный раздел описывает запуск FaceStream в режиме агента LUNA PLATFORM, при котором FaceStream подключается к уже развёрнутому сервису LUNA Video Manager.
Создание аккаунта в LUNA PLATFORM#
Для запуска FaceStream в режиме агента LUNA PLATFORM необходимо создать аккаунт в LUNA PLATFORM с необходимыми разрешениями. Идентификатор этого аккаунта передаётся в FaceStream через переменную окружения ACCOUNT_ID. От имени данного аккаунта агент будет регистрироваться в LUNA Video Manager, а также создаваться потоки.
FaceStream поддерживает два варианта режима агента, которые отличаются способом авторизации:
-
Внутренний агент (параметр
internal_agent: trueв секцииlunavideomanager, используется по умолчанию) — FaceStream авторизуется во внутренних сервисах LUNA PLATFORM с использованиемACCOUNT_ID. Токен не требуется. Используется, когда FaceStream развёрнут в той же инфраструктуре, что и LUNA PLATFORM. -
Внешний агент (
internal_agent: false) — FaceStream авторизуется в LUNA PLATFORM как внешний клиент с использованием токена. Требует дополнительного создания токена с необходимыми разрешениями (операцияPOST /tokensв LUNA PLATFORM API) и его указания в параметреlunavideomanager.tokenдамп-файла. Используется, когда FaceStream развёрнут отдельно, вне инфраструктуры LUNA PLATFORM.
Для создания аккаунта выполните запрос к LUNA PLATFORM API (операция POST /accounts). Подробнее — в API-справочнике LUNA PLATFORM.
Инициализация настроек FaceStream в Configurator#
Выполните следующую команду для инициализации настроек FaceStream в LUNA Configurator:
docker run \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/facestream:/srv/logs \
--entrypoint=/bin/bash \
--rm \
--network=host \
dockerhub.visionlabs.ru/luna/facestream_configs:v.5.2.29 \
-c "python3 -m configs.migrate head --config_db_url postgres://luna:luna@127.0.0.1:5432/luna_configurator"
Создание хранилища данных мониторинга в ClickHouse#
Примечание. Данный раздел актуален только при использовании ClickHouse для хранения данных мониторинга. Пропустите этот раздел, если используется InfluxDB. Дополнительную информацию см. в разделе "Мониторинг" в руководстве администратора.
Для корректной записи данных мониторингa FaceStream в ClickHouse необходимо предварительно создать таблицу fs_requests.
Для этого выполните команду:
docker run \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/streams:/srv/logs \
--entrypoint=/bin/bash \
--rm \
--network=host \
dockerhub.visionlabs.ru/luna/streams-configs:v.1.8.0 \
-c "python3 -m monitoring.migrate -x luna-config=http://localhost:5070/1 -x partition=day -x monitoring-ttl=30 upgrade head"
В команде выше приведены дополнительные параметры:
partition=day— задаёт период партиционирования данных (по дням).monitoring-ttl=30— задаёт время хранения данных (30 дней).
Важно! Без выполнения этой команды таблица fs_requests не будет создана, и данные мониторинга записываться не будут.
Настройка режима работы#
Для ручного запуска FaceStream в режиме агента LUNA PLATFORM необходимо изменить значение параметра streams_pulling.pull_streams_service в дамп-файле face_stream_config.json:
{
"streams_pulling": {
"pull_streams_service": "lunavideomanager"
}
}
Допустимые значения:
lunastreams— режим LUNA Streams (по умолчанию);lunavideomanager— режим работы в роли агента LUNA PLATFORM.
Подробнее о режимах работы см. в разделе "Сервисы для управления потоками" Руководства администратора.
Загрузка дамп-файла#
Выполните следующую команду для загрузки дамп-файла в Configurator:
docker run \
--rm \
--network=host \
-v /var/lib/fs/fs-current/extras/conf/configs/storages_config.conf:/srv/storages_config.conf \
-v /var/lib/fs/fs-current/extras/conf/configurator_configs/face_stream_config.json:/srv/face_stream_config.json \
dockerhub.visionlabs.ru/luna/storages:v.0.234.0 \
bash -c "luna_prepare load_dump \
--dump-file=/srv/face_stream_config.json \
--config=/srv/storages_config.conf"
Переменные окружения для режима агента LUNA PLATFORM#
При запуске FaceStream в режиме агента LUNA PLATFORM (с параметром pull_streams_service: lunavideomanager) необходимо передать переменную окружения ACCOUNT_ID:
ACCOUNT_ID— идентификатор аккаунта в LUNA PLATFORM, созданного на предыдущем шаге.
Пример передачи переменной:
--env=ACCOUNT_ID=<ACCOUNT_ID> \
Команды запуска контейнера FaceStream#
В приведенных ниже командах запуска используются параметры монтирования конфигурационных файлов faceengine.conf, runtime.conf и trackengine.conf:
-v /var/lib/fs/fs-current/extras/conf/configs/faceengine.conf:/srv/facestream/data/faceengine.conf \— параметр позволяет использовать настройки FaceEngine из конфигурационного файла "faceengine.conf".-v /var/lib/fs/fs-current/extras/conf/configs/runtime.conf:/srv/facestream/data/runtime.conf \— параметр позволяет использовать настройки среды выполнения из конфигурационного файла "runtime.conf".-v /var/lib/fs/fs-current/extras/conf/configs/trackengine.conf:/srv/facestream/data/trackengine.conf \— параметр позволяет использовать настройки TrackEngine из конфигурационного файла "trackengine.conf".
Важно! Параметры могут быть заданы как через сервис Configurator (см. раздел "Настройки, задаваемые в сервисе LUNA Configurator" руководства администратора), так и в конфигурационных файлах одновременно. В случае совпадения параметров приоритет имеет значение, указанное в сервисе Configurator.
В сервисе Configurator можно настроить только основные пользовательские настройки. Для более тонкой настройки следует использовать конфигурационный файл.
Команда запуска контейнера с использованием CPU#
Запуск контейнера осуществляется следующим образом:
docker run \
--env=ACCOUNT_ID=<ACCOUNT_ID> \
--env=CONFIGURATOR_HOST=127.0.0.1 \
--env=CONFIGURATOR_PORT=5070 \
-v /var/lib/fs/fs-current/extras/conf/configs/faceengine.conf:/srv/facestream/data/faceengine.conf \
-v /var/lib/fs/fs-current/extras/conf/configs/runtime.conf:/srv/facestream/data/runtime.conf \
-v /var/lib/fs/fs-current/extras/conf/configs/trackengine.conf:/srv/facestream/data/trackengine.conf \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/facestream:/srv/logs \
--env=PORT=34569 \
--detach=true \
--restart=always \
--name=facestream \
--network=host \
dockerhub.visionlabs.ru/luna/facestream:v.5.2.29
Замените <ACCOUNT_ID> на идентификатор вашего аккаунта LUNA PLATFORM.
Описание остальных параметров и ключей запуска см. в разделе "Описание ключей запуска".
Для проверки корректности запуска можно выполнить GET-запрос http://127.0.0.1:34569/version. В ответе должна вернуться версия FaceStream.
Команда запуска контейнера с использованием GPU#
Примечание. Используйте данную команду только если собираетесь использовать FaceStream с GPU.
Перед запуском FaceStream в режиме GPU необходимо установить дополнительные зависимости (см. раздел "Установка зависимостей для GPU").
Перед запуском контейнера FaceStream с GPU требуется включить использование GPU для вычислений в настройках FaceStream с помощью параметра "enable_gpu_processing" (см. раздел "Настройки FaceStream" в руководстве администратора).
docker run \
--env=ACCOUNT_ID=<ACCOUNT_ID> \
--env=CONFIGURATOR_HOST=127.0.0.1 \
--env=CONFIGURATOR_PORT=5070 \
-v /var/lib/fs/fs-current/extras/conf/configs/faceengine.conf:/srv/facestream/data/faceengine.conf \
-v /var/lib/fs/fs-current/extras/conf/configs/runtime.conf:/srv/facestream/data/runtime.conf \
-v /var/lib/fs/fs-current/extras/conf/configs/trackengine.conf:/srv/facestream/data/trackengine.conf \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/facestream:/srv/logs \
--env=PORT=34569 \
--gpus device=0 \
--detach=true \
--restart=always \
--name=facestream \
--network=host \
dockerhub.visionlabs.ru/luna/facestream:v.5.2.29
Замените <ACCOUNT_ID> на идентификатор вашего аккаунта LUNA PLATFORM.
--gpus device=0 — параметр указывает используемое устройство GPU и позволяет использовать GPU. Один GPU используется для одного экземпляра FaceStream. Использование множества GPU для одного экземпляра невозможно.
Описание остальных параметров и ключей запуска см. в разделе "Описание ключей запуска".
Для проверки корректности запуска можно выполнить GET-запрос http://127.0.0.1:34569/version. В ответе должна вернуться версия FaceStream.
Запуск FaceStream с помощью Docker Compose#
Скрипт Docker Compose автоматизирует развёртывание FaceStream и необходимых сервисов в зависимости от выбранного режима работы:
С LUNA Streams (режим по умолчанию) скрипт: - инициализирует настройки LUNA Streams в Configurator; - инициализирует настройки FaceStream в Configurator; - загружает дамп-файл с настройками в Configurator; - создаёт и инициализирует БД LUNA Streams; - запускает LUNA Streams и FaceStream.
При работе в роли агента LUNA PLATFORM (с флагом --mode video-manager) скрипт:
- инициализирует настройки FaceStream в Configurator;
- загружает дамп-файл с настройками в Configurator;
- запускает FaceStream в режиме агента, подключаясь к уже развёрнутому сервису LUNA Video Manager.
Скрипт тестируется с использованием настроек FaceStream по умолчанию.
Важно. Скрипт не предназначен для использования в целях масштабирования FaceStream:
- Не используется для развертывания FaceStream на нескольких серверах.
- Не используется для развертывания и балансирования нескольких экземпляров FaceStream на одном сервере.
Дополнительные возможности:
- Поддерживается использование GPU для вычислений FaceStream.
- Не обеспечивается возможность использования внешней базы данных для LUNA Streams, уже установленной на сервере.
- Не выполняются миграции из предыдущих версий FaceStream и обновления предыдущих сборок.
См. файл "docker-compose.yml" и другие файлы в директории "example-docker" для получения дополнительной информации.
Можно написать собственный скрипт, который разворачивает и конфигурирует все необходимые сервисы LP и FaceStream. Данный документ не включает информацию о создании скриптов и не обучает использованию Docker. Обратитесь к документации Docker для получения подробной информации о Docker и Docker Compose:
Запуск FaceStream с LUNA Streams#
Данный раздел описывает запуск FaceStream с помощью Docker Compose с LUNA Streams.
Команда запуска FaceStream с помощью Docker Compose#
Откройте директорию Docker Compose:
cd /var/lib/fs/fs-current/example-docker
Убедитесь в том, что контейнер FS не запущен до выполнения скрипта. Попытка запустить контейнер с таким же именем, как существующий контейнер, приведет к ошибке. Если контейнер запущен, необходимо остановить его с помощью команды
docker container rm -f <container_name>. Чтобы остановить все контейнеры, используйтеdocker container rm -f $(docker container ls -aq).Для запуска FaceStream с GPU с помощью Docker Compose необходимо выполнить действия, описанные в разделе "Установка зависимостей для GPU".
Запуск FaceStream через Docker Compose:
Необходимо выполнить вход в VisionLabs registry (см. раздел "Авторизация в registry")
./start_facestream.sh
Проверьте статус всех запущенных Docker контейнеров.
docker ps
Список потоков доступен по адресу
http://127.0.0.1:34569/api/1/streams/. Просмотр потока в браузере доступен по адресуhttp://127.0.0.1:34569/api/1/streams/preview/<stream_id>.
Запуск FaceStream в режиме агента LUNA PLATFORM#
Примечание. Выполняйте данные действия, только если собираетесь запускать FaceStream в роли агента LUNA PLATFORM. Если собираетесь запускать FaceStream с LUNA Streams, перейдите в раздел "Запуск FaceStream с LUNA Streams".
Данный раздел описывает запуск FaceStream в режиме агента LUNA PLATFORM, при котором FaceStream подключается к уже развёрнутому сервису LUNA Video Manager.
Команда запуска FaceStream с помощью Docker Compose#
Откройте директорию Docker Compose:
cd /var/lib/fs/fs-current/example-docker
Убедитесь в том, что контейнер FS не запущен до выполнения скрипта. Попытка запустить контейнер с таким же именем, как существующий контейнер, приведет к ошибке. Если контейнер запущен, необходимо остановить его с помощью команды
docker container rm -f <container_name>. Чтобы остановить все контейнеры, используйтеdocker container rm -f $(docker container ls -aq).Для запуска FaceStream с GPU с помощью Docker Compose необходимо выполнить действия, описанные в разделе "Установка зависимостей для GPU".
Запуск FaceStream через Docker Compose:
Необходимо выполнить вход в VisionLabs registry (см. раздел "Авторизация в registry")
./start_facestream.sh --mode video-manager --account-id <ACCOUNT_ID>
Примечание. Флаг --mode автоматически изменяет настройку streams_pulling.pull_streams_service в конфигурационном файле. Если флаг не указан, используется режим LUNA Streams. Ручное редактирование дамп-файла при использовании Docker Compose не требуется.
Важно! Флаг --account-id является обязательным. Если он не указан, скрипт использует рутовый аккаунт LUNA PLATFORM по умолчанию. Рекомендуется всегда передавать идентификатор аккаунта, созданного с необходимыми разрешениями (см. раздел "Создание аккаунта в LUNA PLATFORM").
Проверьте статус всех запущенных Docker контейнеров.
docker ps
Дальнейшие действия#
После успешного запуска FaceStream необходимо создать поток для начала обработки видео. Способ создания потока зависит от выбранного режима работы.
Подробнее о создании потоков см.:
Создание потока через LUNA Streams#
Для работы с FaceStream через LUNA Streams необходимо создать поток с помощью POST-запроса "create stream" к сервису LUNA Streams. Поток содержит политики обработки видеопотока/видеофайла/набора изображений. Если поток создается со статусом "pending" (по умолчанию), то "рабочий процесс" FaceStream автоматически начнет обработку потока.
Список обрабатываемых потоков доступен по адресу http://127.0.0.1:34569/api/1/streams/. Просмотр потока в браузере доступен по адресу http://127.0.0.1:34569/api/1/streams/preview/<stream_id>.
См. подробную информацию о работе с потоками и LUNA Streams в разделе "Взаимодействие FaceStream с LUNA Streams" руководства администратора.
Создание потока через LUNA Video Manager (режим агента LUNA PLATFORM)#
При работе в режиме агента LUNA PLATFORM потоки создаются с помощью POST-запроса "create stream" к сервису LUNA Video Manager. FaceStream автоматически получит поток на обработку согласно настройкам агента.
См. подробную информацию о работе с потоками и LUNA Video Manager в разделе "Взаимодействие FaceStream с LUNA Video Manager" руководства администратора.
Дополнительная информация#
В данном разделе приводится следующая дополнительная информация:
- Полезные команды для работы с Docker
- Описание ключей запуска
- Действия по включению сохранения логов в файлы
- Настройка ротации логов Docker
Команды Docker#
Показать контейнеры#
Чтобы показать список запущенных Docker контейнеров, используйте команду:
docker ps
Чтобы показать все имеющиеся Docker контейнеры, используйте команду:
docker ps -a
Копировать файлы в контейнер#
Можно переносить файлы в контейнер. Используйте команду docker cp для копирования файла в контейнер.
docker cp <file_location> <container_name>:<folder_inside_container>
Вход в контейнер#
Можно входить в отдельные контейнеры с помощью следующей команды:
docker exec -it <container_name> bash
Для выхода из контейнера используйте следующую команду:
exit
Имена образов#
Можно увидеть все имена образов с помощью команды
docker images
Просмотр логов контейнера#
Просмотреть логи контейнера можно с помощью следующей команды:
docker logs <container_name>
Удаление образа#
Если требуется удаление образа:
- запустите команду
docker images - найдите требуемый образ, например: dockerhub.visionlabs.ru/luna/facestream:v.5.2.29
- скопируйте соответствующий ID образа из IMAGE ID, например, "61860d036d8c"
- укажите его в команде удаления:
docker rmi -f 61860d036d8c
Удаление всех существующих образов:
docker rmi -f $(docker images -q)
Остановка контейнера#
Контейнер можно остановить с помощью следующей команды:
docker stop <container_name>
Остановка всех контейнеры:
docker stop $(docker ps -a -q)
Удаление контейнера#
Если необходимо удалить контейнер:
- запустите команду "docker ps"
- остановите контейнер (см. Остановка контейнера)
- найдите требуемый образ, например: dockerhub.visionlabs.ru/luna/facestream:v.5.2.29
- скопируйте соответствующий ID контейнера из столбца CONTAINER ID, например, "23f555be8f3a"
- укажите его в команде удаления:
docker container rm -f 23f555be8f3a
Удаление всех контейнеров:
docker container rm -f $(docker container ls -aq)
Ключи запуска#
Ключи запуска задаются с помощью переменных окружения:
-
--env=— этот параметр задает переменные окружения, требуемые для запуска контейнера. Указываются следующие основные значения:CONFIGURATOR_HOST— хост, на котором запущен сервис Configurator. Локальный хост задается в случае, если контейнер запущен на том же сервере, где работает Configurator.CONFIGURATOR_PORT— порт прослушивания для сервиса Configurator. По умолчанию используется порт 5070.PORT— порт, где FaceStream будет слушать.-
STREAMS_ID— в теге задается список идентификаторов потоков, которые будут запрошены из LUNA Streams для обработки. Остальные потоки будут отфильтрованы. Параметр "stream_id" выдается в ответе на запрос "create stream".Если значение равно " " или тег "STREAMS_ID" не задан, то FaceStream будет брать из очереди все существующие "stream_id".
Если задано несуществующее значение, то при запуске FaceStream будет указана ошибка о некорректном UUID.
По умолчанию значение равно " ".
Для использования ключа должны быть указаны переменные "CONFIGURATOR_HOST" и "CONFIGURATOR_PORT".
-
STREAMS_NAME— в теге задается список имен потоков. Имена потоков задаются с помощью параметра "name" во время их создания (запрос "create streams"). Потоки с данными именами будут запрошены из LUNA Streams для обработки. Остальные потоки будут отфильтрованы.В остальном принцип работы схож с тегом "STREAMS_ID".
-
GROUPS_IDиGROUPS_NAME— в тегах задаются список идентификаторов групп или список имён групп. Параметры "group_id" или "group_name" задаются во время создания потока (запрос "create stream"). Потоки с данными параметрами будут запрошены из LUNA Streams для обработки. Остальные потоки будут отфильтрованы.Если значение равно " " или теги "GROUPS_ID"/"GROUPS_NAME" не заданы, то FaceStream не будет фильтровать потоки по группам.
Если задано несуществующее значение, то при запуске FaceStream будет указана ошибка о некорректном UUID.
По умолчанию значение равно " ".
Для использования ключей должны быть указаны переменные "CONFIGURATOR_HOST" и "CONFIGURATOR_PORT".
Для тегов "STREAMS_NAME", "STREAMS_ID", "GROUPS_NAME" и "GROUPS_ID" можно задать несколько значений. Пример синтаксиса: --env=STREAMS_ID="037f3196-c874-4eca-9d7c-91fd8dfc9593 4caf7cf7-dd0d-4ad5-a35e-b263e742e28a"
-
FACE_STREAM_CONFIG_TAG— тег для настроек из секции "FACE_STREAM_CONFIG" сервиса LUNA Configurator. -
TRACK_ENGINE_CONFIG_TAG— тег для настроек из секции "TRACK_ENGINE_CONFIG" сервиса LUNA Configurator. -
FACEENGINE_CONFIG_TAG— тег для настроек из секции "FACEENGINE_CONFIG" сервиса LUNA Configurator. -
RUNTIME_CONFIG_TAG— тег для настроек из секции "RUNTIME_CONFIG" сервиса LUNA Configurator. -
CONFIG_RELOAD— тег, включающий проверку наличия изменений в секции "FACE_STREAM_CONFIG" сервиса LUNA Configurator и принимающий следующие значения:- "1" — отслеживание изменений включено, при наличии изменений в конфигурации будут автоматически перезапущены все контейнеры FaceStream;
- "0" — отслеживание изменений отключено.
По умолчанию значение равно "1".
-
PULLING_TIME— тег, задающий период получения новых параметров из секции "FACE_STREAM_CONFIG" сервиса LUNA Configurator в диапазоне [1...3600] сек. Используется совместно с тегом "CONFIG-RELOAD".По умолчанию значение равно "10".
-
--device=— данный параметр необходим для указания адреса USB устройства. Адрес должен быть указан в источнике потока при его создании. Пример:--device=/dev/video0.
См. принцип работы FaceStream с LUNA Configurator в разделе "Использование FaceStream с LUNA Configurator" руководства администратора.
Расшифровка параметров запуска контейнера#
Ниже приведена расшифровка параметров запуска контейнера:
docker run— команда для запуска выбранного образа в качестве нового контейнера.-v— параметр volume позволяет загружать содержимое серверной папки в объем контейнера. Таким образом содержимое синхронизируется.-v /var/lib/fs/fs-current/extras/conf/configs/faceengine.conf:/srv/facestream/data/faceengine.conf \— этот параметр позволяет использовать настройки FaceEngine из конфигурационного файла "faceengine.conf".-v /var/lib/fs/fs-current/extras/conf/configs/runtime.conf:/srv/facestream/data/runtime.conf \— этот параметр позволяет монтировать конфигурационный файл среды выполнения в контейнер FaceStream. Перед изменением стандартных настроек требуется проконсультироваться со специалистами VisionLabs.--network=host— этот параметр указывает, что отсутствует симуляция сети и используется серверная сеть. При необходимости изменить порт для сторонних контейнеров следует заменить эту строку на-p 5440:5432. Здесь первый порт5440— это локальный порт, а5432— это порт, используемый в контейнере./etc/localtime:/etc/localtime:ro— задает текущий часовой пояс, используемый системой контейнера.--name=facestream— этот параметр задает имя запускаемого контейнера. Имя должно быть уникальным. Если уже существует контейнер с таким же именем, произойдет ошибка.--restart=always— этот параметр определяет политику перезагрузки. Daemon всегда перезагружает контейнер вне зависимости от кода завершения.--detach=true— запуск контейнера в фоновом режиме.
Запись логов на сервер#
Чтобы включить сохранение логов на сервер, необходимо:
- создать директории для логов на сервере;
- активировать запись логов и задать расположение хранения логов внутри контейнеров;
- настроить синхронизацию директорий логов в контейнере с логами на сервере с помощью аргумента
volumeпри старте каждого контейнера.
В скрипте Docker Compose не настроена синхронизация директорий с папками. Необходимо вручную добавить монтирование папок в файл
docker-compose.yml.
Создание директории логов#
Ниже приведены примеры команд для создания директорий для хранения логов и присвоения им прав для FaceStream и LUNA Streams.
mkdir -p /tmp/logs/facestream /tmp/logs/streams
chown -R 1001:0 /tmp/logs/facestream /tmp/logs/streams
Активация записи логов#
Активация записи логов LUNA Streams#
Для активации записи в файл необходимо задать настройки log_to_file и folder_with_logs в секции <SERVICE_NAME>_LOGGER настроек LUNA Streams.
Перейдите в интерфейс сервиса Configurator (127.0.0.1:5070) и задайте путь расположения логов в контейнере в параметре folder_with_logs для сервиса LUNA Streams. Например, можно использовать путь /srv/logs.
Установите параметр log_to_file как true чтобы активировать запись логов в файл.
Активация записи логов FaceStream#
Для активации записи логов в файл необходимо задать значение настройки logging > mode в секции FACE_STREAM_CONFIG на l2f (выводить логи только в файл) или l2b (выводить логи и файл и в консоль).
Перейдите в интерфейс сервиса Configurator (127.0.0.1:5070) и укажите необходимое значение настройки. Путь расположения логов в контейнере FaceStream невозможно изменить. Необходимо указывать путь /srv/logs при монтировании.
По умолчанию в логах FaceStream выводятся только предупреждения системы. С помощью настройки параметра "severity" можно включить вывод ошибок (см. описание параметра в руководстве администратора).
Монтирование директорий с логами при старте сервисов#
Директория с логами монтируется с помощью следующего аргумента при старте контейнера:
-v <server_logs_folder>:<container_logs_folder> \
где <server_logs_folder> директория, созданная на этапе создания директории логов, а <container_logs_folder> директория, созданная на этапе активации записи логов.
Пример команды запуска FaceStream с монтированием директории с логами:
docker run \
--env=CONFIGURATOR_HOST=127.0.0.1 \
--env=CONFIGURATOR_PORT=5070 \
-v /var/lib/fs/fs-current/extras/conf/configs/faceengine.conf:/srv/facestream/data/faceengine.conf \
-v /var/lib/fs/fs-current/extras/conf/configs/runtime.conf:/srv/facestream/data/runtime.conf \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/facestream:/srv/logs \
--env=PORT=34569 \
--detach=true \
--restart=always \
--name=facestream \
--network=host \
dockerhub.visionlabs.ru/luna/facestream:v.5.2.29
Примеры команд запуска контейнеров ручным способом содержат эти аргументы.
Настройка ротации логов Docker#
Чтобы ограничить размер логов, генерируемых Docker, можно настроить автоматическую ротацию логов. Для этого необходимо добавить в файл /etc/docker/daemon.json следующие данные:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "5"
}
}
Это позволит Docker хранить до 5 файлов логов на контейнер, при этом каждый файл будет ограничен 100 Мб.
После изменения файла необходимо перезапустить Docker:
systemctl reload docker
Вышеописанные изменения являются значениями по умолчанию для любого вновь созданного контейнера, они не применяются к уже созданным контейнерам.