人工智能/深度学习

语音识别:将模型部署到生产中

这篇文章是关于生成准确语音转录的系列文章的一部分。有关第 1 部分,请参见Speech Recognition: Generating Accurate Transcriptions Using NVIDIA Riva.有关第 2 部分,请参见Speech Recognition: Customizing Models to Your Domain Using Transfer Learning

NVIDIA Riva 是一款 AI 语音 SDK ,用于开发实时应用程序,如转录、虚拟助理和聊天机器人。它包括 NGC 中经过预训练的最先进模型、用于在您的领域中微调模型的 TAO 工具包以及用于高性能推理的优化技能。 Riva 使使用 NGC 中的 Riva 容器或使用 Helm chart 在 Kubernetes 上部署模型变得更简单。 Riva 技能由 NVIDIA TensorRT 提供支持,并通过 NVIDIA Triton 提供服务推理服务器。

在本文中,我们将讨论以下主题:

  • 背景 向上 Riva
  • 配置 Riva 并部署您的模型
  • 用你的模型推断
  • 关键外卖

这篇文章的内容可以在 Jupyter notebook 中找到,你可以下载它来跟进。有关 Riva 的更多信息,请参阅 Introducing NVIDIA Riva: An SDK for GPU-Accelerated Conversational AI Applications

配置 Riva

在设置 NVIDIA Riva 之前,请确保您的系统上已安装以下设备:

  • Python [3 . 6 . 9]
  • docker ce > 19 . 03 . 5
  • nvidia-DOCKR2 3 . 4 . 0-1 :Installation Guide

如果您按照第 2 部分中的说明进行操作,那么您应该已经安装了所有的先决条件。

设置 Riva 的第一步是到 install the NGC Command Line Interface Tool

Screenshot of NGC CLI installation screen.
图 1 。安装 NGC CLI

要登录到注册表,您必须 get access to the NGC API Key

Screenshot of the API generation page.
图 2 。获取 NGCAPI 密钥

设置好工具后,您现在可以从 NGC 上的Riva Skills Quick Start资源下载 Riva 。要下载该软件包,可以使用以下命令(最新版本的命令可在前面提到的 Riva 技能快速入门资源中找到):

ngc registry resource download-version "nvidia/riva/riva_quickstart:1.6.0-beta"

下载的软件包具有以下资产,可帮助您入门:

  • asr _ lm _工具:这些工具可用于微调语言模型。
  • nb _ demo _ speech _ api . ipynb :Riva 的入门笔记本。
  • Riva _ api-1 . 6 . 0b0-py3-none-any . whlNeMo 2 Riva -1 . 6 . 0b0-py3-none-any . whl :安装 Riva 的滚轮文件和将 NeMo 模型转换为 Riva 模型的工具。有关更多信息,请参阅本文后面的Inferencing with your model部分。
  • 快速启动脚本( Riva .*. sh , config . sh ):初始化并运行 Triton 推理服务器以提供 Riva AI 服务的脚本。有关更多信息,请参阅配置 Riva 和部署您的模型。
  • 示例:基于 gRPC 的客户机代码示例。

配置 Riva 并部署您的模型

你可能想知道从哪里开始。为了简化体验, NVIDIA 通过提供一个配置文件,使用 Riva AI 服务调整您可能需要调整的所有内容,从而帮助您使用 Riva 定制部署。对于本演练,您依赖于特定于任务的 Riva ASR AI 服务。

对于本演练,我们只讨论一些调整。因为您只使用 ASR ,所以可以安全地禁用 NLP 和 TTS 。

# Enable or Disable Riva Services
service_enabled_asr=true
service_enabled_nlp=false
service_enabled_tts=false

如果您遵循第 2 部分的内容,可以将 use _ existing _ rmirs 参数设置为 true 。我们将在后面的文章中对此进行详细讨论。

# Locations to use for storing models artifacts
riva_model_loc="riva-model-repo"
use_existing_rmirs=false

您可以选择从模型存储库下载的预训练模型,以便在不进行自定义的情况下运行。

########## ASR MODELS ##########
models_asr=(
### Punctuation model
    "${riva_ngc_org}/${riva_ngc_team}/rmir_nlp_punctuation_bert_base:${riva_ngc_model_version}"
...
### Citrinet-1024 Offline w/ CPU decoder,
   "${riva_ngc_org}/${riva_ngc_team}/rmir_asr_citrinet_1024_asrset3p0_offline:${riva_ngc_model_version}"
)

如果您在阅读本系列第 2 部分时有 Riva 模型,请首先将其构建为称为 Riva 模型中间表示( RMIR )格式的中间格式。您可以使用 Riva Service Maker 来完成此操作。 ServiceMaker 是一组工具,用于聚合 Riva 部署到目标环境所需的所有工件(模型、文件、配置和用户设置)。

使用riva-buildriva-deploy命令执行此操作。有关更多信息,请参阅Deploying Your Custom Model into Riva

