入门指南#

先决条件#

设置#

  • NVIDIA AI Enterprise 许可证:Riva TTS NIM 在 NVIDIA AI Enterprise (NVAIE) 许可证下可用于自托管。

  • NVIDIA GPU(s):Riva TTS NIM 可在任何具有足够 GPU 内存的 NVIDIA GPU 上运行,但某些模型/GPU 组合经过优化。有关更多信息,请参阅支持的模型

  • CPU:此版本仅支持 x86_64 架构

  • 操作系统:任何 Linux 发行版,需满足以下条件:

  • CUDA 驱动程序:请遵循安装指南。我们建议

    • 使用网络存储库作为 软件包管理器安装的一部分,跳过 CUDA 工具包安装,因为库在 NIM 容器中可用

    • 特定版本安装 open kernels

      主版本

      EOL

      数据中心和 RTX/Quadro GPU

      GeForce GPU

      > 550

      待定

      X

      X

      550

      2025 年 2 月

      X

      X

      545

      2023 年 10 月

      X

      X

      535

      2026 年 6 月

      X

      525

      2023 年 11 月

      X

      470

      2024 年 9 月

      X

  1. 安装 Docker

  2. 安装 NVIDIA Container Toolkit

安装工具包后,请按照 NVIDIA Container Toolkit 文档中配置 Docker 部分中的说明进行操作。

为确保您的设置正确,请运行以下命令

docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi

此命令应产生类似于以下的输出,您可以在其中确认 CUDA 驱动程序版本和可用的 GPU。

   +-----------------------------------------------------------------------------------------+
   | NVIDIA-SMI 550.54.14              Driver Version: 550.54.14      CUDA Version: 12.4     |
   |-----------------------------------------+------------------------+----------------------+
   | 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 H100 80GB HBM3          On  |   00000000:1B:00.0 Off |                    0 |
   | N/A   36C    P0            112W /  700W |   78489MiB /  81559MiB |      0%      Default |
   |                                         |                        |             Disabled |
   +-----------------------------------------+------------------------+----------------------+

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

为 Windows 安装 WSL2#

某些可下载的 NIM 可在具有 Windows System for Linux (WSL) 的 RTX Windows 系统上使用。要启用 WSL2,请执行以下步骤。

  1. 请确保您的计算机可以运行 WSL2,如 WSL2 文档的先决条件部分所述。

  2. 按照安装 WSL 命令中的步骤在您的 Windows 计算机上启用 WSL2。默认情况下,这些步骤安装 Ubuntu Linux 发行版。有关其他安装方式,请参阅更改默认安装的 Linux 发行版

NGC 身份验证#

生成 API 密钥#

要访问 NGC 资源,您需要一个 NGC API 密钥。您可以在此处生成密钥:生成个人密钥

创建 NGC API 个人密钥时,请确保从“包含的服务”下拉列表中至少选择“NGC 目录”。如果要将此密钥重用于其他目的,则可以包含更多服务。

注意

个人密钥允许您配置到期日期,使用操作按钮撤销或删除密钥,以及根据需要轮换密钥。有关密钥类型的更多信息,请参阅NGC 用户指南

导出 API 密钥#

将 API 密钥的值作为 NGC_API_KEY 环境变量传递到下一节中的 docker run 命令,以便在启动 NIM 时下载相应的模型和资源。

如果您不熟悉如何创建 NGC_API_KEY 环境变量,最简单的方法是在终端中导出它

export NGC_API_KEY=<value>

运行以下命令之一,使密钥在启动时可用

# If using bash
echo "export NGC_API_KEY=<value>" >> ~/.bashrc

# If using zsh
echo "export NGC_API_KEY=<value>" >> ~/.zshrc

注意

其他更安全的选择包括将值保存在文件中,以便您可以使用 cat $NGC_API_KEY_FILE 检索,或者使用 密码管理器

Docker 登录到 NGC#

要从 NGC 拉取 NIM 容器镜像,请首先使用以下命令通过 NVIDIA Container Registry 进行身份验证

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

使用 $oauthtoken 作为用户名,NGC_API_KEY 作为密码。$oauthtoken 用户名是一个特殊名称,指示您将使用 API 密钥而不是用户名和密码进行身份验证。

启动 NIM#

