Low-FPS 和延迟故障排除#

与 Audio2Face-3D Authoring 微服务的实时交互对延迟非常敏感。

您可以使用提供的示例应用程序来诊断微服务的延迟问题。

以下部分将帮助您找到可能遇到的延迟问题的根本原因。

MACE 插件的延迟#

当前的 MACE 插件正在对 Audio2Face-3D Authoring 微服务执行顺序请求。这意味着延迟高于 33 毫秒将导致头像面部更新低于 30 FPS。这是一个已知的限制,将在未来的版本中解决。

实现您自己的客户端#

如果您实现自己的客户端,我们建议您异步执行 gRPC 请求,以最大程度地减少请求之间的延迟。

例如:有 30 个请求,间隔为 33 毫秒(30 FPS),端到端延迟为 100 毫秒

同步#

您在 0 毫秒时发出请求 1;您等待接收它直到 100 毫秒,然后发出请求 2,然后再次需要 100 毫秒;等等……

对于 30 个请求,总共需要 3000 毫秒。因此为 10 FPS;这对于实时交互来说并不理想

异步#

您在 0 毫秒时发出请求 1;然后在 33 毫秒时发出请求 2;在 66 毫秒时发出请求 3;在 99 毫秒时发出请求 4;等等……

您在 100 毫秒时收到请求 1;在 133 毫秒时收到请求 2;在 166 毫秒时收到请求 3;在 199 毫秒时收到请求 4;等等……

对于 30 个请求,总共需要 1100 毫秒。因此为 30 FPS;这对于实时交互来说很好,只有 100 毫秒的延迟;这应该不会太明显。

降低 A2F-3D Authoring 微服务的延迟#

为了同时为更多客户端提供服务,微服务批量处理传入的请求。可以减小此批处理大小以允许更快的处理。但是,这将减少可以同时以低延迟服务的客户端数量。

在下面,您将找到更新的配置文件和 docker-compose,以将此批处理大小减小到 2。

Docker Compose#

您将需要 1 个更新的 docker compose 文件

docker-compose.yaml
services:
  a2f-authoring:
    image: nvcr.io/nvidia/ace/a2f-authoring:0.3.6
    volumes:
      - models_a2f:/tmp/a2f
      - models_a2e:/tmp/a2e
      - ./claire_v2.3-config.json:/app/configs/claire_v2.3-config.json:ro
      - ./mark_v2.3-config.json:/app/configs/mark_v2.3-config.json:ro
      - ./james_v2.3-config.json:/app/configs/james_v2.3-config.json:ro
    command: bash -c 'python3 generate_trt_models.py ${A2F_3D_MODEL_NAME}_v2.3 trt_params_prod.json && a2f-authoring /app/configs/${A2F_3D_MODEL_NAME}_v2.3-config.json'
    network_mode: "host"
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [ gpu ]

volumes:
  models_a2f: {}
  models_a2e: {}

以及同一文件夹中的 3 个配置文件

注意

clib_db_ttl_refreshclib_db_ttl_check_interval_seconds 选项的名称中包含错别字。这将在即将到来的版本中纠正。

james_v2.3-config.json
{
  "a2e_batch_size": 2,
  "a2e_config_path": "/app/configs/a2e-config.json",
  "a2f_batch_size": 2,
  "a2f_config_path": "/app/configs/james_v2.3-proc-config.json",
  "endpoint": "0.0.0.0:50051",
  "clip_db_ttl_seconds": 3600,
  "clip_db_max_size_bytes": 10737418240,
  "clib_db_ttl_refresh_on_use": false,
  "clib_db_ttl_check_interval_seconds": 60
}
claire_v2.3-config.json
{
  "a2e_batch_size": 2,
  "a2e_config_path": "/app/configs/a2e-config.json",
  "a2f_batch_size": 2,
  "a2f_config_path": "/app/configs/claire_v2.3-proc-config.json",
  "endpoint": "0.0.0.0:50051",
  "clip_db_ttl_seconds": 3600,
  "clip_db_max_size_bytes": 10737418240,
  "clib_db_ttl_refresh_on_use": false,
  "clib_db_ttl_check_interval_seconds": 60
}
mark_v2.3-config.json
{
  "a2e_batch_size": 2,
  "a2e_config_path": "/app/configs/a2e-config.json",
  "a2f_batch_size": 2,
  "a2f_config_path": "/app/configs/mark_v2.3-proc-config.json",
  "endpoint": "0.0.0.0:50051",
  "clip_db_ttl_seconds": 3600,
  "clip_db_max_size_bytes": 10737418240,
  "clib_db_ttl_refresh_on_use": false,
  "clib_db_ttl_check_interval_seconds": 60
}

将这 4 个文件复制到当前文件夹。

然后,您可以将 A2F_3D_MODEL_NAME 环境变量设置为 jamesmarkclaire 中的任何一个,具体取决于您的部署偏好,并运行 docker compose up

export A2F_3D_MODEL_NAME=james
docker compose up

等待服务显示就绪状态,您就可以开始与之交互。

...
a2f-authoring-1  | 2024-09-18T15:33:57.763448Z  INFO a2f_authoring: Service is initialized!

运行 docker 容器#

在这种情况下,您只需要配置文件

注意

clib_db_ttl_refreshclib_db_ttl_check_interval_seconds 选项的名称中包含错别字。这将在即将到来的版本中纠正。

james_v2.3-config.json
{
  "a2e_batch_size": 2,
  "a2e_config_path": "/app/configs/a2e-config.json",
  "a2f_batch_size": 2,
  "a2f_config_path": "/app/configs/james_v2.3-proc-config.json",
  "endpoint": "0.0.0.0:50051",
  "clip_db_ttl_seconds": 3600,
  "clip_db_max_size_bytes": 10737418240,
  "clib_db_ttl_refresh_on_use": false,
  "clib_db_ttl_check_interval_seconds": 60
}
claire_v2.3-config.json
{
  "a2e_batch_size": 2,
  "a2e_config_path": "/app/configs/a2e-config.json",
  "a2f_batch_size": 2,
  "a2f_config_path": "/app/configs/claire_v2.3-proc-config.json",
  "endpoint": "0.0.0.0:50051",
  "clip_db_ttl_seconds": 3600,
  "clip_db_max_size_bytes": 10737418240,
  "clib_db_ttl_refresh_on_use": false,
  "clib_db_ttl_check_interval_seconds": 60
}
mark_v2.3-config.json
{
  "a2e_batch_size": 2,
  "a2e_config_path": "/app/configs/a2e-config.json",
  "a2f_batch_size": 2,
  "a2f_config_path": "/app/configs/mark_v2.3-proc-config.json",
  "endpoint": "0.0.0.0:50051",
  "clip_db_ttl_seconds": 3600,
  "clip_db_max_size_bytes": 10737418240,
  "clib_db_ttl_refresh_on_use": false,
  "clib_db_ttl_check_interval_seconds": 60
}

并将它们替换到 /app/configs 文件夹中。

将它们复制到当前文件夹。

以下是 Claire 模型的示例,假设配置文件位于当前文件夹中。

首先使用终端启动容器

docker run -it --rm --network=host --gpus  all -v $PWD:/my_mounted_files nvcr.io/nvidia/ace/a2f-authoring:0.3.6 bash

然后在容器内部

cp /my_mounted_files/claire_v2.3-config.json /app/configs/claire_v2.3-config.json
./run_claire_model.sh

地理位置导致的延迟#

A2F-3D Authoring 微服务的客户端应尽可能靠近部署位置进行地理定位。客户端距离越远,参数调整体验的交互性就越差。