用于开发语音 AI 应用程序的 GPU 加速 SDK

news2025/1/19 3:34:08

NVIDIA Riva 简介:用于开发语音 AI 应用程序的 GPU 加速 SDK

在这里插入图片描述

语音 AI 用于多种应用,包括联络中心的座席助理以增强人类座席的能力、智能虚拟助理 (IVA) 的语音界面以及视频会议中的实时字幕。 为了支持这些功能,语音 AI 技术包括自动语音识别 (ASR) 和文本转语音 (TTS)。 ASR 管道获取原始音频并将其转换为文本,而 TTS 管道获取文本并将其转换为音频。

开发和运行实时语音 AI 服务既复杂又困难。 构建语音 AI 应用程序需要数十万小时的音频数据、用于根据您的特定用例构建和自定义模型的工具,以及可扩展的部署支持。

它还意味着实时运行,低延迟远低于 300 毫秒,以便与用户自然交互。 NVIDIA Riva 简化了开发语音 AI 服务的端到端流程,并为类人交互提供实时性能。

NVIDIA Riva SDK

NVIDIA Riva 是一个 GPU 加速的 SDK,用于构建和部署完全可定制的实时语音 AI 应用程序,这些应用程序可以实时准确地交付。 这些应用程序可以部署在本地、云端、嵌入式和边缘。 NVIDIA Riva 旨在帮助您轻松快速地访问语音 AI 功能。 只需几条命令,即可通过API操作访问高性能服务并试用demo。

在这里插入图片描述

NVIDIA Riva SDK 包括可在自定义数据集上微调的预训练语音 AI 模型,以及用于自动语音识别和语音合成的优化端到端技能。

使用 Riva,您可以根据您的数据完全自定义最先进的模型,以更深入地了解它们的特定上下文。 优化推理以提供实时运行的服务(少于 150 毫秒)。

任务特定的 AI 服务和 gRPC 端点提供开箱即用的高性能 ASR 和 TTS。 这些 AI 服务经过数千小时的公共和内部数据集训练,以达到高精度。 您可以开始使用预训练模型或使用您自己的数据集对其进行微调,以进一步提高模型性能。

Riva 使用 NVIDIA Triton Inference Server 服务于多个模型,以实现高效稳健的资源分配,并在高吞吐量、低延迟和高精度方面实现高性能。

NVIDIA Riva功能概述

Riva 为实时转录和智能虚拟助手等用例提供高度优化的自动语音识别和语音合成服务。 自动语音识别技能支持英语、西班牙语、普通话、印地语、韩语、葡萄牙语、法语、德语和俄语。

它在各种真实世界的特定领域数据集上进行训练和评估。 凭借电信、播客和医疗保健词汇,它提供了世界一流的生产准确性。 要了解更多信息,请参阅探索自动语音识别技术的独特应用。

Riva 文本转语音或语音合成技能可生成类人语音。 与 NVIDIA V100 GPU 上的 Tacotron 2 和 WaveGlow 模型相比,它使用非自回归模型在 NVIDIA A100 GPU 上提供 12 倍的性能提升。 此外,借助 TTS,您只需 30 分钟的语音数据,即可为每个品牌和虚拟助手创建自然的自定义语音。

在这里插入图片描述

为了充分利用 GPU 的计算能力,Riva skills 使用 NVIDIA Triton 推理服务器来为神经网络和集成管道提供服务,以便与 NVIDIA TensorRT 一起高效运行。

Riva 服务通过隐藏所有复杂性的 gRPC 端点访问的 API 操作公开。 下图显示了系统的服务器端。 gRPC API 操作由在 Docker 容器中运行的 API 服务器公开。 他们负责处理所有语音传入和传出数据。

在这里插入图片描述

API 服务器向 NVIDIA Triton 发送推理请求并接收结果。

NVIDIA Triton 是后端服务器,可同时处理多个 GPU 上的多个推理请求,用于许多神经网络或集成管道。

将延迟保持在给定阈值以下对于语音 AI 应用程序至关重要。 这种延迟要求转化为推理请求一到达就执行。 要充分利用 GPU 来提高性能,您应该通过延迟推理执行来增加批处理大小,直到收到更多请求,从而形成更大的批处理。

NVIDIA Triton 还负责在一个请求和另一个请求之间切换网络上下文。

Riva 可以通过从 NGC 下载适当模型和容器的简单脚本直接安装在裸机上,也可以通过提供的 Helm 图表部署在 Kubernetes 上。

查询 NVIDIA Riva 服务

下面快速浏览一下如何与 Riva 互动。 通过简单的 Python API 操作,Python 接口使客户端更容易与 Riva 服务器通信。 例如,以下是如何通过四个步骤创建对现有 TTS Riva 服务的请求。

首先,导入 Riva API 和其他有用的或需要的库:

import numpy as np
import IPython.display as ipd
import riva.client