模型有两种格式

  • 预构建:预构建模型使用 TensorRT 引擎进行优化推理。在 TensorRT 引擎不可用的情况下,使用 ONNX 或 PyTorch 模型。您可以直接在相应的 GPU 上下载和使用它们。

  • RMIR:这种中间模型格式需要额外的部署步骤才能使用。您可以使用 TensorRT 优化此模型并将其部署在任何受支持的 GPU 上。如果您的 GPU 没有预构建模型,则会自动选择此模型格式。

NIM 会在受支持的 GPU 上自动下载预构建模型,或在其他 GPU 上动态生成优化模型。请参阅支持的模型表,并根据所需的模型指定 NIM_TAGS_SELECTORNIM_TAGS_SELECTOR 指定为逗号分隔的键值对。

例如,以下命令启用 Fastpitch-HiFiGAN TTS en-US 模型。

# Set the model name as required
export NIM_TAGS_SELECTOR=name=fastpitch-hifigan-en-us

docker run -it --rm --name=riva-tts \
   --runtime=nvidia \
   --gpus '"device=0"' \
   --shm-size=8GB \
   -e NGC_API_KEY \
   -e NIM_HTTP_API_PORT=9000 \
   -e NIM_GRPC_API_PORT=50051 \
   -p 9000:9000 \
   -p 50051:50051 \
   -e NIM_TAGS_SELECTOR \
   nvcr.io/nim/nvidia/riva-tts:1.3.0

注意

Docker 容器可能需要长达 30 分钟才能准备就绪并开始接受请求,具体取决于您的网络速度。

支持的模型#

模型 语言 模型类型 计算能力 (CC) GPU 内存
fastpitch-hifigan-en-us en-US 预构建 9.0 2 GB
rmir >= 7.0

运行推理#

  1. 打开一个新的终端并运行以下命令,以检查服务是否已准备好处理推理请求

curl -X 'GET' 'http://127.0.0.1:9000/v1/health/ready'

如果服务已准备就绪,您将收到类似于以下的响应。

{"status":"ready"}
  1. 安装 Riva Python 客户端

Riva 使用 gRPC API。您可以从 Riva gRPC Proto 文件下载 proto 文件,并使用 Protoc 编译器将其编译为目标语言。您可以在以下位置找到 C++ 和 Python 语言的 Riva 客户端。

安装 Riva Python 客户端

sudo apt-get install python3-pip
pip install nvidia-riva-client

下载 Riva 示例客户端

git clone https://github.com/nvidia-riva/python-clients.git
  1. 运行文本到语音 (TTS) 推理

python3 python-clients/scripts/tts/talk.py --server 0.0.0.0:50051 \
  --language-code en-US \
  --text "Hello, this is a speech synthesizer." \
  --output output.wav

运行上述命令后,将创建名为 output.wav 的合成音频文件。可以使用 --list-voices 选项查询可用的声音,并可以在合成期间使用 --voice 参数指定声音。

python3 python-clients/scripts/tts/talk.py --server 0.0.0.0:50051 --list-voices

示例客户端支持以下选项,以向 gRPC 端点发出转录请求。

  • --text - 要合成的文本输入,支持使用带有文本的 SSML 标签。有关更多信息,请参阅自定义

  • --language-code - 输入文本的语言。目前,Riva TTS NIM 仅支持 “en-US”。

  • --list-voices - 列出可用的声音。此参数应仅用于在运行推理之前查询可用的声音。

  • --voice - 要使用的声音名称。您可以从 --list-voices 选项的输出中确定该值。

容器的运行时参数#

标志

描述

-it

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

--rm

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

--name=<容器名称>

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

--runtime=nvidia

确保 NVIDIA 驱动程序在容器中可访问。

--gpus '"device=0"'

在容器内公开 NVIDIA GPU 0。如果您在具有多个 GPU 的主机上运行,则需要指定要使用的 GPU。有关挂载特定 GPU 的更多信息,请参阅 GPU 枚举

--shm-size=8GB

为多 GPU 通信分配主机内存。

-e NGC_API_KEY=$NGC_API_KEY

为容器提供从 NGC 下载足够模型和资源所需的令牌。请参阅 NGC 身份验证

-e NIM_HTTP_API_PORT=<端口>

指定用于 HTTP 端点的端口。端口可以具有除 8000 之外的任何值。默认为 9000。

-e NIM_GRPC_API_PORT=<端口>

