Использование нескольких видеокарт
Если на физическом сервере установлено несколько видеокарт, вы можете создать дополнительные экземпляры findface-extract-api-gpu
или findface-video-worker-gpu
и распределить их по одному экземпляру на карту.
В этом разделе:
Распределение экземпляров findface-extraction-api-gpu
по видеокартам
Для распределения экземпляров findface-extraction-api-gpu
по нескольким видеокартам выполните следующие действия:
Подготовьте исходный файл конфигурации
findface-extraction-api-gpu
для последующего копирования. Откройте/etc/findface-extraction-api.ini
. Ограничьте количество экземпляровfindface-extraction-api-gpu
до 1 на видеокарту.sudo vi /etc/findface-extraction-api.ini ... extractors: instances: 1
Совет
При необходимости внесите другие коррективы. Например, можно включить распознавание дополнительных атрибутов. См. Распознавание атрибутов лица, Распознавание автомобилей и их атрибутов, Распознавание силуэтов и их атрибутов.
Создайте несколько копий файла конфигурации
/etc/findface-extraction-api.ini
, в зависимости от того, какое количество видеокарт будет использоваться для извлечения векторов признаков. Добавьте номера устройств GPU, на которых будут запущены экземпляры, к именам новых файлов конфигурации (устройства GPU №0 и №7 в примере ниже).Примечание
Нумерация устройств GPU в системе по умолчанию начинается с №0. Чтобы получить список используемых видеокарт, выполните следующую команду:
nvidia-smi
cp findface-extraction-api.ini findface-extraction-api-0.ini cp findface-extraction-api.ini findface-extraction-api-7.ini
Откройте новые файлы конфигурации. Укажите номера соответствующих устройств GPU и измените номера слушающих портов. Каждый экземпляр должен слушать на своем порту.
sudo vi /etc/findface-extraction-api-0.ini listen: 127.0.0.1:18667 ... gpu_device: 0 ...
sudo vi /etc/findface-extraction-api-7.ini listen: 127.0.0.1:18668 ... gpu_device: 7 ...
Чтобы экземпляры
findface-extraction-api-gpu
работали в одной системе, объедините их через балансировщик нагрузки, например,nginx
. Для простоты мы рекомендуем настроить работуnginx
на стандартном портуfindface-extraction-api
18666
(подробнее см. ниже).Для настройки балансировки нагрузки выполните следующие действия:
Создайте новый файл конфигурации
nginx
.sudo vi /etc/nginx/sites-available/lb_extractions
Вставьте текст следующего содержания в только что созданный файл. Обязательно укажите в директиве
server
фактические порты, на которых слушают экземплярыfindface-extraction-api-gpu
(в нашем примере18667
,18668
).upstream extractions { server 127.0.0.1:18667 max_fails=3 fail_timeout=30s; server 127.0.0.1:18668 max_fails=3 fail_timeout=30s; } server { listen 18666 default_server; server_name _; location / { client_max_body_size 100m; proxy_pass http://extractions; } }
Включите балансировщик нагрузки.
ln -s /etc/nginx/sites-available/lb_extractions /etc/nginx/sites-enabled/lb_extractions nginx -t nginx -s reload
Остановите исходный сервис
findface-extraction-api-gpu
и удалите его из автозагрузки Ubuntu.systemctl stop findface-extraction-api.service systemctl disable findface-extraction-api.service
Создайте новый сервис для экземпляров
findface-extraction-api-gpu
./etc/systemd/system/findface-extraction-api@.service
Вставьте следующий текст:
[Unit] Description=Findface Extraction API service %i instance [Service] User=ntech Restart=always RestartSec=5 Type=notify ExecStart=/usr/bin/findface-extraction-api -config="/etc/findface-extraction-api-%i.ini" TimeoutStartSec=60m [Install] WantedBy=multi-user.target
Запустите экземпляры
findface-extraction-api-gpu
. Первый запуск может занять до 10 минут.systemctl daemon-reload systemctl enable findface-extraction-api@{0,7} systemctl start findface-extraction-api@{0,7}
Совет
Для проверки статуса выполните следующую команду:
sudo systemctl list-units 'findface*' -a
Привязка findface-video-worker-gpu
к дополнительной видеокарте
Для создания дополнительного экземпляра findface-video-worker-gpu
и его привязки к свободной видеокарте выполните следующие действия:
Отобразите статус исходного сервиса
findface-video-worker-gpu
, выполнив команду:sudo systemctl status findface-video-worker-gpu.service
Найдите полный путь к сервису в следующей строке:
Loaded: loaded (/usr/lib/systemd/system/findface-video-worker-gpu.service); enabled; vendor preset: enabled
В приведенном примере это
findface-video-worker-gpu.service
(имя может быть другим). Создайте копию сервиса под новым именем.sudo cp /usr/lib/systemd/system/findface-video-worker-gpu.service /usr/lib/systemd/system/findface-video-worker-gpu2.service`
Таким же образом создайте под новым именем копию исходного файла конфигурации.
sudo cp /etc/findface-video-worker-gpu.ini /etc/findface-video-worker-gpu2.ini
Откройте только что созданный файл конфигурации и актуализируйте номер используемого GPU-устройства. Измените номер порта в секции
streamer
по следующей формуле:18999 (номер порта для GPU 0) - номер GPU-устройства
, т. е. для GPU 1,port = 18998
, для GPU 2,port = 18997
и т. д.sudo vi /etc/findface-video-worker-gpu2.ini ## cuda device number device_number = 1 ... #------------------------------ [streamer] #------------------------------ ## streamer/shots webserver port, 0=disabled ## type:number env:CFG_STREAMER_PORT longopt:--streamer-port port = 18999 ...
Откройте новый сервис и укажите только что созданный файл конфигурации.
sudo vi /usr/lib/systemd/system/findface-video-worker-gpu2.service ExecStart=/usr/bin/findface-video-worker-gpu --config /etc/findface-video-worker-gpu2.ini
Для применения изменений перезагрузите демон
systemd
.sudo systemctl daemon-reload
Добавьте новый сервис в автозагрузку.
sudo systemctl enable findface-video-worker-gpu2.service Created symlink from /etc/systemd/system/multi-user.target.wants/findface-video-worker-gpu2.service to /usr/lib/systemd/system/findface-video-worker-gpu2.service
Запустите новый сервис.
sudo systemctl start findface-video-worker-gpu2.service
Проверьте статус обоих сервисов
findface-video-worker-gpu
.sudo systemctl status findface-video-worker-* | grep -i 'Active:' -B 3 ● findface-video-worker-gpu2.service - findface-video-worker-gpu daemon Loaded: loaded (/usr/lib/systemd/system/findface-video-worker-gpu2.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2019-07-18 10:32:02 MSK; 1min 11s ago ... ● findface-video-worker-gpu.service - findface-video-worker-gpu daemon Loaded: loaded (/usr/lib/systemd/system/findface-video-worker-gpu.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2019-07-15 15:18:33 MSK; 2 days ago