NVIDIA Jarvis:一个GPU加速对话人工智能应用的框架

Introducing NVIDIA Jarvis: A Framework for GPU-Accelerated Conversational AI Applications

实时会话人工智能是一项复杂而富有挑战性的任务。为了允许与最终用户进行实时、自然的交互,模型需要在300毫秒内完成计算。自然的相互作用具有挑战性,需要多模态的感觉整合。模型管道也很复杂,需要跨多个服务进行协调:

自动语音识别(ASR)

自然语言理解(NLU)

特定于域的实现服务

文本到语音(TTS)

今天,发布了NVIDIA Jarvis,一个用于构建对话式人工智能应用程序的端到端框架。包括针对ASR、NLU、TTS和计算机视觉的GPU优化服务,这些服务使用最先进的深度学习模型。

可以将这些技能结合起来,在应用程序中形成多模式技能。可以对数据集上的服务和模型进行微调,以使用NVIDIA NeMo获得尽可能高的精度。还可以使用NVIDIA AI工具包中的其工具来优化和构建可以大规模运行的服务。

Jarvis旨在帮助轻松快速地访问对话式人工智能功能。通过几个命令,可以通过API操作访问高性能服务并尝试多模式演示。

Jarvis framework

Jarvis是一个完全加速的应用程序框架,用于构建使用端到端深度学习管道的多模式会话人工智能服务(图1)。

Jarvis框架包括预先训练的会话人工智能模型、工具,以及针对语音、视觉和NLU任务的优化端到端服务。除了人工智能服务外,Jarvis还允许同时融合视觉、音频和其传感器输入,以在虚拟助理、多用户二值化和呼叫中心助理等应用程序中提供多用户、多上下文对话等功能。

使用Jarvis,可以很容易地微调数据上的最新模型,以便更深入地理解特定上下文。优化推理以提供在150毫秒内运行的实时服务,而在纯CPU平台上则需要25秒。

Figure 1. Jarvis is a platform for multimodal conversation AI development and deployment at scale.

特定于任务的人工智能服务和gRPC端点提供开箱即用、高性能ASR、NLU、文本到语音(TTS)和广泛的计算机视觉人工智能服务。所有这些人工智能服务都经过数千小时的公共和内部数据集训练,以达到高精度。可以开始使用预先训练的模型,或者使用自己的数据集对进行微调,以进一步提高模型性能

另一个主要组件是Jarvis Core,是一个设计用于创建复杂的、多模式的、对话式人工智能应用程序的组件。包括Jarvis对话管理器,负责以下任务:

多用户会话中的上下文切换

对话状态跟踪

使用实现引擎处理用户请求

Jarvis NLP服务返回的域、意图和实体用作对话框管理器的输入,该对话框管理器输出下一个要执行的操作和文本响应。对话框管理器与实现引擎紧密协作,后者负责检索特定于域的信息以满足用户查询并执行用户请求的命令。

图2显示了可用的三个主要构建块。

Figure 2. Jarvis components: Multimodal Skills, Core Components, basic services.

Jarvis Core还提供传感器管理和多模式融合等构建块,帮助管理同步不同传感器输入流以及启动人工智能服务的不同时间的复杂挑战。

多模式技能组件将特定于任务的服务组合起来,形成复杂的多模式服务。所有多模式应用程序都可以写在计算图中,每个节点都是一个人工智能服务。

Jarvis利用Triton为多个模型提供高效和健壮的资源分配,并在高吞吐量、低延迟和高精度方面实现高性能。

Jarvis services

为了充分利用GPU的计算能力,Jarvis基于Triton为神经网络和集成管道提供服务,这些管道在TensorRT中高效运行。

Jarvis提供的服务是通过API操作公开的,这些API操作可以使用gRPC端点进行访问,这些端点还向应用程序开发人员隐藏了所有的复杂性。

图3显示了服务器端的系统外观。gRPC API操作由负责处理所有计算机视觉、语音和自然语言处理传入和传出数据的API服务器(运行在Docker容器中)公开。

Figure 3. Jarvis services include multiple pipelines.

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

Triton是在多个gpu上同时处理多个神经网络或集成管道的多个推理请求的后端服务器。

对于会话人工智能应用程序,将延迟保持在给定的阈值以下是很重要的。这通常转化为推理请求一到达就执行。要使GPU饱和并提高性能,必须增加批大小并延迟推理执行,直到收到更多请求并形成更大的批。

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

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

之前提到过gRPC端点如何向应用程序开发人员隐藏系统的复杂性。下面就让快速了解一下如何与贾维斯互动。

