Установка компонентов Сервера

Данный раздел содержит сведения о пошаговой настройке лицензирования и установке компонентов Сервера FindFace. Выполните приведенные ниже инструкции, придерживаясь заданного порядка.

Совет

Установка на одном физическом сервере также может быть выполнена с помощью консольного инсталлятора.

In this section:

Подготовка deb-пакетов к установке

Для получения установочных пакетов FindFace Enterprise Server SDK свяжитесь со своим менеджером компании «НТех лаб». Для того чтобы подготовить пакеты к установке, выполните следующие действия:

Предупреждение

На данном этапе будет автоматически создан пользователь ntech. Во избежание конфликта убедитесь, что пользователь с таким именем отсутствует в системе.

  1. Распакуйте пакет с компонентами на каждом из физических серверов развертывания.

    sudo dpkg -i <findface-repo>.deb
    
  2. Распакуйте пакеты с моделями нейронных сетей (биометрия лица, пол, возраст, эмоции). Если FindFace Enterprise Server SDK развертывается на кластере серверов, модели устанавливаются только на серверах findface-nnapi.

    sudo dpkg -i findface-data*
    
  3. Добавьте ключ подписи на каждом из серверов развертывания.

    sudo apt-key add /var/findface-repo/public.key
    

Лицензирование

Вы получаете файл лицензии вместе с установочными пакетами FindFace Enterprise Server SDK от менеджера «Нтех лаб». Если вы выберите лицензирование в закрытой сети, вам также будет отправлен ключ аппаратной защиты Guardant. Принцип лицензирования FindFace Enterprise Server SDK показан на схеме ниже:

https://gcc-elb-public-prod.gliffy.net/embed/image/8a534e69c2f181422ef0c298f11b1fcb.png

Этапы лицензирования:

  1. Установите и настройте локальный сервер лицензий NTLS.
  2. Если лицензируемые компоненты (findface-nnapi, tntapi, fkvideo_detector и extraction-api) установлены на удаленных серверах, укажите IP-адрес сервера NTLS в их файлах конфигурации.

Для того чтобы установить и настроить NTLS, выполните следующие действия:

  1. Установите компонент NTLS:

    sudo apt-get update
    sudo apt-get install ntls
    

    Совет

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

    sudo vi /etc/ntls.cfg
    

    If necessary, change the license folder in the license-dir parameter. By default, license files are stored at /ntech/license:

    license-dir = /ntech/license
    

    При необходимости раскомментируйте строку proxy и укажите IP-адрес прокси-сервера:

    proxy = http://192.168.1.1:12345
    

    По умолчанию доступ в веб-интерфейс NTLS возможен с любого удаленного сервера (ui = 0.0.0.0:3185). Для того чтобы обеспечить доступ к веб-интерфейсу NTLS только с определенного IP-адреса, отредактируйте параметр ui:

    ui = 127.0.0.1:3185
    
  2. Enable the NTLS service autostart and launch the service:

    sudo systemctl enable ntls && sudo systemctl start ntls
    
  3. Загрузите файл лицензии в веб-интерфейсе NTLS по адресу http://<IP-адрес NTLS>:3185/#/. Вы также можете использовать веб-интерфейс NTLS для продления и апгрейда лицензии.

  4. Для лицензирования в закрытой сети также нужно вставить ключ Guardant в USB-порт.

Важно

Если лицензируемые компоненты (findface-nnapi, tntapi, fkvideo_detector и extraction-api) будут установлены на удаленных серверах, обязательно укажите IP-адрес сервера NTLS в их файлах конфигурации после установки.

Установка компонентов Сервера

После того как deb-пакеты FindFace Enterprise Server SDK подготовлены, а лицензирование настроено, установите компоненты Сервера в соответствии с архитектурной схемой.

Установка facenapi

Установите и настройте компонент findface-facenapi следующим образом:

  1. Установите компонент.

    sudo apt-get update
    sudo apt-get install python3-facenapi
    
  2. If MongoDB is installed on a remote host, specify its IP address in the findface-facenapi configuration file.

    sudo vi /etc/findface-facenapi.ini
    
    mongo_host = '192.168.113.1'
    
  3. Проверьте работоспособность компонента. Для этого вызовите приложение findface-facenapi, выполнив приведенную ниже команду. После вызова подождите минуту. Если ошибок не обнаружено, верните контроль над командной строкой, нажав сочетание клавиш Ctrl+C.

    If MongoDB is installed on the same host, execute:

    findface-facenapi
    

    If MongoDB is installed on a remote host, execute:

    sudo findface-facenapi --config=/etc/findface-facenapi.ini
    
  4. Check if the findface-facenapi service autostart at system startup is disabled.

    systemctl list-unit-files | grep findface-facenapi
    
  5. Добавьте сервис в автозагрузку и запустите его.

    sudo systemctl enable findface-facenapi.service && sudo service findface-facenapi start
    
  6. Make sure that the service is up and running. The command will return a service description, a status (should be Active), path and running time.

    sudo service findface-facenapi status
    

