Типичная установка в кластере

Данный раздел посвящен развертыванию ПК FindFace в кластерной среде.

Совет

Если после прочтения данного раздела у вас остались вопросы, не стесняйтесь задать их нашим экспертам по адресу support@ntechlab.com.

Развертывание ПК FindFace в кластере может быть необходимо по следующим причинам:

  • Нужно распределить высокую нагрузку при обработке видео.

  • Требуется обработка видеопотоков от группы камер в месте их физического расположения.

    Примечание

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

  • Нужно распределить высокую нагрузку при извлечении биометрических образцов.

  • В поиске задействовано большое количество лиц, что требует реализации распределенной базы данных.

Перед тем как приступить к развертыванию, постройте архитектурную схему с учетом будущей нагрузки системы и выделенных под нее аппаратных ресурсов (см. Системные требования). Наиболее распространенной схемой является следующая:

  • Центральный сервер с установленными компонентами findface-ntls, findface-security, findface-sf-api, findface-video-manager, findface-upload, findface-video-worker, findface-extraction-api, findface-tarantool-server, а также сторонним программным обеспечением.

  • Несколько дополнительных серверов для обработки видео с установленным компонентом findface-video-worker.

  • (При необходимости) Несколько дополнительных серверов для извлечения биометрических образцов с установленным компонентом findface-extraction-api.

  • (При необходимости) Дополнительные серверы базы данных с несколькими шардами Tarantool на каждом.

Инструкции в настоящем разделе приведены для описанной выше наиболее часто встречающейся схемы развертывания в кластере. В высоконагруженных системах также может потребоваться распределить обработку API-запросов, т. е. организовать несколько серверов findface-sf-api и findface-video-manager. В этом случае руководствуйтесь инструкциями в разделе Полностью настраиваемая установка.

Развертывание FindFace в кластерной среде состоит из следующих этапов:

Развертывание центрального сервера

Для развертывания центрального сервера ПК FindFace выполните следующие действия:

  1. На выделенном физическом сервере установите ПК FindFace из инсталлятора следующим образом:

    • Устанавливаемый продукт: ПК FindFace.

    • Тип установки: Single server, multiple video workers. В этом случае ПК FindFace установлен в качестве центрального сервера и настроен на взаимодействие с дополнительными удаленными экземплярами findface-video-worker.

    • Тип ускорения findface-video-worker (на центральном сервере): CPU или GPU, в зависимости от конфигурации оборудования.

    • Тип ускорения findface-extraction-api (на центральном сервере): CPU или GPU, в зависимости от конфигурации оборудования.

    По завершении установки в консоль будет выведена информация, необходимая для использования ПК FindFace:

    #############################################################################
    #                       Installation is complete                            #
    #############################################################################
    - upload your license to http://172.20.77.17/#/license/
    - user interface: http://172.20.77.17/
      superuser:      admin
      password:       admin
      documentation:  http://172.20.77.17/doc/
    
  2. Загрузите файл лицензии через веб-интерфейс центрального сервера http://<IP_адрес_сервера>/#/license. Для доступа в веб-интерфейс используйте логин и пароль администратора, выведенные в консоли.

    Примечание

    IP-адрес сервера в ссылках на веб-интерфейсы FindFace имеет вид 127.0.0.1 или <IP_адрес_в_сети>, в зависимости от того, принадлежит ли сервер к сети.

    Важно

    Не передавайте данные superuser (Супер Администратора) третьим лицам. Для администрирования системы создайте назначаемого администратора. Отличие назначаемого администратора от Супер Администратора в том, что последний не может лишиться прав администратора даже при смене роли.

  3. Разрешите лицензируемым сервисам обращаться к серверу лицензирования findface-ntls с любого IP-адреса. Для этого, откройте файл конфигурации /etc/findface-ntls.cfg и установите listen = 0.0.0.0:3133.

    sudo vi /etc/findface-ntls.cfg
    
    ## Address to accept incoming client connections (IP:PORT)
    ## type:string env:CFG_LISTEN longopt:--listen
    listen = 0.0.0.1:3133
    