指定用于 GRPC 端点的端口。默认为 50051。

-p 9000:9000

转发 NIM HTTP 服务器在容器内发布的端口,以便从主机系统访问。 : 的左侧是主机系统 ip:port(此处为 9000),而右侧是 NIM HTTP 服务器发布的容器端口。容器端口可以是除 8000 之外的任何值。

-p 50051:50051

转发 NIM gRPC 服务器在容器内发布的端口,以便从主机系统访问。 : 的左侧是主机系统 ip:port(此处为 50051),而右侧是 NIM gRPC 服务器发布的容器端口。

-e NIM_TAGS_SELECTOR=<key=value,...>

使用此选项过滤自动配置文件选择器中的标签。这可以是键值对列表,其中键是配置文件属性名称,值是所需的属性值。例如:name=fastpitch-hifigan-en-us

模型缓存#

在初始启动时,容器将从 NGC 下载模型。您可以通过使用缓存目录在本地缓存模型来跳过未来运行中的此下载步骤,如下所示。

# Create the cache directory on the host machine
export LOCAL_NIM_CACHE=~/.cache/nim
mkdir -p $LOCAL_NIM_CACHE
chmod 777 $LOCAL_NIM_CACHE

# Set the appropriate values for <model>
export NIM_TAGS_SELECTOR="name=<model>,model_type=prebuilt"

# Run the container with the cache directory mounted in the appropriate location
docker run -it --rm --name=riva-tts \
      --runtime=nvidia \
      --gpus '"device=0"' \
      --shm-size=8GB \
      -e NGC_API_KEY \
      -e NIM_TAGS_SELECTOR \
      -e NIM_HTTP_API_PORT=9000 \
      -e NIM_GRPC_API_PORT=50051 \
      -p 9000:9000 \
      -p 50051:50051 \
      -v $LOCAL_NIM_CACHE:/opt/nim/.cache \
      nvcr.io/nim/nvidia/riva-tts:1.3.0

在后续运行中,模型将从缓存加载。

RMIR 模型需要先部署才能使用。我们需要部署模型并导出生成的模型以供以后使用。

# Create the cache directory on the host machine
export NIM_EXPORT_PATH=~/nim_export
mkdir -p $NIM_EXPORT_PATH
chmod 777 $NIM_EXPORT_PATH

# Set the appropriate values for <model> from the Supported Models table
export NIM_TAGS_SELECTOR="name=<model>,model_type=rmir"

# Run the container with the export directory mounted in the appropriate location
docker run -it --rm --name=riva-tts \
      --runtime=nvidia \
      --gpus '"device=0"' \
      --shm-size=8GB \
      -e NGC_API_KEY \
      -e NIM_TAGS_SELECTOR \
      -e NIM_HTTP_API_PORT=9000 \
      -e NIM_GRPC_API_PORT=50051 \
      -p 9000:9000 \
      -p 50051:50051 \
      -v $NIM_EXPORT_PATH:/opt/nim/export \
      -e NIM_EXPORT_PATH=/opt/nim/export \
      nvcr.io/nim/nvidia/riva-tts:1.3.0

模型部署完成后,容器将终止并显示以下日志。

INFO:inference:Riva model generation completed
INFO:inference:Models exported to /opt/nim/export
INFO:inference:Exiting container

可以使用以下命令以及 NIM_DISABLE_MODEL_DOWNLOAD=true 进行后续运行。将加载导出的模型,而不是从 NGC 下载模型。

# Run the container with the cache directory mounted in the appropriate location
docker run -it --rm --name=riva-tts \
      --runtime=nvidia \
      --gpus '"device=0"' \
      --shm-size=8GB \
      -e NGC_API_KEY \
      -e NIM_TAGS_SELECTOR \
      -e NIM_DISABLE_MODEL_DOWNLOAD=true \
      -e NIM_HTTP_API_PORT=9000 \
      -e NIM_GRPC_API_PORT=50051 \
      -p 9000:9000 \
      -p 50051:50051 \
      -v $NIM_EXPORT_PATH:/opt/nim/export \
      -e NIM_EXPORT_PATH=/opt/nim/export \
      nvcr.io/nim/nvidia/riva-tts:1.3.0

停止容器#

以下命令通过停止并删除正在运行的 docker 容器来停止容器。

docker stop riva-tts
docker rm riva-tts