Совет

You can view the findface-facenapi logs by executing:

sudo tail -f /var/log/syslog | grep facenapi

Установка findface-nnapi

Установите и настройте компонент findface-nnapi следующим образом:

Совет

Возможно, вам также захочется прочитать о распознавании пола, возраста и эмоций.

  1. Установите компонент.

    sudo apt-get update
    sudo apt-get install findface-nnapi
    
  2. If NTLS is installed on a remote host, specify its IP address in the findface-nnapi configuration file.

    sudo vi /etc/findface-nnapi.ini
    
    license_ntls_server = 192.168.113.2:3133
    
  3. Проверьте работоспособность компонента. Для этого вызовите приложение findface-nnapi, выполнив приведенную ниже команду. После вызова подождите минуту. Если ошибок не обнаружено, верните контроль над командной строкой, нажав сочетание клавиш Ctrl+C.

    findface-nnapi
    
  4. Check if the findface-nnapi service autostart at system startup is disabled.

    systemctl list-unit-files | grep findface-nnapi
    
  5. Добавьте сервис в автозагрузку и запустите его.

    sudo systemctl enable findface-nnapi.service && sudo service findface-nnapi start
    
  6. Make sure that the service is up and running. The command will return a service description, a status (should be Active), path and running time.

    sudo service findface-nnapi status
    

Совет

You can view the findface-nnapi logs by executing:

sudo tail -f /var/log/syslog | grep nnapi

Установка findface-upload

Для хранения на Сервере FindFace всех обработанных исходных изображений, а также таких артефактов Сервера, как миниатюры и нормализованные изображения лиц, установите и настройте компонент findface-upload.

Совет

Пропустите данный шаг, если вы не собираетесь хранить эти данные. В этом случае на Сервере будут храниться только биометрические образцы (в базах данных MongoDB и Tarantool).

Выполните следующие действия:

  1. Установите компонент:

    sudo apt-get update
    sudo apt-get install findface-upload
    
  2. By default the original images, thumbnails and normalized images are stored at /var/lib/ffupload/uploads/. You can view this folder content at http://127.0.0.1:3333/uploads/ in your browser. Make sure that this address is available.

    curl -I http://127.0.0.1:3333/uploads/
    ##HTTP/1.1 200 OK
    

    Важно

    You will have to specify it when configuring network.

Установка tntapi

Компонент tntapi соединяет базу данных Tarantool и компонент findface-facenapi, передавая результаты поиска от базы данных в findface-facenapi для дальнейшей обработки. Для увеличения скорости поиска на каждом сервере с базой данных Tarantool могут быть созданы многочисленные сегменты (шарды) tntapi. Их параллельное функционирование приводит к значительному увеличению производительности. Каждый шард может обрабатывать приблизительно до 10 000 000 лиц. Если FindFace Enterprise Server SDK развертывается на одном сервере, одного шарда, созданного по умолчанию, будет достаточно. При развертывании в кластерной среде количество шардов рассчитывается в зависимости от нескольких параметров (см. ниже).

Установка tntapi на одном сервере

Установите и настройте компонент findface-nnapi следующим образом:

  1. Install tntapi. Tarantool will be installed automatically along with it.

    sudo apt-get update
    sudo apt-get install findface-tarantool-server
    
  2. Disable the Tarantool example service autostart and stop the service.

    sudo systemctl disable tarantool@example && sudo systemctl stop tarantool@example
    
  3. For a small-scale project, the tntapi shard created by default (tarantool@FindFace) would suffice as 1 shard can handle up to 10,000,000 faces. Configuration settings of the default shard are defined in the file /etc/tarantool/instances.enabled/FindFace.lua. We strongly recommend you not to add or edit anything in this file, except the maximum memory usage (memtx_memory), the NTLS IP address required for the tntapi licensing, and the remote access setting. The maximum memory usage should be set in bytes, depending on the number of faces the shard handles, at the rate roughly 1280 byte per face.

    Open the configuration file:

    sudo vi /etc/tarantool/instances.enabled/FindFace.lua
    

    Edit the value due to the number of faces the shard handles. The value 1.2*1024*1024*1024 corresponds to 1,000,000 faces:

    memtx_memory = 1.2 * 1024 * 1024 * 1024,
    

    Specify the NTLS IP address if NTLS is remote:

    FindFace.start(“127.0.0.1”, 8001, {license_ntls_server=“192.168.113.2:3133”})
    

    With standalone deployment, you can access Tarantool by default only locally (127.0.0.1). If you want to access Tarantool from a remote host, either specify the remote host IP address in the FindFace.start section, or change 127.0.0.1 to 0.0.0.0 there to allow access to Tarantool from any IP address. In the case-study below, you allow access only from 192.168.113.10:

    FindFace.start("192.168.113.10", 8001, {license_ntls_server=“192.168.113.2:3133”})
    

    Now you allow access from any IP address:

    FindFace.start("0.0.0.0", 8001, {license_ntls_server=“192.168.113.2:3133”})
    
  4. Configure the tntapi shard to autostart and start the shard.

    sudo systemctl enable tarantool@FindFace && sudo systemctl start tarantool@FindFace
    
  5. Retrieve the shard status. The command will return a service description, a status (should be Active), path and running time.

    sudo systemctl status tarantool@FindFace
    

    Совет

    You can view the tntapi logs by executing:

    sudo tail -f /var/log/tarantool/FindFace.log
    
  6. The tntapi.json file containing the tntapi shard parameters is automatically installed along with tntapi into the /etc/ folder.

    Важно

    You will have to uncomment the path to tntapi.json when configuring network.