Развертывание серверов обработки видео

На дополнительном сервере для обработки видео установите экземпляр findface-video-worker, руководствуясь пошаговыми инструкциями. Ответьте на вопросы инсталлятора следующим образом:

  • Устанавливаемый продукт: FindFace Video Worker.

  • Тип ускорения findface-video-worker: CPU или GPU, в зависимости от конфигурации оборудования.

  • FindFace IP address: IP-адрес центрального сервера.

После этого процесс установки будет автоматически запущен. Ответы на вопросы инсталлятора будут сохранены в файл /tmp/<findface-installer-*>.json. Используйте данный файл, чтобы установить FindFace Video Worker на других серверах, не отвечая на вопросы инсталлятора повторно. Для этого запустите инсталлятор командой:

sudo ./findface-security-and-server-4.5.run -f /tmp/<findface-installer-*>.json

Примечание

Если findface-ntls и/или findface-video-manager установлены на других серверах, чем findface-security, укажите их IP-адреса после установки в файле конфигурации /etc/findface-video-worker-gpu.ini (/etc/findface-video-worker-cpu.ini).

sudo vi /etc/findface-video-worker-cpu.ini
sudo vi /etc/findface-video-worker-gpu.ini

В параметре ntls-addr укажите IP-адрес сервера findface-ntls.

ntls-addr=127.0.0.1:3133

В параметре mgr-static укажите IP-адрес сервера findface-video-manager, который будет обеспечивать findface-video-worker настройками и списком видеопотоков для обработки.

mgr-static=127.0.0.1:18811

Развертывание биометрических серверов

На дополнительном сервере для извлечения биометрических образцов установите экземпляр findface-extraction-api из консольного инсталлятора. Ответьте на вопросы инсталлятора следующим образом:

  • Устанавливаемый продукт: ПК FindFace.

  • Тип установки: Fully customized installation.

  • Устанавливаемые компоненты ПК FindFace: findface-extraction-api и findface-data. Для того чтобы их выбрать, сначала снимите выделение со всех компонентов, введя в командной строке -*, затем введите порядковые номера findface-extraction-api и findface-data через пробел: 1 7. Введите done для сохранения выбора и перехода к следующему шагу.

  • Тип ускорения findface-extraction-api: CPU или GPU.

  • Необходимость в изменении файла конфигурации /etc/findface-extraction-api.ini: укажите IP-адрес сервера findface-ntls.

  • Устанавливаемые модели нейронных сетей: CPU/GPU-модель для извлечения биометрических данных лица (обязательна для установки) и (опционально) CPU/GPU модели для распознавания пола, возраста, эмоций, очков, бороды и медицинской маски. Для того чтобы выбрать нужные модели, сначала снимите установленное по умолчанию выделение всех моделей, введя в командной строке -*, затем введите порядковые номера нужных моделей через пробел, например: 8 2 для выбора соответственно GPU-модели для извлечения биометрических данных и GPU-модели для распознавания возраста. Введите done для сохранения выбора и перехода к следующему шагу. Удостоверьтесь, что для каждой модели выбран правильный тип ускорения CPU или GPU: он должен совпадать с типом ускорения findface-extraction-api. Обратите внимание, что findface-extraction-api на CPU может работать только с CPU-моделями, в то время как findface-extraction-api на GPU поддерживает как CPU-, так и GPU-модели. Подробнее см. Распознавание атрибутов лица.

    Доступны следующие модели:

    Атрибут лица

    Ускорение

    Пакет

    биометрия лица

    CPU

    findface-data-ifruit-320-cpu_3.0.0_all.deb findface-data-jackfruit-160-cpu_3.0.0_all.deb findface-data-jackfruit-320-cpu_3.0.0_all.deb findface-data-jackfruit-480-cpu_3.0.0_all.deb

    GPU

    findface-data-ifruit-320-gpu_3.0.0_all.deb findface-data-jackfruit-160-gpu_3.0.0_all.deb findface-data-jackfruit-320-gpu_3.0.0_all.deb findface-data-jackfruit-480-gpu_3.0.0_all.deb

    возраст

    CPU

    findface-data-age.v1-cpu_3.0.0_all.deb

    GPU

    findface-data-age.v1-gpu_3.0.0_all.deb

    пол

    CPU

    findface-data-gender.v2-cpu_3.0.0_all.deb

    GPU

    findface-data-gender.v2-gpu_3.0.0_all.deb

    эмоции

    CPU

    findface-data-emotions.v1-cpu_3.0.0_all.deb

    GPU

    findface-data-emotions.v1-gpu_3.0.0_all.deb

    очки

    CPU

    findface-data-glasses3.v0-cpu_3.0.0_all.deb

    GPU

    findface-data-glasses3.v0-gpu_3.0.0_all.deb

    борода

    CPU

    findface-data-beard.v0-cpu_3.0.0_all.deb

    GPU

    findface-data-beard.v0-gpu_3.0.0_all.deb

    медицинская маска

    CPU

    findface-data-medmask3.v2-cpu_3.0.0_all.deb

    GPU

    findface-data-medmask3.v2-gpu_3.0.0_all.deb

