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 成为可能 ...
随机推荐
- 获取Shell后的操作
对于Windows系统主机和Linux系统主机,获取Shell后的操作都不同. Windows 当我们通过对Web服务器进行渗透,拿到了该Web服务器的shell后,可以执行系统命令后,我们该如何操作 ...
- ERROR: Pool overlaps with other one on this address space
出现问题 配置了两个不同的docker-compose.yml,使用了相同的网段,导致了在运行第二个yml文件时命令行报错目标网段已存在,报错如下: Creating network "v2 ...
- 基于RRCF(robust random cut forest)的时间序列异常检测流程
摘要:RRCF是亚马逊提出的一个流式异常检测算法,是对孤立森林的改进,可对时序或非时序数据进行异常检测.本文是我从事AIOps研发工作时所做的基于RRCF的时序异常检测方案. 1. 数据格式 ...
- Markdown编辑器怎么用
Markdown编辑器怎么用 1.代码块 快速创建一个代码块 // 语法: // ```+语言名称,如```java,```c++ 2.标题 语法:#+空格+标题名字,一个#表示一级标题,两个#表示二 ...
- Codeforces Round #688 (Div. 2)
A. Cancel the Trains 题意:给定两个数组,找出这两个数组中有多少重复元素,然后输出 思路:直接找 代码: 1 #include<iostream> 2 #include ...
- 转: inline关键字使用
1.inline用在函数声明时,还是函数定义时?还是两边都加? 首先,内联函数声明和定义最好在同一个文件中,其它的情况没有实用上的意义. 只要在同一个文件中,声明和定义至少其一加"inlin ...
- 敏杰开题——软工团队项目选择与NABCD分析
这是一篇软件工程课程博客 Q A 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 团队项目选择 我们在这个课程的目标是 团队协作实践敏捷开发 这个作业在哪个具 ...
- [bug] CDH 安装 Error : No matching Packages to list
信息 分析 我的系统是CentOS 7,而 cm 安装包是配合 redhat 6 的,应该选择 redhat 7 目录下的包 参考 https://community.cloudera.com/t5/ ...
- [Java] 分布式消息队列(MQ)
概述 场景 服务解耦 削峰填谷 异步化缓冲:最终一致性/柔性事务 MQ应用思考点 生产端可靠性投递 消费端幂等:消息只能消费一次 高可用.低延迟.可靠性 消息堆积能力 可扩展性 业界主流MQ Acti ...
- 【转载】使用rdp协议访问远程Linux桌面
使用rdp协议访问远程Linux桌面 2017年03月31日 16:23:49 太阳之影 阅读数:2169 一般情况下,如果需要登陆远程Linux系统,我们会使用ssh/telnet来完成,如果需 ...