入门指南#

以下步骤将帮助您设置和运行 Audio2Face-3D NIM,并使用我们的示例应用程序接收 blendshape、音频和情感。

前提条件#

查看支持矩阵,确保您拥有受支持的硬件和软件堆栈。

阅读与您的操作系统对应的说明。

Windows 系统 - 使用适用于 Linux 的 Windows 子系统 (WSL)

这些说明是为 WSL 2.0 内的 Ubuntu 22.04 编写的。除非另有说明,否则请在 WSL 终端内运行所有步骤。

  1. 在没有 Docker Desktop 的情况下设置 Docker

使用便捷脚本安装 docker

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh ./get-docker.sh

将您的用户帐户添加到 docker 组

$ sudo groupadd docker
$ sudo usermod -aG docker <username>

注销并重新登录您的系统,然后进行健全性检查

$ docker run hello-world

您应该看到打印出的“Hello from Docker!”。

安装 Docker Compose 插件

$ sudo apt-get update
$ sudo apt-get install docker-compose-plugin

运行以下命令检查安装是否成功

$ docker compose version

设置 iptables 兼容性

$ sudo update-alternatives --config iptables

当出现提示时,选择选项1,路径为/usr/sbin/iptables-legacy

通过关闭终端窗口或在 Powershell 中键入来关闭 WSL 实例

$ wsl --shutdown Ubuntu-22.04

启动 WSL 实例并检查 Docker 状态

$ service docker status

您应该在消息中看到“active (running)”。要退出,按 q

  1. 安装 CUDA 工具包

一旦 Windows 系统上安装了 Nvidia 驱动程序,CUDA 就会在 WSL 2 中可用。因此,用户不得在 WSL 2 中安装任何 Nvidia Linux 驱动程序。

对于 cuda-toolkit-12-6,运行以下说明

$ wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
$ sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
$ wget https://developer.download.nvidia.com/compute/cuda/12.6.2/local_installers/cuda-repo-wsl-ubuntu-12-6-local_12.6.2-1_amd64.deb
$ sudo dpkg -i cuda-repo-wsl-ubuntu-12-6-local_12.6.2-1_amd64.deb
$ sudo cp /var/cuda-repo-wsl-ubuntu-12-6-local/cuda-*-keyring.gpg /usr/share/keyrings/
$ sudo apt-get update
$ sudo apt-get -y install cuda-toolkit-12-6

或者,要安装最新的 CUDA 工具包,请访问NVIDIA Developer - CUDA downloads WSL并按照说明进行操作。

  1. 安装 NVIDIA Container Toolkit

如果以下任何步骤失败,请改为遵循官方NVIDIA Container Toolkit 文档

配置生产存储库

$ curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
   && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
   sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
   sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

(可选)配置存储库以使用实验性软件包

$ sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list

从存储库更新软件包列表

$ sudo apt-get update
$ sudo apt-get install -y nvidia-container-toolkit
  1. 使用 NVIDIA Container Toolkit 配置 docker

运行以下说明

$ sudo nvidia-ctk runtime configure --runtime=docker
$ sudo systemctl restart docker

如果一切顺利,那么您应该能够启动 Docker 容器并在其中运行 nvidia-smi,以查看容器内有关您的 GPU 的信息。我们在下面提供了一个示例,但请记住,数字会因您的硬件而异。

$ sudo docker run --rm --gpus all ubuntu nvidia-smi
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 560.35.03             Driver Version: 560.35.03   CUDA Version: 12.6       |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA GeForce RTX 4090        Off | 00000000:01:00.0 Off |                  Off |
|  0%   41C    P8               7W / 450W |    287MiB / 24564MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
+---------------------------------------------------------------------------------------+
Linux 系统 - 使用 Ubuntu 22.04
  1. 在没有 Docker Desktop 的情况下设置 Docker

使用便捷脚本安装 docker

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh ./get-docker.sh

将您的用户帐户添加到 docker 组

$ sudo groupadd docker
$ sudo usermod -aG docker <username>

注销并重新登录您的系统,然后进行健全性检查

$ docker run hello-world

您应该看到打印出的“Hello from Docker!”。

安装 Docker Compose 插件

$ sudo apt-get update
$ sudo apt-get install docker-compose-plugin

运行以下命令检查安装是否成功

$ docker compose version

设置 iptables 兼容性

$ sudo update-alternatives --config iptables

当出现提示时,选择选项1,路径为/usr/sbin/iptables-legacy

重启您的系统并检查 Docker 状态

$ service docker status

您应该在消息中看到“active (running)”。要退出,按 q

  1. 安装 CUDA 工具包

对于 cuda-toolkit-12-6,运行以下说明

$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
$ sudo dpkg -i cuda-keyring_1.1-1_all.deb
$ sudo apt-get update
$ sudo apt-get -y install cuda-toolkit-12-6