Установка tntapi на кластере серверов

Установите и настройте компонент findface-nnapi следующим образом:

  1. Install tntapi on designated hosts. Tarantool will be installed automatically along it.

    sudo apt-get update
    sudo apt-get install findface-tarantool-server
    
  2. Create tntapi shards on each tntapi host. To learn how to shard, let’s consider a case-study of a cluster environment containing 4 database hosts. We’ll create 4 shards on each.

    Важно

    При создании шардов для крупных проектов соблюдайте следующие правила:

    1. 1 tntapi shard can handle approximately 10,000,000 faces.
    2. Количество шардов на одном сервере не должно превышать число физических ядер процессора минус 1.
  3. Disable the Tarantool example service autostart and stop the service. Do so for all the 4 hosts.

    sudo systemctl disable tarantool@example && sudo systemctl stop tarantool@example
    
  4. Disable the shard created by default. Do so for all the 4 hosts.

    sudo systemctl disable tarantool@FindFace
    
  5. Напишите bash-скрипт shard.sh, который автоматически создаст шарды и файлы конфигурации для каждого из них. Скрипт должен быть написан для каждого из 4-х серверов. Используйте приведенный ниже скрипт как основу для своего кода. Данный скрипт создает на сервере 4 шарда, использующие порты: tntapi 33001..33004 и http 8001..8004.

    Важно

    The script below creates configuration files based on the default configuration settings stored in the file /etc/tarantool/instances.enabled/FindFace.lua. We strongly recommend you not to add or edit anything in the default file, except the maximum memory usage (memtx_memory) and the NTLS IP address required for the tntapi licensing. The maximum memory usage should be set in bytes for each shard, depending on the number of faces a shard handles, at the rate roughly 1280 byte per face.

    Open the configuration file:

    sudo vi /etc/tarantool/instances.enabled/FindFace.lua
    

    Edit the value due the number of faces a shard handles. The value 1.2*1024*1024*1024 corresponds to 1,000,000 faces:

    memtx_memory = 1.2*1024*1024*1024,
    

    Specify the NTLS IP address if NTLS is remote:

    FindFace.start(“127.0.0.1”, 8001, {license_ntls_server=“192.168.113.2:3133”})
    
    #!/bin/sh
    set -e
    
    for I in `seq 1 4`; do
           TNT_PORT=$((33000+$I)) &&
           HTTP_PORT=$((8000+$I)) &&
           sed "
                   s#/opt/ntech/var/lib/tarantool/default#/opt/ntech/var/lib/tarantool/shard_$I#g;
                   s/listen = .*$/listen = '127.0.0.1:$TNT_PORT',/;
                   s/\"127.0.0.1\", 8001,/\"0.0.0.0\", $HTTP_PORT,/;
           " /etc/tarantool/instances.enabled/FindFace.lua > /etc/tarantool/instances.enabled/FindFace_shard_$I.lua;
    
           mkdir -p /opt/ntech/var/lib/tarantool/shard_$I/snapshots
           mkdir -p /opt/ntech/var/lib/tarantool/shard_$I/xlogs
           mkdir -p /opt/ntech/var/lib/tarantool/shard_$I/index
           chown -R tarantool:tarantool /opt/ntech/var/lib/tarantool/shard_$I
           echo "Shard #$I inited"
    done;
    

    Совет

    Загрузите пример скрипта.

  6. Run the script from the home directory.

    sudo sh ~/shard.sh
    
  7. Проверьте, созданы ли файлы конфигурации.

    ls /etc/tarantool/instances.enabled/
    
    ##example.lua FindFace.lua FindFace_shard_1.lua FindFace_shard_2.lua FindFace_shard_3.lua FindFace_shard_4.lua
    
  8. Launch all the 4 shards. Do so on each host.

    for I in `seq 1 4`; do sudo systemctl enable tarantool@FindFace_shard_$I; done;
    for I in `seq 1 4`; do sudo systemctl start tarantool@FindFace_shard_$I; done;
    
  9. Проверьте статус шардов.

    sudo systemctl status tarantool@FindFace*
    

    You should get the following output:

    tarantool@FindFace_shard_3.service - Tarantool Database Server
    Loaded: loaded (/lib/systemd/system/tarantool@.service; disabled; vendor preset: enabled)
    Active: active (running) since Tue 2017-01-10 16:22:07 MSK; 32s ago
    ...
    tarantool@FindFace_shard_2.service - Tarantool Database Server
    Loaded: loaded (/lib/systemd/system/tarantool@.service; disabled; vendor preset: enabled)
    Active: active (running) since Tue 2017-01-10 16:22:07 MSK; 32s ago
    ...
    tarantool@FindFace_shard_1.service - Tarantool Database Server
    Loaded: loaded (/lib/systemd/system/tarantool@.service; disabled; vendor preset: enabled)
    Active: active (running) since Tue 2017-01-10 16:22:07 MSK; 32s ago
    ...
    tarantool@FindFace_shard_4.service - Tarantool Database Server
    Loaded: loaded (/lib/systemd/system/tarantool@.service; disabled; vendor preset: enabled)
    Active: active (running) since Tue 2017-01-10 16:22:07 MSK; 32s ago
    ...
    

    Совет

    You can view the tntapi logs by executing:

    sudo tail -f /var/log/tarantool/FindFace_shard_{1,2,3,4}.log
    
  10. На сервере с компонентом findface-facenapi создайте файл tntapi_cluster.json, содержащий адреса и порты всех шардов. Распределите доступные шарды равномерно по 1024 ячейкам в одной строке. Нажмите здесь, чтобы посмотреть, как выглядит файл для 4 серверов с 4 шардами на каждом.

    Совет

    Вы можете создать файл tntapi_cluster.json следующим образом:

    1. Создайте файл с линейным списком всех шардов, каждый шард с новой строки (нажмите здесь, чтобы посмотреть пример).

      sudo vi s.txt
      
    2. Выполните приведенный ниже скрипт. В результате будет создан новый файл tntapi_cluster.json, содержащий список адресов и портов всех шардов, равномерно распределенных по 1024 ячейкам.

    cat s.txt | perl -lane 'push(@s,$_); END{$m=1024; $t=scalar @s;for($i=0;$i<$m;$i++){$k=int($i*$t/$m); push(@r,"\"".$s[$k]."\"")} print "[[".join(", ",@r)."]]"; }' > tntapi_cluster.json
    
  11. Move tntapi_cluster.json to the directory /etc/.

    Важно

    You will have to uncomment and specify the path to tntapi_cluster.json when configuring network.