在客户端,Python接口通过简单的Python API操作使与Jarvis服务器的通信更加容易。

例如,下面是如何创建对现有TTS Jarvis服务的请求的。

首先,导入Jarvis API:

import src.jarvis_proto.jarvis_tts_pb2 as jtts

import src.jarvis_proto.jarvis_tts_pb2_grpc as jtts_srv

import src.jarvis_proto.audio_pb2 as ja

Next, create a gRPC channel to the Jarvis endpoint:

channel = grpc.insecure_channel('localhost:50051')

jarvis_tts = jtts_srv.JarvisTTSStub(channel)

Then, create a TTS request:

req = jtts.SynthesizeSpeechRequest()

req.text = "We know what we are, but not what we may be?"

req.language_code = "en-US"

req.encoding = ja.AudioEncoding.LINEAR_PCM

req.sample_rate_hz = 22050

req.voice_name = "ljspeech"

resp = jarvis_tts.Synthesize(req)

audio_samples = np.frombuffer(resp.audio, dtype=np.float32)

Training a model with your data

通过使用NVIDIA NeMo或NVIDIA传输学习工具包,可以在Jarvis中使用定制的训练模型(图4)。

Figure 4. Jarvis from training to deploying: Using NeMo or TLT, it is possible to train or fine-tune models to improve the accuracy of Jarvis services, after trained models are exported with TensorRT for optimized inference and deployed in Jarvis.

例如,为了进一步提高ASR转录文本的易读性和准确性,可能需要向ASR系统添加自定义标点和大写模型,该系统通常生成没有这些功能的文本。

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

应该跟在单词后面的标点符号。

这个词是否应该大写。

数据集准备就绪后,下一步是通过运行已提供的脚本进行训练。

当训练完成并达到所需的最终精度时,使用包含的脚本为Triton声波风廓线仪创建模型存储库。

Jarvis文档包含了关于如何训练或微调其模型的更多细节,这里只演示了使用NeMo进行定制的众多可能性中的一种。

Deploying a model in Jarvis

最后,Jarvis是为大规模的对话人工智能而设计的。为了帮助在不同的服务器上高效地服务模型,NVIDIA使用Helm图表提供了按钮模型部署(图5)。

Figure 5. Models can be deployed in Jarvis by modifying the available Helm chart.

Helm图有几个功能:

为Jarvis服务API服务器、Triton推理服务器和用于下载和转换模型的实用工具容器从NGC中提取Docker图像。

生成Triton推理服务器模型库。

使用适当的配置启动Triton推断服务器。

将Triton推理服务器和Jarvis服务器公开为Kubernetes服务。

可以为自定义用例修改Helm图表配置。可以更改与要部署哪些模型、存储位置以及如何公开服务相关的设置。

结论

Jarvis可供选择的一组客户使用。如果有诸如虚拟助理、数字化身、多模态传感器融合(CV与ASR/NLP/TTS融合)或任何ASR/NLP/TTS/CV独立用例(如转录),那么Jarvis将在这里支持开发。

最新文章

  1. java虚拟机之回收方法区
  2. springmvc 拦截器,不拦截jsp文件
  3. javaScript call 函数的用法说明
  4. css权重及优先级问题
  5. W3C和IE中的事件处理函数
  6. background不能填充margin的问题
  7. Mysql规范和使用注意点(转)
  8. 在Freeplane中显示与隐藏层级图标
  9. 设置TabBar分栏控制器上图片的大小问题
  10. DevExpreess汉化使用方法及汉化包
  11. php实现ppt转图片,php调用com组件问题
  12. 实现Map接口(hash原理)
  13. LoadRunner HTTP+Json 接口性能测试
  14. Django小技巧——使用package管理app
  15. django项目 报错:ImportError: cannot import name choice
  16. Android联系人列表实现
  17. MongoDB shell 介绍
  18. redis 五大数据类型之set篇
  19. [测试] Markdown+Latex
  20. Java实现循环体的过滤器

热门文章

  1. HDU 1430 关系映射 + 打表 .
  2. hdu1722 切蛋糕
  3. LNMP环境搭建Wordpress博客
  4. drbd虚拟机宕机恢复方法
  5. 【js】Leetcode每日一题-制作m束花所需的最少天数
  6. 百度地图api逆地址解析 PHP
  7. linux中定时运行php(每分钟执行一次为例)
  8. PageHelper简单使用
  9. 【Azure Redis 缓存】Azure Cache for Redis服务中,除开放端口6379,6380外,对13000,13001,15000,15001 为什么也是开放的呢?
  10. 转: inline关键字使用