Миграция векторов признаков на другую модель нейронной сети
Совет
Не стесняйтесь обращаться к нашим специалистам по вопросам миграции по адресу 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/data/findface-tarantool-server
и подсчитайте количество шардов по количеству директорий.Примечание
В примере ниже восемь шардов.
cd /opt/findface-multi/data/findface-tarantool-server ls -l shard-001 shard-002 shard-003 shard-004 shard-005 shard-006 shard-007 shard-008
Создайте директории, в которых будут храниться файлы новых шардов.
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
создайте новые сервисы для каждого нового шарда. Для этого скопируйте существующий сервис и замените имя шарда на новое, порты вCFG_LISTEN_PORT
,TT_LISTEN
, а также путь к шарду вvolumes
.sudo vi docker-compose.yaml services: ... findface-tarantool-server-shard-**011**: depends_on: [findface-ntls] environment: {CFG_EXTRA_LUA: loadfile("/tnt_schema.lua")(), CFG_LISTEN_HOST: 127.0.0.1, CFG_LISTEN_PORT: '8111', CFG_NTLS: '127.0.0.1:3133', TT_CHECKPOINT_COUNT: 3, TT_CHECKPOINT_INTERVAL: '14400', TT_FORCE_RECOVERY: 'true', TT_LISTEN: '127.0.0.1:32011', TT_MEMTX_DIR: snapshots, TT_MEMTX_MEMORY: '2147483648', TT_WAL_DIR: xlogs, TT_WORK_DIR: /var/lib/tarantool/FindFace} image: docker.int.ntl/ntech/universe/tntapi:ffserver-9.230407.1 logging: {driver: journald} network_mode: service:pause restart: always volumes: ['./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
В результате система повторно сгенерирует векторы признаков для существующих кластерных событий и автоматически запустит запланированную кластеризацию для пересборки кластеров.