После этого процесс установки будет автоматически запущен. Ответы на вопросы инсталлятора будут сохранены в файл /tmp/<findface-installer-*>.json. Используйте данный файл, чтобы установить findface-extraction-api на других серверах, не отвечая на вопросы инсталлятора повторно.

sudo ./findface-security-and-server-4.5.run -f /tmp/<findface-installer-*>.json

После развертывания биометрических серверов распределите между ними нагрузку.

Распределение нагрузки между биометрическими серверами

Распределение нагрузки между несколькими биометрическими серверами выполняется через балансировщик нагрузки. Приведенная ниже пошаговая инструкция демонстрирует балансировку нагрузки с помощью nginx в режиме round-robin для 3-х экземпляров findface-extraction-api, расположенных на различных физических серверах. Один экземпляр установлен на центральном сервере ПК FindFace (172.168.1.9), 2 других на дополнительных удаленных серверах (172.168.1.10, 172.168.1.11). Если в системе присутствует большее количество биометрических серверов, балансировка нагрузки выполняется по аналогии.

Совет

Вы можете использовать любой удобный вам балансировщик нагрузки. Руководство по его использованию ищите в соответствующей справочной документации.

Для балансировки нагрузки между экземплярами findface-extraction-api выполните следующие действия:

  1. Назначьте т. н. сервер шлюза для балансируемой группы биометрических серверов. Им может стать центральный сервер ПК FindFace (рекомендуется) или любой другой сервер с установленным nginx.

    Важно

    Вам нужно будет указать IP-адрес шлюза при настройке распределенной сети ПК FindFace.

    Совет

    Вы можете установить nginx следующим образом:

    sudo apt update
    sudo apt install nginx
    
  2. На сервере шлюза создайте новый файл конфигурации Nginx.

    sudo vi /etc/nginx/sites-available/extapi
    
  3. Вставьте следующий текст в созданный файл конфигурации. В директиве upstream (upstream extapibackends) замените примерные IP-адреса на актуальные IP-адреса биометрических серверов. В директиве server в параметре listen укажите номер слушающего порта сервера шлюза. Вам потребуется указать данный порт при настройке распределенной сети ПК FindFace.

    upstream extapibackends {
            server 172.168.1.9:18666; ## ``findface-extraction-api`` on principal server
            server 172.168.1.10:18666; ## 1st additional extraction server
            server 127.168.1.11:18666; ## 2nd additional extraction server
    }
    server {
            listen 18667;
            server_name extapi;
            client_max_body_size 64m;
            location / {
                    proxy_pass http://extapibackends;
                    proxy_next_upstream error;
            }
            access_log /var/log/nginx/extapi.access_log;
            error_log /var/log/nginx/extapi.error_log;
    }
    
  4. Включите балансировщик нагрузки в nginx.

    sudo ln -s /etc/nginx/sites-available/extapi /etc/nginx/sites-enabled/
    
  5. Перезапустите nginx.

    sudo service nginx restart
    
  6. На центральном сервере и каждом из дополнительных биометрических серверов откройте файл конфигурации /etc/findface-extraction-api.ini. Замените адрес localhost в параметре listen на адрес, который вы указали до этого в директиве upstream extapibackends файла конфигурации Nginx /etc/nginx/sites-available/extapi. В нашем примере адрес 1-го дополнительного биометрического сервера должен быть заменен на следующий:

    sudo vi /etc/findface-extraction-api.ini
    
    listen: 172.168.1.10:18666
    
  7. Перезапустите findface-extraction-api на центральном сервере и каждом дополнительном биометрическом сервере.

    sudo systemctl restart findface-extraction-api.service
    