或者,要安装最新的 CUDA 工具包,请访问NVIDIA Developer - CUDA downloads Ubuntu 22.04,并按照说明进行操作。

  1. 安装 NVIDIA Container Toolkit

如果以下任何步骤失败,请改为遵循官方NVIDIA Container Toolkit 文档

配置生产存储库

$ curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
   && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
   sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
   sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

(可选)配置存储库以使用实验性软件包

$ sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list

从存储库更新软件包列表

$ sudo apt-get update
$ sudo apt-get install -y nvidia-container-toolkit
  1. 使用 NVIDIA Container Toolkit 配置 docker

运行以下说明

$ sudo nvidia-ctk runtime configure --runtime=docker
$ sudo systemctl restart docker

如果一切顺利,那么您应该能够启动 Docker 容器并在其中运行 nvidia-smi,以查看容器内有关您的 GPU 的信息。我们在下面提供了一个示例,但请记住,数字会因您的硬件而异。

$ sudo docker run --rm --gpus all ubuntu nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 535.183.06    Driver Version: 535.183.06    CUDA Version: 12.6   |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA A10G         On   | 00000000:01:00.0 Off |                    0 |
|  0%   33C    P8    18W / 300W |      0MiB / 23028MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
+-----------------------------------------------------------------------------+

NVAIE 访问权限#

要下载 Audio2Face-3D NIM 微服务,您需要有效订阅 NVIDIA AI Enterprise 产品。

请通过此表格联系销售代表,并请求访问 NVIDIA AI Enterprise Essentials

NGC 个人密钥#

如果您尚未设置 NGC 个人密钥,请进行设置。

转到NGC 个人密钥设置页面NGC 网站生成个人密钥

当提示您填写生成个人密钥表单时,选择您的密钥名称和到期时间,然后为包含的服务选择所有服务。

然后您将获得您的个人密钥,请务必将其保存在安全的地方。

导出 API 密钥#

导出在上一步中生成的 API 密钥,将其放入 NGC_API_KEY 环境变量中,以便运行 A2F-3D NIM,方法是运行

$ export NGC_API_KEY=<value>

为了在启动时使密钥可用,如果您使用的是 bash,请运行以下命令。确保将 <value> 替换为实际的 API 密钥。

$ echo "export NGC_API_KEY=<value>" >> ~/.bashrc

Docker 登录到 NGC#

要拉取 NIM 容器镜像,您需要登录到 nvcr.io docker 注册表。用户名是 $oauthtoken,密码是之前生成的并存储在 NGC_API_KEY 中的 API 密钥。您可以简单地运行以下命令登录

$ echo "$NGC_API_KEY" | docker login nvcr.io --username '$oauthtoken' --password-stdin
Login Succeeded

启动 Audio2Face-3D NIM#

有两种快速启动 Audio2Face-3D NIM 的方法:使用为受支持的 GPU 预生成的 TRT 引擎,或者为您的 NVIDIA GPU 生成 TRT 引擎。受支持的 GPU 可以在下表中找到

支持的模型#

GPU

NIM_MANIFEST_PROFILE

A10G

009c006e7958606db6ce0923059aac8d2002c4e33d0807652486ca3821dcbfff

A100

044e16bb7cbfdca9d5d39a191261adc117edbbebb63f7372f9cfdbf83485b230

H100

2ec560cc5ce6c80ae7c7b5b44a2c348c7b4bd024355cdb111cdf08855331750c

RTX6000

8dd2ad5b0bd70c8cbed7c36d68c8a435b3f95f9014c832299053b3bcd37eb9d8

RTX4090

d6ecb540a388274c7e6191995371cabcede89ad87725c74c9837df64a73fffd7

L40S

5e21ca4dcb2ba7792e170a331fa25dccc4b5bae0b8ed91e9253f7a68b47d7802

  1. 对于受支持的 GPU,使用预生成的 TRT 引擎启动

    运行此命令并将 <manifest_profile_id> 更改为上表中与您的 GPU 对应的值

    $  export NIM_MANIFEST_PROFILE=<manifest_profile_id>
    $  docker run -it --rm --name audio2face-3d \
         --gpus all \
         --network=host \
         -e NGC_API_KEY=$NGC_API_KEY \
         -e NIM_MANIFEST_PROFILE=$NIM_MANIFEST_PROFILE \
         nvcr.io/nim/nvidia/audio2face-3d:1.2
    
  2. 对于其他 NVIDIA GPU,启动并生成 TRT 引擎

    $  docker run -it --rm --name audio2face-3d \
         --gpus all \
         --network=host \
         -e NGC_API_KEY=$NGC_API_KEY \
         -e NIM_DISABLE_MODEL_DOWNLOAD=true \
         nvcr.io/nim/nvidia/audio2face-3d:1.2
    

注意

当您启动服务时,您可能会遇到标记为 GStreamer-WARNING 的警告。出现这些警告是因为容器中缺少某些库。但是,这些警告可以安全地忽略,因为 Audio2Face-3D 不使用这些库。

