Миграция векторов признаков на другую модель

Совет

Не стесняйтесь обращаться к нашим специалистам по вопросам миграции по адресу support@ntechlab.com.

Важно

В случае если вы выполняете миграцию как часть обновления системы до новой версии, выполните сначала обновление. Только после этого приступайте к миграции.

Этот раздел посвящен миграции векторов признаков объектов на другую модель нейронной сети.

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

  1. Создайте резервную копию базы данных векторов признаков на основе Tarantool в любой выбранной директории, например, /etc/findface_dump.

    sudo mkdir -p /etc/findface_dump
    sudo cd /etc/findface_dump
    sudo findface-storage-api-dump -config /etc/findface-sf-api.ini
    
  2. Остановите сервис findface-sf-api.

    sudo systemctl stop findface-sf-api.service
    
  3. Создайте новые шарды, в которых будут хранится заново сгенерированные векторы признаков.

    1. Откройте директорию /etc/tarantool/instances.available/ и подсчитайте количество шардов по количеству файлов конфигурации shard-*.lua.

      Примечание

      В примере ниже четыре шарда.

      cd /etc/tarantool/instances.available/
      
      ls -l
      
      shard-001.lua
      shard-002.lua
      shard-003.lua
      shard-004.lua
      
    2. Создайте новые шарды в том же количестве, скопировав файлы конфигурации shard-*.lua.

      Примечание

      Для удобства в качестве второй цифры в новых именах используется 1: shard-01*.lua.

      sudo cp shard-001.lua shard-011.lua
      sudo cp shard-002.lua shard-012.lua
      sudo cp shard-003.lua shard-013.lua
      sudo cp shard-004.lua shard-014.lua
      
    3. В файле конфигурации каждого шарда измените следующие строки в зависимости от его имени (в нашем примере shard-011, shard-012 и т. д.):

      Прежнее значение

      Новое значение

      listen = „127.0.0.1:32001“

      Listen = „127.0.0.1:32011“

      vinyl_dir = „/opt/ntech/var/lib/tarantool/shard-001“

      vinyl_dir = „/opt/ntech/var/lib/tarantool/shard-011“

      work_dir = „/opt/ntech/var/lib/tarantool/shard-001“

      work_dir = „/opt/ntech/var/lib/tarantool/shard-011“

      memtx_dir = „/opt/ntech/var/lib/tarantool/shard-001/snapshots“

      memtx_dir = „/opt/ntech/var/lib/tarantool/shard-011/snapshots“

      wal_dir = „/opt/ntech/var/lib/tarantool/shard-001/xlogs“

      wal_dir = „/opt/ntech/var/lib/tarantool/shard-011/xlogs“

      FindFace.start(«127.0.0.1», 8101, {

      FindFace.start(«127.0.0.1», 8111, {

    4. Создайте символические ссылки на новые шарды.

      cd /etc/tarantool/instances.enabled/
      
      sudo ln -s /etc/tarantool/instances.available/shard-01*.lua /etc/tarantool/instances.enabled/
      
    5. Создайте директории, в которых будут храниться файлы новых шардов. Назначьте права на созданные директории.

      cd /opt/ntech/var/lib/tarantool/
      
      mkdir -p shard-01{1..4}/{index,snapshots,xlogs}
      
      chown tarantool:tarantool shard-01* shard-01*/*
      
  4. Откройте файл конфигурации /etc/findface-extraction-api и замените модели extraction на новые в параметрах body_emben, car_emben и face_emben, в зависимости от мигрируемых типов объектов.

    sudo vi /etc/findface-extraction-api.ini
    
    extractors:
      ...
      models:
        ...
        body_emben: pedrec/<new_model_body>.gpu.fnk
        ...
        car_emben: carrec/<new_model_car>.gpu.fnk
        ...
        face_emben: face/<new_model_face>.gpu.fnk
    

    Перезапустите сервис findface-extraction-api.

    sudo systemctl restart findface-extraction-api.service
    
  5. Запустите новые шарды.

    for i in {11..14}; do sudo systemctl start tarantool@shard-0$i; done
    
  6. На основании приведенного ниже примера создайте файл конфигурации с настройками миграции <migration.ini>.

    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: ""
    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: ""
    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/
      ...
    

    В разделе 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: ""
      ...
    
  7. Запустите утилиту findface-sf-api-migrate с опцией -config и укажите файл конфигурации <migration.ini>.

    findface-sf-api-migrate -config migration.ini
    

    Примечание

    Если в системе много событий и карточек, процесс миграции может занять значительное количество времени.

  8. После завершения миграции остановите шарды и отключите их автоматический запуск в ОС (не удаляйте их).

    for i in {01..04}; do sudo systemctl stop tarantool@shard-0$i.service ; done
    
    for i in {01..04}; do sudo systemctl disable tarantool@shard-0$i.service ; done
    
  9. Откройте файл конфигурации /etc/findface-sf-api.ini и измените порты шардов в зависимости от новых настроек. Перезапустите сервис findface-sf-api.

    sudo vi /etc/findface-sf-api.ini
    
    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: ""
    
    sudo systemctl start findface-sf-api.service
    
  10. Импортируйте структуру базы данных из файла tnt_schema.lua.

    sudo findface-security make_tnt_schema | sudo tee /etc/findface-security/tnt_schema.lua
    
  11. Перенесите схему базы данных из FindFace Multi в PostgreSQL, заново создайте предустановленные пользовательские роли и первого администратора.

    sudo findface-security migrate
    sudo findface-security create_groups
    sudo findface-security create_default_user
    
  12. Перезагрузите сервисы.

    sudo systemctl restart findface-security.service
    sudo systemctl restart findface-extraction-api findface-video-worker* findface-video-manager findface-sf-api
    
  13. Мигрируйте кластеры, если данная функция включена в системе. Для этого выполните следующую команду:

    Примечание

    Перечислите мигрируемые типы объектов в виде опций команды: —face, —body, —car.

    sudo findface-security migrate_clusters --face --body --car --use-best-event --use-thumbnail --force-clusterin
    

    В результате система повторно сгенерирует векторы признаков для существующих кластерных событий и автоматически запустит запланированную кластеризацию для пересборки кластеров.