Пошаговая установка

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

Совет

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

В этом разделе:

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

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

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

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

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

    sudo dpkg -i <findface-repo>.deb
    
  2. Добавьте ключ подписи на каждом из серверов развертывания.

    sudo apt-key add /var/findface-repo/public.key
    sudo apt-get update
    
  3. Распакуйте пакеты с моделями нейронных сетей (биометрия лица, пол, возраст, эмоции). Если FindFace Enterprise Server SDK развертывается на кластере серверов, модели устанавливаются только на серверах findface-nnapi.

    sudo dpkg -i findface-data*
    

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

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

licensing_ru

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

  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
    

    При необходимости укажите в параметре license-dir другую папку для хранения файла лицензии. По умолчанию файл лицензии хранится в папке /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. Добавьте сервис NTLS в автозагрузку и запустите сервис:

    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 подготовлены, а лицензирование настроено, установите компоненты Сервера в соответствии с архитектурной схемой.

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

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

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

    sudo apt-get update
    sudo apt-get install python3-facenapi
    
  2. Если база данных MongoDB установлена на удаленном сервере, укажите его IP адрес в файле конфигурации findface-facenapi.

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

    Если база данных MongoDB установлена на одном сервере с компонентом findface-facenapi, выполните:

    findface-facenapi
    

    Если база данных MongoDB установлена на удаленном сервере, выполните:

    sudo findface-facenapi --config=/etc/findface-facenapi.ini
    
  4. Проверьте, не добавлен ли сервис findface-facenapi в автозагрузку Ubuntu.

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

    sudo systemctl enable findface-facenapi.service && sudo service findface-facenapi start
    
  6. Убедитесь, что сервис активен. Команда вернет описание сервиса, его статус (должен быть Активен), путь и длительность текущей сессии.

    sudo service findface-facenapi status
    

Совет

Для того чтобы отобразить логи findface-facenapi, выполните команду:

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

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

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

Совет

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

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

    sudo apt-get update
    sudo apt-get install findface-nnapi
    
  2. Если NTLS установлен на удаленном сервере, укажите его IP адрес в файле конфигурации findface-nnapi.

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

    findface-nnapi
    
  4. Проверьте, не добавлен ли сервис findface-nnapi в автозагрузку Ubuntu.

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

    sudo systemctl enable findface-nnapi.service && sudo service findface-nnapi start
    
  6. Убедитесь, что сервис активен. Команда вернет описание сервиса, его статус (должен быть Активен), путь и длительность текущей сессии.

    sudo service findface-nnapi status
    

Совет

Для того чтобы отобразить логи findface-nnapi, выполните команду:

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. По умолчанию исходные изображения, миниатюры и нормализованные изображения лиц хранятся в папке /var/lib/ffupload/uploads/. Вы можете просмотреть содержимое папки прямо в браузере по адресу http://127.0.0.1:3333/uploads/. Убедитесь, что этот адрес доступен.

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

    Важно

    Вам потребуется указать его в настройках сети.