Балансировка нагрузки успешно настроена. Не забудьте указать актуальный IP-адрес и слушающий порт сервера шлюза при настройке распределенной сети ПК FindFace.

Организация распределенной базы данных

Компонент findface-tarantool-server соединяет базу данных Tarantool и компонент findface-sf-api, передавая результаты поиска от базы данных в findface-sf-api для дальнейшей обработки. Для увеличения скорости поиска на каждом сервере с базой данных Tarantool могут быть созданы многочисленные сегменты (шарды) findface-tarantool-server. Их параллельное функционирование приводит к значительному увеличению производительности. Каждый шард может обрабатывать приблизительно до 10 000 000 лиц. При развертывании findface-tarantool-server из инсталлятора шарды создаются автоматически с учетом аппаратной конфигурации физического сервера.

Для того чтобы распределить биометрическую базу данных, установите findface-tarantool-server на каждом сервере базы данных. Ответьте на вопросы инсталлятора следующим образом:

  • Устанавливаемый продукт: ПК FindFace.

  • Тип установки: Fully customized installation.

  • Устанавливаемые компоненты ПК FindFace: findface-tarantool-server. Для того чтобы его выбрать, сначала снимите выделение со всех компонентов, введя в командной строке -*, затем введите порядковый номер findface-tarantool-server: 13. Введите done для сохранения выбора и перехода к следующему шагу.

После этого процесс установки будет автоматически запущен. Ответы на вопросы инсталлятора будут сохранены в файл /tmp/<findface-installer-*>.json. Используйте данный файл, чтобы установить findface-tarantool-server на других серверах, не отвечая на вопросы инсталлятора повторно.

sudo ./findface-security-and-server-4.5.run -f /tmp/<findface-installer-*>.json

