入门指南#

先决条件#

设置#

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

  • NVIDIA GPU(s):Riva ASR 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 Catalog”。如果此密钥要重复用于其他目的,则可以包含更多服务。

注意

个人密钥允许您配置过期日期、使用操作按钮撤销或删除密钥,以及根据需要轮换密钥。有关密钥类型的更多信息,请参阅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 指定为逗号分隔的键值对。一些 ASR 模型有针对不同用例调整的多种变体或模式。可用模式包括流式低延迟 (str)、流式高吞吐量 (str-thr) 和离线 (ofl)。将模式设置为 all 会部署所有模型变体。

例如,以下命令启用 Parakeet 1.1b en-US 流式模型。

export NIM_TAGS_SELECTOR="name=parakeet-1-1b-ctc-riva-en-us,mode=str"

docker run -it --rm --name=riva-asr \
   --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-asr:1.3.0

注意

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

支持的模型#

模型 语言 模型类型 计算能力 (CC) GPU 内存 (GB) 可用模式
parakeet-0-6b-ctc-riva-en-us en-US 预构建 >= 8.0 ofl 5.8, str 4, str-thr 5 ofl, str, str-thr, all
rmir >= 7.0
parakeet-1-1b-ctc-riva-en-us en-US 预构建 >= 8.0 ofl 6.7, str 5, str-thr 5.9 GB ofl, str, str-thr, all
rmir >= 7.0
conformer-ctc-riva-es-us es-US 预构建 9.0 ofl 5.8, str 3.6, str-thr 4.2 ofl, str, str-thr, all
rmir >= 7.0
whisper-large-v3 多语言 预构建 9.0 13 ofl
rmir >= 7.0
canary-0-6b-turbo 多语言 预构建 >=7.0 12.2 ofl
canary-1b 多语言 预构建 >=7.0 13.4 ofl

注意

所有模型均使用 FP16 精度。

运行推理#

  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. 运行语音转文本 (STT) 推理。

Riva ASR 支持 WAV、OPUS 和 FLAC 格式的 Mono 16 位音频。如果您没有可用的语音文件,可以使用在前一节中启动的 Docker 容器中嵌入的示例语音文件。

使用 gRPC API 进行转录

将示例音频文件从 NIM 容器复制到主机,或使用您自己的文件。

docker cp riva-asr:/opt/riva/wav/en-US_sample.wav .

流式模式示例。输入语音文件以分块方式流式传输到服务。

python3 python-clients/scripts/asr/transcribe_file.py \
   --server 0.0.0.0:50051 \
   --language-code en-US --automatic-punctuation \
   --input-file en-US_sample.wav

离线模式示例。输入语音文件一次性发送到服务。

python3 python-clients/scripts/asr/transcribe_file_offline.py \
   --server 0.0.0.0:50051 \
   --language-code en-US --automatic-punctuation \
   --input-file en-US_sample.wav

使用 gRPC API 进行转录

将示例音频文件从 NIM 容器复制到主机,或使用您自己的文件。

docker cp riva-asr:/opt/riva/wav/es-US_sample.wav .

流式模式示例。输入语音文件以分块方式流式传输到服务。

python3 python-clients/scripts/asr/transcribe_file.py \
   --server 0.0.0.0:50051 \
   --language-code es-US --automatic-punctuation \
   --input-file es-US_sample.wav

离线模式示例。输入语音文件一次性发送到服务。

python3 python-clients/scripts/asr/transcribe_file_offline.py \
   --server 0.0.0.0:50051 \
   --language-code es-US --automatic-punctuation \
   --input-file es-US_sample.wav

Whisper 支持多种语言的转录。有关所有可用语言和相应代码的列表,请参阅 支持的语言。将输入语言指定为 multi 将启用自动语言检测。建议指定正确的语言,因为它将提高准确性和延迟。Whisper 模型默认启用标点符号。

将示例音频文件从 NIM 容器复制到主机,或使用您自己的文件。

docker cp riva-asr:/opt/riva/wav/en-US_sample.wav .

使用 gRPC API 进行转录

离线模式示例。输入语音文件一次性发送到服务。

python3 python-clients/scripts/asr/transcribe_file_offline.py \
   --server 0.0.0.0:50051 \
   --language en --input-file en-US_sample.wav

使用 HTTP API 进行转录

