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 文件
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_refresh 和 clib_db_ttl_check_interval_seconds 选项的名称中包含错别字。这将在即将到来的版本中纠正。
{
"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
}
{
"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
}
{
"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
环境变量设置为 james
、mark
或 claire
中的任何一个,具体取决于您的部署偏好,并运行 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_refresh 和 clib_db_ttl_check_interval_seconds 选项的名称中包含错别字。这将在即将到来的版本中纠正。
{
"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
}
{
"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
}
{
"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 微服务的客户端应尽可能靠近部署位置进行地理定位。客户端距离越远,参数调整体验的交互性就越差。