Миграция векторов признаков на другую модель нейронной сети
Совет
Не стесняйтесь обращаться к нашим специалистам по вопросам миграции по адресу support@ntechlab.com.
Важно
В случае если вы выполняете миграцию как часть обновления системы до новой версии, выполните сначала обновление. Только после этого приступайте к миграции.
Этот раздел посвящен миграции векторов признаков объектов на другую модель нейронной сети.
Выполните следующие действия:
Создайте резервную копию базы данных векторов признаков на основе Tarantool в любой выбранной директории, например,
/etc/ffmulti_dump
.sudo docker exec -it findface-multi-findface-sf-api-1 bash -c "mkdir ffmulti_dump; cd ffmulti_dump && /storage-api-dump -config /etc/findface-sf-api.ini" sudo docker cp findface-multi-findface-sf-api-1:/ffmulti_dump /etc
Создайте новые шарды, в которых будут храниться заново сгенерированные векторы признаков.
Перейдите в директорию
/opt/findface-multi/configs/findface-tarantool-server/
и подсчитайте количество шардов по количеству файлов конфигурацииshard-00*.lua
.Примечание
В примере ниже восемь шардов.
cd /opt/findface-multi/configs/findface-tarantool-server ls -l shard-001.lua shard-002.lua shard-003.lua shard-004.lua shard-005.lua shard-006.lua shard-007.lua shard-008.lua
В директории
/opt/findface-multi/configs/findface-tarantool-server/
создайте новые шарды в том же количестве. Для этого скопируйте уже существующие файлы конфигурацииshard-00*.lua
.Примечание
Для удобства в качестве второй цифры в новых именах используется
1
:shard-01*.lua
.for i in {1..8}; do sudo cp shard-00$i.lua shard-01$i.lua; done
В файле конфигурации каждого шарда измените следующие строки в зависимости от его имени:
Прежнее значение
Новое значение
listen = '127.0.0.1:32001'
Listen = '127.0.0.1:32011'
FindFace.start(«127.0.0.1», 8101, {
FindFace.start(«127.0.0.1», 8111, {
Это можно сделать, выполнив следующую команду:
for i in {1..8}; do sudo sed -i "s/ listen = '127.0.0.1:3200$i',/ listen = '127.0.0.1:3201$i',/" shard-01$i.lua && sudo sed -i "s/FindFace.start(\"127.0.0.1\", 810$i, {/FindFace.start(\"127.0.0.1\", 811$i, {/" shard-01$i.lua; done
Создайте директории, в которых будут храниться файлы новых шардов.
cd /opt/findface-multi/data/findface-tarantool-server sudo mkdir -p shard-01{1..8}/{index,snapshots,xlogs}
Откройте файл конфигурации
/opt/findface-multi/configs/findface-extraction-api/findface-extraction-api.yaml
и замените моделиextraction
на новые в параметрахbody_emben
,car_emben
иface_emben
, в зависимости от мигрируемых типов объектов.sudo vi /opt/findface-multi/configs/findface-extraction-api/findface-extraction-api.yaml extractors: ... models: ... body_emben: pedrec/<new_model_body>.cpu<gpu>.fnk ... car_emben: carrec/<new_model_car>.cpu<gpu>.fnk ... face_emben: face/<new_model_face>.cpu<gpu>.fnk ...
Перезапустите контейнер
findface-multi-findface-extraction-api-1
.cd /opt/findface-multi/ sudo docker-compose restart findface-extraction-api
В файле
docker-compose.yaml
создайте новые сервисы для каждого нового шарда. Для этого скопируйте существующий сервис и замените имя шарда на новое.sudo vi docker-compose.yaml services: ... findface-tarantool-server-shard-**011**: depends_on: [findface-ntls] image: docker.int.ntl/ntech/universe/tntapi:ffserver-8.221216 network_mode: service:pause restart: always volumes: ['./configs/findface-tarantool-server/shard-**011**.lua:/etc/tarantool/instances.enabled/FindFace.lua:ro', './data/findface-tarantool-server/shard-**011**:/var/lib/tarantool/FindFace', './configs/findface-tarantool-server/tnt-schema.lua:/tnt_schema.lua:ro'] ...
Запустите новые шарды, подняв контейнеры.
sudo docker-compose up -d
На основании приведенного ниже примера создайте файл конфигурации с настройками миграции
migration.yaml
.sudo vi migration.yaml extraction-api: timeouts: connect: 5s response_header: 30s overall: 35s idle_connection: 0s extraction-api: http://127.0.0.1:18666 storage-api-from: # current location of the gallery timeouts: connect: 5s response_header: 30s overall: 35s idle_connection: 10s max-idle-conns-per-host: 20 shards: - master: http://127.0.0.1:8101/v2/ slave: '' - master: http://127.0.0.1:8102/v2/ slave: '' - master: http://127.0.0.1:8103/v2/ slave: '' - master: http://127.0.0.1:8104/v2/ slave: '' - master: http://127.0.0.1:8105/v2/ slave: '' - master: http://127.0.0.1:8106/v2/ slave: '' - master: http://127.0.0.1:8107/v2/ slave: '' - master: http://127.0.0.1:8108/v2/ slave: '' storage-api-to: timeouts: connect: 5s response_header: 30s overall: 35s idle_connection: 10s max-idle-conns-per-host: 20 shards: - master: http://127.0.0.1:8111/v2/ slave: '' - master: http://127.0.0.1:8112/v2/ slave: '' - master: http://127.0.0.1:8113/v2/ slave: '' - master: http://127.0.0.1:8114/v2/ slave: '' - master: http://127.0.0.1:8115/v2/ slave: '' - master: http://127.0.0.1:8116/v2/ slave: '' - master: http://127.0.0.1:8117/v2/ slave: '' - master: http://127.0.0.1:8118/v2/ slave: '' workers_num: 3 faces_limit: 100 extraction_batch_size: 8 normalized_storage: type: webdav enabled: True webdav: upload-url: http://127.0.0.1:3333/uploads/ s3: endpoint: '' bucket-name: '' access-key: '' secret-access-key: '' secure: False region: '' public-url: '' operation-timeout: 30
В разделе
storage-api-from
укажите шарды, с которых осуществляется миграция.storage-api-from: # current location of the gallery ... shards: - master: http://127.0.0.1:8101/v2/ slave: '' - master: http://127.0.0.1:8102/v2/ slave: '' - master: http://127.0.0.1:8103/v2/ slave: '' - master: http://127.0.0.1:8104/v2/ slave: '' - master: http://127.0.0.1:8105/v2/ slave: '' - master: http://127.0.0.1:8106/v2/ slave: '' - master: http://127.0.0.1:8107/v2/ slave: '' - master: http://127.0.0.1:8108/v2/ slave: '' ...
В разделе
storage-api-to
укажите новые шарды, в которых будут храниться данные после миграции.storage-api-to: ... shards: - master: http://127.0.0.1:8111/v2/ slave: '' - master: http://127.0.0.1:8112/v2/ slave: '' - master: http://127.0.0.1:8113/v2/ slave: '' - master: http://127.0.0.1:8114/v2/ slave: '' - master: http://127.0.0.1:8115/v2/ slave: '' - master: http://127.0.0.1:8116/v2/ slave: '' - master: http://127.0.0.1:8117/v2/ slave: '' - master: http://127.0.0.1:8118/v2/ slave: '' ...
Скопируйте файл
migration.yaml
внутрь контейнераfindface-multi-findface-sf-api-1
. Запустите утилитуsf-api-migrate
с опцией-config
и укажите файл конфигурацииmigration.yaml
.sudo docker cp migration.yaml findface-multi-findface-sf-api-1:/ sudo docker exec findface-multi-findface-sf-api-1 ./sf-api-migrate -config migration.yaml
Примечание
Если в системе много событий и карточек, процесс миграции может занять значительное количество времени.
После завершения миграции удалите сервисы старых шардов из файла
docker-compose.yaml
и остановите используемые ими контейнеры.sudo docker-compose up -d --remove-orphans
Откройте файл конфигурации
/opt/findface-multi/configs/findface-sf-api/findface-sf-api.yaml
и измените порты шардов в зависимости от новых настроек. Перезапустите контейнерfindface-multi-findface-sf-api-1
.sudo vi /opt/findface-multi/configs/findface-sf-api/findface-sf-api.yaml storage-api: shards: - master: http://127.0.0.1:8111/v2/ slave: '' - master: http://127.0.0.1:8112/v2/ slave: '' - master: http://127.0.0.1:8113/v2/ slave: '' - master: http://127.0.0.1:8114/v2/ slave: '' - master: http://127.0.0.1:8115/v2/ slave: '' - master: http://127.0.0.1:8116/v2/ slave: '' - master: http://127.0.0.1:8117/v2/ slave: '' - master: http://127.0.0.1:8118/v2/ slave: '' sudo docker-compose restart findface-sf-api
Мигрируйте кластеры, если данная функция включена в системе. Для этого выполните следующую команду:
Примечание
Перечислите мигрируемые типы объектов в виде опций команды:
--face
,--body
,--car
.sudo docker exec -it findface-multi-findface-multi-legacy-1 /opt/findface-security/bin/python3 /tigre_prototype/manage.py migrate_clusters --face --body --car --use-best-event --use-thumbnail --force-clustering
В результате система повторно сгенерирует векторы признаков для существующих кластерных событий и автоматически запустит запланированную кластеризацию для пересборки кластеров.