展开此部分以获取有关上面使用的 docker 命令的更多详细信息

Docker 标志说明

您可以在此表中找到上述 docker 命令中每个标志的说明

标志

描述

-it

--interactive + --tty(请参阅Docker 文档

--rm

在容器停止后删除容器(请参阅Docker 文档

--name

为 NIM 容器命名。使用任何首选值。

--gpus all

在容器内公开所有 NVIDIA GPU。有关挂载特定 GPU 的信息,请参阅配置页面

--network=host

将容器连接到主机网络。(请参阅Docker 文档

-e NGC_API_KEY=$NGC_API_KEY

在容器中添加 NGC_API_KEY 环境变量,其值来自本地计算机的 NGC_API_KEY 环境变量。

-e NIM_MANIFEST_PROFILE=$NIM_MANIFEST_PROFILE

在容器中添加 NIM_MANIFEST_PROFILE 环境变量。

-e NIM_DISABLE_MODEL_DOWNLOAD=<value>

在容器中设置 NIM_DISABLE_MODEL_DOWNLOAD 环境变量。值可以是 truefalse。该变量控制 A2F-3D NIM 是否应从 NGC 下载模型。

运行推理#

Audio2Face-3D 使用 gRPC API。您可以使用 A2F-3D Python 交互应用程序快速试用 API。按照以下说明进行设置

$ git clone https://github.com/NVIDIA/Audio2Face-3D-Samples.git
$ 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

检查服务是否已准备好处理推理请求

$ python3 a2f_3d.py health_check --url 0.0.0.0:52000

在示例音频之一上运行推理

$ python3 a2f_3d.py run_inference ../../example_audio/Claire_neutral.wav config/config_claire.yml -u 0.0.0.0:52000

此命令将打印出结果的保存位置,日志类似于

Input audio header info:
Sample rate: 16000 Hz
Bit depth: 16 bits
Channels: 1
Receiving data from server...
.............................
Received status message with value: 'sent all data'
Status code: '0'
Saving data into output_000001 folder...

然后,您可以通过运行以下命令并替换 <output_folder> 为运行推理命令打印的文件夹名称来浏览 A2F-3D NIM 输出动画。

$ ls -l <output_folder>/
-rw-rw-r-- 1 user user    328 Nov 14 15:46 a2f_3d_input_emotions.csv
-rw-rw-r-- 1 user user  65185 Nov 14 15:46 a2f_3d_smoothed_emotion_output.csv
-rw-rw-r-- 1 user user 291257 Nov 14 15:46 animation_frames.csv
-rw-rw-r-- 1 user user 406444 Nov 14 15:46 out.wav
  • out.wav:包含接收到的音频

  • animation_frames.csv:包含 blendshape

  • a2f_3d_input_emotions.csv:包含在 gRPC 协议中作为输入提供的情感

  • a2f_3d_smoothed_emotion_output.csv:包含随时间推移平滑的情感

模型缓存#

首次运行时,Audio2Face-3D NIM 将从 NGC 下载模型。您可以使用 Docker 卷挂载在本地缓存此模型。按照以下示例操作,并将 LOCAL_NIM_CACHE 环境变量设置为所需的本地路径。确保本地路径具有执行、读取和写入权限(777 权限)。

$ mkdir -p ~/.cache/audio2face-3d
$ chmod 777 ~/.cache/audio2face-3d
$ export LOCAL_NIM_CACHE=~/.cache/audio2face-3d

然后只需运行 Audio2Face-3D NIM,并将文件夹挂载到 Docker 容器中的 /tmp/a2x

$  docker run -it --rm --name audio2face-3d \
     --gpus all \
     --network=host \
     -e NGC_API_KEY=$NGC_API_KEY \
     -e NIM_MANIFEST_PROFILE=$NIM_MANIFEST_PROFILE \
     -v "$LOCAL_NIM_CACHE:/tmp/a2x" \
     nvcr.io/nim/nvidia/audio2face-3d:1.2

对于后续使用缓存运行 Audio2Face-3D NIM 的情况,请将 NIM_DISABLE_MODEL_DOWNLOAD 设置为 true

$  docker run -it --rm --name audio2face-3d \
     --gpus all \
     --network=host \
     -e NGC_API_KEY=$NGC_API_KEY \
     -e NIM_MANIFEST_PROFILE=$NIM_MANIFEST_PROFILE \
     -e NIM_DISABLE_MODEL_DOWNLOAD=true \
     -v "$LOCAL_NIM_CACHE:/tmp/a2x" \
     nvcr.io/nim/nvidia/audio2face-3d:1.2

停止容器#

您可以通过将其名称传递给 docker stopdocker rm 命令来轻松停止和删除正在运行的容器

$ docker stop audio2face-3d
$ docker rm audio2face-3d