接下来,创建到 Riva 端点的 gRPC 通道:

auth = riva.client.Auth(uri='localhost:50051')
riva_tts = riva.client.SpeechSynthesisService(auth)

然后,配置 TTS API 参数:

sample_rate_hz = 44100
req = { 
        "language_code"  : "en-US",
        "encoding"       : riva.client.AudioEncoding.LINEAR_PCM,
        "sample_rate_hz" : sample_rate_hz,
        "voice_name"     : "English-US.Female-1"
}

最后,创建一个 TTS 请求:

req["text"] = "Is it recognize speech or wreck a nice beach?"
resp = riva_tts.synthesize(**req)
audio_samples = np.frombuffer(resp.audio, dtype=np.int16)
ipd.Audio(audio_samples, rate=sample_rate_hz)

使用您自己的数据自定义模型

虽然 Riva 的默认模型功能强大,但工程师在开发语音 AI 应用程序时可能需要对其进行自定义。 自定义 ASR 管道组件可以进一步优化音频数据转录的特定上下文包括:

  • 与最初训练模型时使用的口音、方言甚至语言不同
  • 特定领域的词汇,例如学术、科学或商业术语
  • 偏好和/或取消偏好某些词,例如,解释一组同音词中的一个词在当前上下文中更有意义
  • 嘈杂的环境

您可能还希望自定义 TTS 模型,以便合成语音采用特定的音调或口音,或者可能模仿自己的声音。

借助 NVIDIA NeMo,您可以在特定领域或应用程序的数据集上微调 ASR、TTS 和 NLP 模型,甚至可以从头开始训练模型。

在这里插入图片描述

更详细地探索这样一种自定义,以进一步提高 ASR 转录文本的易读性和准确性,您可以将自定义标点符号和大写模型添加到生成没有这些功能的文本的 ASR 系统。

从预训练的 BERT 模型开始,第一步是准备数据集。 对于训练数据集中的每个单词,目标是预测以下内容:

  • 应该跟在单词后面的标点符号
  • 单词是否要大写

数据集准备就绪后,下一步是通过运行先前提供的脚本进行训练。 训练完成并达到所需的最终精度后,使用包含的脚本为 NVIDIA Triton 创建模型存储库。

NVIDIA Riva Speech Skills 文档包含 ASR 自定义最佳实践以及有关如何训练或微调其他模型的更多详细信息。 这篇文章仅展示了使用 NVIDIA NeMo 的众多定制可能性中的一种。

在 NVIDIA Riva 中部署模型

Riva 专为大规模语音 AI 而设计。 为了帮助您可靠地跨不同服务器有效地服务模型,NVIDIA 提供了使用 Helm 图表的按钮式模型部署。

在这里插入图片描述

Helm 图配置可从 NGC 目录中获得,可以针对自定义用例进行修改。 您可以更改与要部署的模型、存储它们的位置以及如何公开服务相关的设置。

总结

NVIDIA Riva 可作为一组容器和预训练模型从 NVIDIA NGC 免费提供给 NVIDIA 开发人员计划的成员。 使用这些资源,您可以开发具有实时转录、虚拟助手或自定义语音合成的应用程序。

您还可以通过 NVIDIA AI Enterprise Support 获得对 Riva 大规模部署的支持。 您可以在 NVIDIA LaunchPad 上免费试用 NVIDIA Riva,或访问 ASR 和 TTS 教程。

如果您准备好部署 Riva 语音 AI 技能,请查看 Riva 入门指南,为任何应用程序提供交互式语音体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/106302.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于springboot的社区团购管理系统的设计与实现

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

FineReport企业报表工具-JS根据条件显示参数控件

1. 概述 1.1 版本 报表服务器版本 功能变更 11.0 -- 1.2 问题描述 在使用参数控件时,有时我们希望部分参数控件在没满足条件时不显示,满足条件后再显示,如下图效果,只有前面的下拉框选择了内容之后,后一层下拉框控…

【C语言】重要函数qsort函数的用法

目录 一、qsort函数的介绍 1、整形数组 2、字符数组 3、字符串 4、结构体 二、qsort函数的使用 一、qsort函数的介绍 qsort函数是一种底层快速排序的函数,它的特点就是可以排序任意类型的数据,比如:整形、字符串、浮点型、以及结构体类型。 …

VUE3-组件之间传值《四》

目录 一.父传子,父组件向子组件传值 二.子传父,子组件向父组件传值 三.兄弟组件之间互传,2个组件之间是平级关系,互相传值 组件之间的传值,分为3种方式 一.父传子,父组件向子组件传值 1.建立一个默认的…

零信任深入理解--概念,架构和实现方案

