nv-audio2face-3d

NIM

Note

基础配置

  1. 首先去NGC生成API Key。
  2. 然后docker login nvcr.io,用户名:$oauthtoken,密码是上面生成的API Key。
  3. 随后创建.env
    NGC_API_KEY=<Your-API-Key>
    # 用于手动编译engine,不用再下载了。
    NIM_DISABLE_MODEL_DOWNLOAD=true
  4. docker-compose.yaml配置:(docker使用和配置相关参考docker
    services:
      nv-audio2face-3d:
        container_name: nv-audio2face-3d
        image: nvcr.io/nim/nvidia/audio2face-3d:latest
        env_file:
          - .env
        deploy:
          resources:
            reservations:
              devices:
                - capabilities:
                  - compute
                  - utility
                  - graphics
                  - display
                  - video
                  driver: nvidia
                  device_ids: ['1']
        shm_size: 8G
        network_mode: bridge
        tty: true
        volumes:
          - ./data/a2x:/tmp/a2x # 覆盖模型缓存
    	  - ./data/configs/ue:/mnt/configs # 覆盖配置缓存,对于UE的使用需要使用特殊修改的参数,见文档。
        ports:
          - 52000:52000

编译Engine

参考Guide — Audio2Face-3D
# 执行容器中脚本
NGC_API_KEY=<you_api_key>
LOCAL_NIM_CACHE="./test"

# 容器内部并不是以root用户执行命令的,所以需要注意权限。
mkdir -p $LOCAL_NIM_CACHE
chmod a+w $LOCAL_NIM_CACHE

docker run -it --rm --name audio2face-3d \
 --gpus all \
 --network=host \
 --entrypoint /bin/bash \
 -e NGC_API_KEY=$NGC_API_KEY \
 -v "$LOCAL_NIM_CACHE:/tmp/a2x" \
 nvcr.io/nim/nvidia/audio2face-3d:latest \
 -c 'cd /opt/nvidia/a2f_pipeline/service && ./generate_trt_models.py'
# 这样编译完的模型就在$LOCAL_NIM_CACHE中了,
# 运行时映射到/opt/nim/workspace中,并且关闭模型下载,
# 且映射之前编译好的模型到/tmp/a2x即可。

调用推理

参考官方文档

配置环境

git clone https://github.com/NVIDIA/Audio2Face-3D-Samples.git
git checkout tags/v1.3
cd Audio2Face-3D-Samples/scripts/audio2face_3d_microservices_interaction_app
python3 -m venv .venv
source .venv/bin/activate
pip3 install ../../proto/sample_wheel/nvidia_ace-1.2.0-py3-none-any.whl
pip3 install -r requirements.txt

执行

# healthcheck
python3 a2f_3d.py health_check --url <ip>:<port>

# 调用微服务
# - config.yml在当前目录的configs中
# - 音频wav需要是PCM 16bit格式的,且单声道(Mono)
#   ffmpeg -i input.mp4 -c:a pcm_s16le -ac 1 output.wav 可以获取.
python3 a2f_3d.py run_inference <audio_file.wav> <config.yml> -u <ip>:<port> [--skip-print-to-files]