curl -s http://127.0.0.1:9000/v1/audio/transcriptions -F language=en \
   -F file="@en-US_sample.wav"

注意

Whisper 模型仅支持离线模式。

Whisper 支持从多种语言翻译成英语。有关所有可用语言和相应代码的列表,请参阅 支持的语言。将输入语言指定为 multi 将启用自动语言检测。建议指定正确的输入语言,因为它将提高准确性和延迟

将示例音频文件从 NIM 容器复制到主机,或使用您自己的文件。

docker cp riva-asr:/opt/riva/wav/fr-FR_sample.wav .

使用 gRPC API 翻译成英语

python3 python-clients/scripts/asr/transcribe_file_offline.py \
   --server 0.0.0.0:50051 \
   --language fr --input-file fr-FR_sample.wav \
   --custom-configuration task:translate

使用 HTTP API 翻译成英语

curl -s http://127.0.0.1:9000/v1/audio/translations -F language=fr \
   -F file="@fr-FR_sample.wav"

注意

Whisper 模型仅支持离线模式。

Canary 支持 en-US, en-GB, es-ES, ar-AR, es-US, pt-BR, fr-FR, de-DE, it-IT, ja-JP, ko-KR, ru-RU, hi-IN 语言的转录。需要指定输入语言。Canary 模型默认启用标点符号。

将示例音频文件从 NIM 容器复制到主机,或使用您自己的文件。

docker cp riva-asr:/opt/riva/wav/en-US_sample.wav .

使用 gRPC API 进行转录

python3 python-clients/scripts/asr/transcribe_file_offline.py \
   --server 0.0.0.0:50051 \
   --language en-US --input-file en-US_sample.wav

使用 HTTP API 进行转录

curl -s http://127.0.0.1:9000/v1/audio/transcriptions -F language=en-US \
   -F file="@en-US_sample.wav"

注意

Canary 模型仅支持离线模式。

Canary 支持在 en-USes-ES, ar-AR, es-US, pt-BR, fr-FR, de-DE, it-IT, ja-JP, ko-KR, ru-RU, hi-IN 语言之间进行翻译。

将示例音频文件从 NIM 容器复制到主机,或使用您自己的文件。

docker cp riva-asr:/opt/riva/wav/fr-FR_sample.wav .
docker cp riva-asr:/opt/riva/examples/asr_lib/1272-135031-0000.wav .

使用 gRPC API 翻译成英语

python3 python-clients/scripts/asr/transcribe_file_offline.py \
   --server 0.0.0.0:50051 \
   --language fr-FR --input-file fr-FR_sample.wav \
   --custom-configuration target_language:en-US,task:translate

使用 HTTP API 翻译成英语

curl -s http://127.0.0.1:9000/v1/audio/translations -F language=fr-FR \
   -F target_language=en-US -F file="@fr-FR_sample.wav"

使用 gRPC API 从英语翻译

python3 python-clients/scripts/asr/transcribe_file_offline.py \
   --server 0.0.0.0:50051 \
   --language en-US --input-file 1272-135031-0000.wav \
   --custom-configuration target_language:fr-FR,task:translate

使用 HTTP API 从英语翻译

curl -s http://127.0.0.1:9000/v1/audio/translations -F language=en-US \
   -F target_language=fr-FR -F file="@1272-135031-0000.wav"

注意

Canary 模型仅支持离线模式。

注意

有关自定义模型行为的更多信息,请参阅自定义页面。

容器的运行时参数#

标志

描述

-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:端口(此处为 9000),而右侧是 NIM HTTP 服务器发布的容器端口。容器端口可以为除 8000 之外的任何值。

-p 50051:50051

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

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

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

模型缓存#

在首次启动时,容器将从 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> and <mode>:
export NIM_TAGS_SELECTOR="name=<model>,mode=<mode>,model_type=prebuilt"

# Run the container with the cache directory mounted in the appropriate location:
docker run -it --rm --name=riva-asr \
      --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-asr: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> and <mode> from the table below:
export NIM_TAGS_SELECTOR="name=<model>,mode=<mode>,model_type=rmir"

# Run the container with the export directory mounted in the appropriate location:
docker run -it --rm --name=riva-asr \
      --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-asr: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-asr \
      --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-asr:1.3.0

停止容器#

以下命令通过停止和移除正在运行的 Docker 容器来停止容器。

docker stop riva-asr
docker rm riva-asr