Сетевые настройки

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

  1. Откройте для редактирования файл конфигурации findface-facenapi.ini.

    sudo vi /etc/findface-facenapi.ini
    
  2. Отредактируйте настройки в соответствии с фактическим распределением компонентов.

    ffupload_url = 'http://127.0.0.1:3333'
    mongo_host = '127.0.0.1'
    nnapi_url = 'http://127.0.0.1:18088'
    tntapi_servers_file = '/etc/tntapi.json'
    

    Предупреждение

    Содержимое файла findface-facenapi.ini должно представлять собой синтаксически верный код Python.

    Примечание

    Do not specify ffupload_url if the findface-upload component is not installed.

  3. По умолчанию, если один или несколько шардов tntapi будут недоступны во время идентификации лица, компонент findface-facenapi вернет ошибку. При необходимости раскомментируйте параметр tntapi_ignore_search_error и присвойте ему значение True. В этом случае findface-facenapi будет использовать для идентификации только доступные шарды tntapi и укажет в ответе отношение количества доступных шардов tntapi к их общему количеству.

    tntapi_ignore_search_errors = True
    
  4. Restart all the FindFace Enterprise Server SDK services and nginx (for findface-upload) on the relevant host(s).

    sudo service 'findface*' restart
    sudo service nginx restart
    
  5. Проверьте статус сервисов. Команда вернет описание сервисов, их статус (должен быть Активен), путь и длительность текущей сессии.

    sudo service 'findface*' status
    sudo service nginx status