NVIDIA Jarvis:一个GPU加速对话人工智能应用的框架
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将在这里支持开发。
NVIDIA Jarvis:一个GPU加速对话人工智能应用的框架的更多相关文章
- 一个使用 Python 的人工智能聊天机器人框架
一个Python 的 AI Chatbot框架 建立一个聊天室可以听起来很棒,但它是完全可行的. IKY是一个内置于Python中的AI动力对话对话界面. 使用IKY,很容易创建自然语言会话场景,无需 ...
- 深度学习“引擎”之争:GPU加速还是专属神经网络芯片?
深度学习“引擎”之争:GPU加速还是专属神经网络芯片? 深度学习(Deep Learning)在这两年风靡全球,大数据和高性能计算平台的推动作用功不可没,可谓深度学习的“燃料”和“引擎”,GPU则是引 ...
- [源码解析] NVIDIA HugeCTR,GPU 版本参数服务器 --(1)
[源码解析] NVIDIA HugeCTR,GPU版本参数服务器 --(1) 目录 [源码解析] NVIDIA HugeCTR,GPU版本参数服务器 --(1) 0x00 摘要 0x01 背景 1.1 ...
- [源码解析] NVIDIA HugeCTR,GPU版本参数服务器--- (5) 嵌入式hash表
[源码解析] NVIDIA HugeCTR,GPU版本参数服务器--- (5) 嵌入式hash表 目录 [源码解析] NVIDIA HugeCTR,GPU版本参数服务器--- (5) 嵌入式hash表 ...
- 构建可扩展的GPU加速应用程序(NVIDIA HPC)
构建可扩展的GPU加速应用程序(NVIDIA HPC) 研究人员.科学家和开发人员正在通过加速NVIDIA GPU上的高性能计算(HPC)应用来推进科学发展,NVIDIA GPU具有处理当今最具挑战性 ...
- 56 Marvin: 一个支持GPU加速、且不依赖其他库(除cuda和cudnn)的轻量化多维深度学习(deep learning)框架介绍
0 引言 Marvin是普林斯顿视觉实验室(PrincetonVision)于2015年提出的轻量化GPU加速的多维深度学习网络框架.该框架采用纯c/c++编写,除了cuda和cudnn以外,不依赖其 ...
- tensor搭建--windows 10 64bit下安装Tensorflow+Keras+VS2015+CUDA8.0 GPU加速
windows 10 64bit下安装Tensorflow+Keras+VS2015+CUDA8.0 GPU加速 原文见于:http://www.jianshu.com/p/c245d46d43f0 ...
- Python笔记_第四篇_高阶编程_进程、线程、协程_5.GPU加速
Numba:高性能计算的高生产率 在这篇文章中,笔者将向你介绍一个来自Anaconda的Python编译器Numba,它可以在CUDA-capable GPU或多核cpu上编译Python代码.Pyt ...
- AI解决方案:边缘计算和GPU加速平台
AI解决方案:边缘计算和GPU加速平台 一.适用于边缘 AI 的解决方案 AI 在边缘蓬勃发展.AI 和云原生应用程序.物联网及其数十亿的传感器以及 5G 网络现已使得在边缘大规模部署 AI 成为可能 ...
随机推荐
- hdu1530 最大团简单题目
题意: 给你一个无向图,让你找到这个图里面的最大团是多少. 思路: 最大图案是NP问题,直接暴力搜索,如果当前的这个点可以加入当前最大团,那么就选择加入或者舍去,如果不能加入, ...
- Python脚本暴力破解SSH口令以及构建僵尸网络(pxssh)
目录 暴力破解SSH口令 SSH远端执行命令 构建僵尸网络 环境:Kali Linux python 2.7.13 暴力破解SSH口令 Pxssh是pexpect库的ssh专用脚本,他能用预先写好的 ...
- 1.简单认识PHP和环境搭建
1.关于PHP PHP(Hypertext Perprocessor,超文本预处理器),是一种服务器端.跨平台.HTML嵌入式的脚本语言,其独特的语法混合了C.Java.和Perl语言的特点,是一种被 ...
- 机器视觉-EasyDL商品检测-标准版-Demo
机器视觉-EasyDL商品检测-标准版 功能: EasyDL是百度大脑中的一个定制化训练和服务平台,EasyDL零售版是EasyDL针对零售场景推出的行业版,定制商品检测服务是EasyDL零售版的一项 ...
- 【】maven 配置启动tomcat版本,修改默认的6.x.x版本
<build> <plugins> <!-- 配置Tomcat插件 ,用于启动项目 --> <plugin> <groupId>org.ap ...
- mongodb 在PHP中常见问题及解决方法
1.$in needs an array 解决:查询用到in操作的时候,说in操作对应的不是我一个数组,或者数组索引不是以0开始的 方法:array_values重新生成一个索引为0开始的数组即可 $ ...
- IPC机制key值的各位组成
key_t ftok(const char *_pathname, int _proj_id) key值的第31~24位为ftok()第二个参数的低8位: key值的第23~16位为ftok()第一个 ...
- matlab添加当前路径下的所有子目录
% 添加当前路径下的所有子目录addpath(genpath(pwd));
- Form-OCR & CSDNAPP初体验
项目 内容 课程:北航2020春软件工程 博客园班级博客 作业:阅读并撰写博客回答问题 软件案例分析 我在这个课程的目标是 全面地评价一个软件 这个作业在哪个具体方面帮助我实现目标 明确软件开发过程中 ...
- 关于Annotation注解的理解
在编Java程序的时候,我们经常会碰到annotation.比如:@Override 我们在子类继承父类的时候,会经常用到这个annotation.它告诉编译器这个方法是override父类的方法的. ...