В результате установки шарды findface-tarantool-server будут автоматически установлены в количестве N = min(max(min(mem_mb // 2000, cpu_cores), 1), 16 * cpu_cores). Т. е. количество равно размеру оперативной памяти в Мб, разделенному на 2000, или количеству физических ядер процессора (но не менее 1 шарда), или же количеству физических ядер процессора, умноженному на 16, если первое полученное значение больше.

Обязательно укажите IP-адреса и порты шардов при настройке распределенной сети ПК FindFace. Для того чтобы узнать номера портов, на каждом сервере базы данных выполните следующую команду:

sudo cat /etc/tarantool/instances.enabled/*shard* | grep -E ".start|(listen =)"`

Будет возвращен следующий результат:

    listen = '127.0.0.1:33001',
FindFace.start("127.0.0.1", 8101, {
    listen = '127.0.0.1:33002',
FindFace.start("127.0.0.1", 8102, {

Номера портов шардов указаны в секции FindFace.start: 8101, 8102 и т. д.

Настройка сетевого взаимодействия

После развертывания компонентов ПК FindFace настройте их взаимодействие по сети. Выполните следующие действия:

  1. Откройте файл конфигурации /etc/findface-sf-api.ini:

    sudo vi /etc/findface-sf-api.ini
    

    Задайте следующие параметры:

    Параметр

    Описание

    extraction-api -> extraction-api

    IP-адрес и слушающий порт сервера, являющегося шлюзом для биометрических серверов с настроенной балансировкой нагрузки.

    storage-api -> shards -> master

    IP-адрес и порт мастера шарда findface-tarantool-server. Остальные шарды прописываются по аналогии.

    upload_url

    Путь в WebDAV nginx, по которому в компонент findface-upload будут отправляться исходные изображения, миниатюры и нормализованные изображения лиц.

    ...
    extraction-api:
      extraction-api: http://172.168.1.9:18667
    
    ...
    webdav:
      upload-url: http://127.0.0.1:3333/uploads/
    
    ...
    storage-api:
      ...
      shards:
      - master: http://172.168.1.9:8101/v2/
        slave: ''
      - master: http://172.168.1.9:8102/v2/
        slave: ''
      - master: http://172.168.1.12:8101/v2/
        slave: ''
      - master: http://172.168.1.12:8102/v2/
        slave: ''
      - master: http://172.168.1.13:8102/v2/
        slave: ''
      - master: http://172.168.1.13:8102/v2/
        slave: ''
    
  2. Откройте файл конфигурации /etc/findface-security/config.py.

    sudo vi /etc/findface-security/config.py
    

    Задайте следующие параметры:

    Параметр

    Описание

    SERVICE_EXTERNAL_ADDRESS

    IP-адрес или URL ПК FindFace, являющимся приоритетным для Genetec и вебхуков. Если параметр не задан, система использует для работы с данным функционалом EXTERNAL_ADDRESS. Для использования Genetec и вебхуков обязательно укажите по крайней мере один из параметров SERVICE_EXTERNAL_ADDRESS/ EXTERNAL_ADDRESS.

    EXTERNAL_ADDRESS

    (Опционально) IP-адрес или URL, который используется для доступа к веб-интерфейсу ПК FindFace. Если параметр не задан, система автоматически определяет его как внешний IP-адрес. Для доступа в ПК FindFace вы можете использовать оба IP-адреса: как автоопределенный, так и указанный в EXTERNAL_ADDRESS.

    VIDEO_DETECTOR_TOKEN

    Придумайте токен и укажите его в данном параметре, чтобы авторизовать модуль видеодетекции лиц.

    VIDEO_MANAGER_ADDRESS

    IP-адрес сервера findface-video-manager.

    NTLS_HTTP_URL

    IP-адрес сервера findface-ntls.

    ROUTER_URL

    Внешний IP-адрес сервера findface-security, который будет получать обнаруженные лица от экземпляра(ов) findface-video-worker.

    SF_API_ADDRESS

    IP-адрес сервера findface-sf-api.

    EXTRACTION_API

    IP-адрес и слушающий порт сервера, являющегося шлюзом для биометрических серверов с настроенной балансировкой нагрузки.

    sudo vi /etc/findface-security/config.py
    
    ...
    # SERVICE_EXTERNAL_ADDRESS prioritized for webhooks and genetec
    SERVICE_EXTERNAL_ADDRESS = 'http://localhost'
    EXTERNAL_ADDRESS = 'http://127.0.0.1'
    
    
    ...
    FFSECURITY = {
        'VIDEO_DETECTOR_TOKEN': '7ce2679adfc4d74edcf508bea4d67208',
        ...
        'EXTRACTION_API': 'http://172.168.1.9:18667/',
        'VIDEO_MANAGER_ADDRESS': 'http://127.0.0.1:18810',
        ...
        'NTLS_HTTP_URL': 'http://127.0.0.1:3185',
        'ROUTER_URL': 'http://172.168.1.9',
        ...
        'SF_API_ADDRESS': 'http://127.0.0.1:18411',
        ...
    }
    

На этом установка ПК FindFace в кластерной среде будет завершена.

Важно

Для того чтобы сохранить совместимость ПК FindFace со средой установки, настоятельно рекомендуется отключить автоматическое обновление Ubuntu. В этом случае вы сможете обновлять ОС вручную, контролируя процесс обновления отдельных пакетов.

Для отключения автоматического обновления Ubuntu выполните следующие команды:

sudo apt-get remove unattended-upgrades
sudo systemctl stop apt-daily.timer
sudo systemctl disable apt-daily.timer
sudo systemctl disable apt-daily.service
sudo systemctl daemon-reload