docker run --rm --gpus 0 -v <path to model>:/data <name and version of the container> -- \
            riva-build speech_recognition /data/asr.rmir:<key used to encode the model> /data/<name of the model file>:<key used to encode the model> --offline \
            --chunk_size=1.6 \
            --padding_size=1.6 \
            --ms_per_timestep=80 \
            --greedy_decoder.asr_model_delay=-1 \
            --featurizer.use_utterance_norm_params=False \
            --featurizer.precalc_norm_time_steps=0 \
            --featurizer.precalc_norm_params=False \
            --decoder_type=greedy

docker run --rm --gpus 0 -v <path to model>:/data <name and version of the container> -- \
            riva-deploy -f  /data/asr.rmir:<key used to encode the model> /data/models/

现在已经设置了模型存储库,下一步是部署模型。虽然您可以这样做manually,但我们建议您在第一次体验时使用预打包的脚本。快速启动脚本riva_init.shriva_start.sh是可用于使用config.sh中的精确配置部署模型的两个脚本。

bash riva_init.sh
bash riva_start.sh

运行riva_init.sh时:

  • 您在config.sh中选择的模型的 RMIR 文件从指定目录下的 NGC 下载。
  • 对于每个 RMIR 模型文件,将生成相应的 Triton 推理服务器模型存储库。此过程可能需要一些时间,具体取决于所选服务的数量和型号。

要使用自定义模型,请将 RMIR 文件复制到config.sh(用于$riva_model_loc)中指定的目录。要部署模型,请运行riva_start.shriva-speech容器将与从所选存储库加载到容器的模型一起旋转。现在,您可以开始发送推断请求了。

使用您的模型进行推断

为了充分利用 NVIDIA GPU s , Riva 利用了 NVIDIA Triton 推理服务器和 NVIDIA TensorRT 。在会话设置中,应用程序会优化尽可能低的延迟,但为了使用更多的计算资源,必须增加批大小,即同步处理的请求数,这自然会增加延迟。 NVIDIA Triton 可用于在多个 GPU 上的多个模型上运行多个推理请求,从而缓解此问题。

您可以使用 GRPCAPI 在三个主要步骤中查询这些模型:导入 LIB 、设置 gRPC 通道和获取响应。

首先,导入所有依赖项并加载音频。在这种情况下,您正在从文件中读取音频。我们在 examples 文件夹中还有一个流媒体示例。

import argparse
import grpc
import time
import riva_api.audio_pb2 as ra
import riva)api.riva_asr_pb2 as rasr
import riva)api.riva_asr_pb2_grpc as rasr_srv
import wave

audio_file = "<add path to .wav file>"
server = "localhost:50051

wf = wave.open(audio_file, 'rb')
with open(audio_file, 'rb') as fh:
    data = fh.read()

要安装所有 Riva 特定依赖项,可以使用包中提供的. whl 文件。

pip3 install riva_api-1.6.0b0-py3-none-any.whl

接下来,创建一个指向 Riva 端点的 grpc 通道,并将其配置为使用适合您的用例的音频。

channel = grpc.insecure_channel(server)
client = rasr_srv.RivaSpeechRecognitionStub(channel)
config = rasr.RecognitionConfig(
   encoding=ra.AudioEncoding.LINEAR_PCM,
   sample_rate_hertz=wf.getframerate(),
   language_code="en-US",
   max_alternatives=1,
   enable_automatic_punctuation=False,
   audio_channel_count=1
)

最后,向服务器发送推断请求并获得响应。

request = rasr.RecognizeRequest(config=config, audio=data)

response = client.Recognize(request)
print(response)

关键信息

此 API 可用于构建应用程序。您可以在单个裸机系统上安装 Riva ,并开始本练习,或者使用 Kubernetes 和提供的Helm chart进行大规模部署。

Riva has 1-click deployment for speech synthesis, language understanding, and speech recognition.
图 3 。 NVIDIA Riva 的典型部署工作流

使用此舵图,您可以执行以下操作:

  • 从 NGC 中提取 Riva 服务 API 服务器、 Triton 推理服务器和其他必要的 Docker 映像。
  • 生成 Triton 推理服务器模型库,并启动英伟达 Triton 服务器,并使用所选配置。
  • 公开要用作 Kubernetes 服务的推理服务器和 Riva 服务器终结点。

有关更多信息,请参阅 Deploying Riva ASR Service on Amazon EKS

结论

Riva 是一款用于开发语音应用程序的端到端 GPU 加速 SDK 。在本系列文章中,我们讨论了语音识别在行业中的重要性,介绍了如何在您的领域定制语音识别模型以提供世界级的准确性,并向您展示了如何使用 Riva 部署可实时运行的优化服务。

有关其他有趣的 Riva 解决方案的更多信息,请参阅 all Riva posts on the Developer Blog

 

Tags