1. 零信任究竟解决了什么问题? 很多人在初步了解“零信任”概念,乃至进一步研究一些技术和产品方案之后,会有种“不过如此”的感觉。 毕竟, IAM(Identity and Access Management,身份识别与访问管理&…

6. 【gRPC系列学习】Balance原理详解

本节开始分析Balance执行原理,通过上面流程可知,Balance Build的创建来自于Resolver的解析完成后调用updateResolverState方法,我们从updateResolverState方法开始分析Balance执行流程。 1. Balance调用流程 1)updateResolverState(s resolver.State, err error) error 方…

Java培训MySQL之全局序列

1.本地文件 不推荐,存在宕机序列丢失问题。 2.数据库方式 数据库序列方式原理 利用数据库一个表 来进行计数累加。但是并不是每次生成序列都读写数据库,这样效率太低。 mycat会预加载一部分号段到mycat的内存中,这样大部分读写序列都是在…

第二章:Linux的目录结构-[基础篇]

一:基础介绍 linux的文件系统是采用级层式的数状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录。 深刻理解linux树状文件目录是非常重要的,这里我给大家说明一下。 记住一句经典的话:在Li…

通信原理循环码

目录 码多项式 码多项式的按模运算 循环码的码多项式 循环码的生成矩阵 如何寻求任一循环码循环码的生成多项式​ 码多项式 一个长度为的码组可表示成如下多项式形式: 多项式的系数就是码组中的各码元,仅是码元位置标记 。 n7 时: 例&…

Activiti任务的处理以及进阶使用

1.什么是流程实例 流程实例(ProcessInstance)代表流程定义的执行实例 一个流程实例包括所有的运行节点Task,所以我们一般使用来了解当前流程的进度信息 taskService.createTaskQuery().processDefinitionKey(key)例如:用户或者程…

力扣11.盛最多水的容器(双指针解法)

问题描述: 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不能倾斜容…

Mini MP3 Player播放器简介与STC12例程

文章目录1、DFRobot arduino DFPlayer官方资料1-1、简介2-2、 基本功能详述1-3、 用途1-4、 引脚说明1-5、工作模式1-5-1、 串口工作模式1-5-2、 ADC按键工作模式1-5-3、 普通按键工作模式2、串口模式电路搭建与例程参考文献1、DFRobot arduino DFPlayer官方资料 1-1、简介 Th…

KingbaseES运维案例之---服务进程(backend process)终止

​ 案例说明: 如下图所示:KingbaseES服务进程结构 KingbaseES使用客户端/服务器的模型。 对于每个客户端的连接,KingbaseES主进程接收到客户端连接后,会为其创建一个新的服务进程。 KingbaseES 用服务进程来处理连接到数据库服务的…

Java Swing JTextField:单行文本框组件

Swing 中使用 JTextField 类实现一个单行文本框,它允许用户输入单行的文本信息。该类的常用构造方法如下。 JTextField():创建一个默认的文本框。JTextField(String text):创建一个指定初始化文本信息的文本框。JTextField(int columns)&…

Nacos学习笔记 (4)Nacos整合SpringBoot流程

前提,先下载Nacos并启动 Nacos Server。 1. Nacos 融合 Spring Boot 为注册配置中心 实现: 通过 Nacos Server 和 nacos-config-spring-boot-starter 实现配置的动态变更;通过 Nacos Server 和 nacos-discovery-spring-boot-starter 实现服…

OpenAI 3D 模型生成器Point-E极速体验

OpenAI 3D 模型生成器Point-E极速体验 3090显卡,极速体验三维模型生成,体验地址:Gradio 文本生成图像的 AI 最近已经火到了圈外,不论是 DALL-E 2、DeepAI 还是 Stable Diffusion,人人都在调用 AI 算法搞绘画艺术&…

Unreal Engine工程项目目录及对应作用

目录 .vs Binaries:编译文件 Config:配置文件 Content:资产文件 DerivedDataCache:UE针对平台特化的资源版本 Intermediate:中间文件 Saved:自动保存的内容 Source:源(代码&…

ADI Blackfin DSP处理器-BF533的开发详解66:MP3解码(含源码)

硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 代码实现功能 代码实现了读取工程目录下的一个 MP3 文件,对文件进行解码后,将生成的数据以 PCM 文件的形式保存在工程目录…

关于数组的一些题---获取数组对象的各种数据

关于数组的一些题—获取数组对象的各种数据 题目1:将数组对象中的属性值提出来生成新的对象 var arr [{label:男,value: 1}, {label:女,value: 0}]function f(arr) {// 写代码,得到 } var obj f(arr); console.log(obj) // obj {1: 男&am…

1 | Trerraform的使用及创建CVM

目录1 Trerraform简介2 Trerraform的安装2.1 参考地址2.2 安装方式3 使用Terraform管理腾讯云3.1 创建帐号并授权3.2 添加Terraform的环境变量3.3 配置provider文件3.4 terraform init3.5 terraform init -upgrade3.6 terraform plan3.7 terraform apply3.8 terraform destroy4…