Установка tntapi

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

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

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

  1. Установите компонент tntapi. База данных Tarantool будет установлена автоматически вместе с ним.

    sudo apt-get update
    sudo apt-get install findface-tarantool-server
    
  2. Удалите тестовый сервис Tarantool из автозагрузки Ubuntu и остановите его.

    sudo systemctl disable tarantool@example && sudo systemctl stop tarantool@example
    
  3. Поскольку один шард может обрабатывать до 10 000 000 лиц, для обслуживания небольших проектов до 1 000 000 лиц будет достаточно задействовать шард tntapi, созданный по умолчанию (tarantool@FindFace). Настройки конфигурации данного шарда задаются в файле /etc/tarantool/instances.enabled/FindFace.lua. Настоятельно рекомендуется ничего не добавлять и не редактировать в данном файле, за исключением максимального использования оперативной памяти (memtx_memory), IP-адреса локального сервера лицензий NTLS, необходимого для лицензирования tntapi, а также настроек удаленного доступа. Максимальное использование памяти задается в байтах в зависимости от количества лиц, обрабатываемых шардом, исходя из соотношения примерно 1280 байт на 1 лицо.

    Откройте файл конфигурации:

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

    Отредактируйте значение в зависимости от количества лиц, обрабатываемых шардом. Значение 1.2*1024*1024*1024 соответствует 1 000 000 лиц:

    memtx_memory = 1.2 * 1024 * 1024 * 1024,
    

    Укажите IP-адрес сервера NTLS, если он удаленный:

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

    Если Сервер FindFace развертывается на одиночном физическом сервере, база данных Tarantool по умолчанию будет доступна только локально (127.0.0.1). Если необходимо открыть доступ к базе данных Tarantool с удаленного сервера, в разделе FindFace.start укажите IP-адрес определенного сервера, либо измените 127.0.0.1 на 0.0.0.0, чтобы разрешить доступ к базе данных Tarantool со всех IP-адресов. В примере ниже доступ возможен только с IP-адреса 192.168.113.10:

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

    Здесь доступ возможен с любого IP-адреса:

    FindFace.start("0.0.0.0", 8001, {license_ntls_server=“192.168.113.2:3133”})
    
  4. Добавьте шард tntapi в автозагрузку Ubuntu и запустите шард.

    sudo systemctl enable tarantool@FindFace && sudo systemctl start tarantool@FindFace
    
  5. Убедитесь, что шард активен. Команда вернет описание сервиса, его статус (должен быть Активен), путь и длительность текущей сессии.

    sudo systemctl status tarantool@FindFace
    

    Совет

    Для того чтобы отобразить логи tntapi, выполните команду:

    sudo tail -f /var/log/tarantool/FindFace.log
    
  6. Файл tntapi.json с описанием параметров шарда автоматически устанавливается вместе с компонентом tntapi в папку /etc.

    Важно

    Вам потребуется раскомментировать путь к данному файлу в настройках сети.

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

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

  1. Установите компонент tntapi на выделенных серверах. База данных Tarantool будет установлена автоматически вместе с ним.

    sudo apt-get update
    sudo apt-get install findface-tarantool-server
    
  2. Создайте шарды tntapi на каждом сервере. Процедура шардинга будет рассмотрена на примере кластерной среды, содержащей 4 сервера под базу данных, на каждом из которых нужно создать по 4 шарда.

    Важно

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

    1. Один шард может обрабатывать приблизительно 10 000 000 лиц.
    2. Количество шардов на одном сервере не должно превышать число физических ядер процессора минус 1.
  3. На каждом из 4-х серверов удалите тестовый сервис Tarantool из автозагрузки Ubuntu и остановите его.

    sudo systemctl disable tarantool@example && sudo systemctl stop tarantool@example
    
  4. На каждом из 4-х серверов отключите созданный по умолчанию шард.

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

    Важно

    Скрипт создает файлы конфигурации на основе настроек по умолчанию, хранящихся в файле /etc/tarantool/instances.enabled/FindFace.lua. Настоятельно рекомендуется ничего не добавлять и не редактировать в этом файле, за исключением максимального использования оперативной памяти (memtx_memory) и IP-адреса локального сервера лицензий NTLS, необходимого для лицензирования tntapi. Максимальное использование памяти задается для каждого шарда в байтах в зависимости от количества лиц, обрабатываемых шардом, исходя из соотношения примерно 1280 байт на 1 лицо.

    Откройте файл конфигурации:

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

    Отредактируйте значение в зависимости от количества лиц, обрабатываемых шардом. Значение 1.2*1024*1024*1024 соответствует 1 000 000 лиц:

    memtx_memory = 1.2*1024*1024*1024,
    

    Укажите IP-адрес сервера NTLS, если он удаленный:

    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. Запустите скрипт из домашней директории.

    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. Запустите все 4 шарда. Это нужно сделать на каждом сервере.

    for I in `seq 1 4`; do sudo systemctl enable [email protected]_shard_$I; done;
    for I in `seq 1 4`; do sudo systemctl start [email protected]_shard_$I; done;
    
  9. Проверьте статус шардов.

    sudo systemctl status tarantool@FindFace*
    

    Вы должны получить следующие сообщения:

    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
    ...
    

    Совет

    Для того чтобы отобразить логи tntapi, выполните команду:

    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. Переместите файл tntapi_cluster.json в папку /etc.

    Важно

    Вам потребуется раскомментировать и указать путь к данному файлу в настройках сети.

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

После установки компонентов Сервера 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.

    Примечание

    Не меняйте значение параметра ffupload_url, если компонент findface-upload не установлен.

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

    tntapi_ignore_search_errors = True
    
  4. Перезапустите все сервисы Сервера FindFace, а также сервис nginx (если компонент findface-upload установлен) на соответствующих серверах.

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

    sudo service 'findface*' status
    sudo service nginx status