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加速对话人工智能应用的框架的更多相关文章

  1. 一个使用 Python 的人工智能聊天机器人框架

    一个Python 的 AI Chatbot框架 建立一个聊天室可以听起来很棒,但它是完全可行的. IKY是一个内置于Python中的AI动力对话对话界面. 使用IKY,很容易创建自然语言会话场景,无需 ...

  2. 深度学习“引擎”之争:GPU加速还是专属神经网络芯片?

    深度学习“引擎”之争:GPU加速还是专属神经网络芯片? 深度学习(Deep Learning)在这两年风靡全球,大数据和高性能计算平台的推动作用功不可没,可谓深度学习的“燃料”和“引擎”,GPU则是引 ...

  3. [源码解析] NVIDIA HugeCTR,GPU 版本参数服务器 --(1)

    [源码解析] NVIDIA HugeCTR,GPU版本参数服务器 --(1) 目录 [源码解析] NVIDIA HugeCTR,GPU版本参数服务器 --(1) 0x00 摘要 0x01 背景 1.1 ...

  4. [源码解析] NVIDIA HugeCTR,GPU版本参数服务器--- (5) 嵌入式hash表

    [源码解析] NVIDIA HugeCTR,GPU版本参数服务器--- (5) 嵌入式hash表 目录 [源码解析] NVIDIA HugeCTR,GPU版本参数服务器--- (5) 嵌入式hash表 ...

  5. 构建可扩展的GPU加速应用程序(NVIDIA HPC)

    构建可扩展的GPU加速应用程序(NVIDIA HPC) 研究人员.科学家和开发人员正在通过加速NVIDIA GPU上的高性能计算(HPC)应用来推进科学发展,NVIDIA GPU具有处理当今最具挑战性 ...

  6. 56 Marvin: 一个支持GPU加速、且不依赖其他库(除cuda和cudnn)的轻量化多维深度学习(deep learning)框架介绍

    0 引言 Marvin是普林斯顿视觉实验室(PrincetonVision)于2015年提出的轻量化GPU加速的多维深度学习网络框架.该框架采用纯c/c++编写,除了cuda和cudnn以外,不依赖其 ...

  7. 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 ...

  8. Python笔记_第四篇_高阶编程_进程、线程、协程_5.GPU加速

    Numba:高性能计算的高生产率 在这篇文章中,笔者将向你介绍一个来自Anaconda的Python编译器Numba,它可以在CUDA-capable GPU或多核cpu上编译Python代码.Pyt ...

  9. AI解决方案:边缘计算和GPU加速平台

    AI解决方案:边缘计算和GPU加速平台 一.适用于边缘 AI 的解决方案 AI 在边缘蓬勃发展.AI 和云原生应用程序.物联网及其数十亿的传感器以及 5G 网络现已使得在边缘大规模部署 AI 成为可能 ...

随机推荐

  1. 【SpringBoot】SpringBoot2.x整合定时任务和异步任务处理

    SpringBoot2.x整合定时任务和异步任务处理 一.项目环境 springboot2.x本身已经集成了定时任务模块和异步任务,可以直接使用 二.springboot常用定时任务配置 1.在启动类 ...

  2. hdu4908 中位数子串

    题意:       给你N个数字组成的数列,然后问你这里面有多少个是以M为中位数的子序列. 思路:       首先分四中简单的情况求        (1) 就是只有他自己的那种情况 那么sum+1 ...

  3. CString,string,char数组的转换

    来源:http://ticktick.blog.51cto.com/823160/317550 //----------------ANSI字符串转换为UNICODE字符串-------------- ...

  4. Cookie、Session和Token认证

    目录 Cookie Session认证机制 Session的一些安全配置 Token认证机制 Token预防CSRF Session认证和Token认证的区别 前言:HTTP是一种无状态的协议,为了分 ...

  5. MySQL分页优化_别再用offset和limit分页了

    终于要对MySQL优化下手了,本文将对分页进行优化说明,希望可以得到一个合适你的方案. 开始之前,先分享一套MySQL教程,小白入门或者学习巩固都可以看 MySQL基础入门-mysql教程-数据库实战 ...

  6. Day006 可变参数

    可变参数(不定项参数) 在jdk1.5开始,java支持传递同类型的可变参数给一个方法. 在方法声明中,在指定参数类型后加一个省略号(...). 一个方法只能指定一个可变参数,它必须是方法的最后一个参 ...

  7. 自定义Tomcat部署目录

    1.创建配置文件 在Tomcat安装目录中conf-->Catalina-->localhost目录下,创建项目访问请求路径.xml文件 内容如下: <Context path=&q ...

  8. JDK库rt包中常用包说明

    日常开发中的api都在rt包中,具体路径为:/jdk1.8.0_162/jre/lib中,注意是在jre中. 每个包中大致包含以下几个部分: 接口 类 枚举 异常 错误 注解 J2EE开发中常用的包 ...

  9. Raspberry PI 4B 安装和配置 Raspbian

    做记录,以备之后需要,待完成中 目录 做记录,以备之后需要,待完成中 下载镜像和安装程序 ssh 远程访问 下载镜像和安装程序 Raspbian: installer: ssh 远程访问 开启ssh ...

  10. 03.14 ICPC训练联盟周赛,Preliminaries for Benelux Algorithm Programming Contest 2019

    A .Architecture 题意:其实就是想让你找到两行数的最大值,然后比较是否相同,如果相同输出'possible',不同则输出'impossible' 思路:直接遍历寻找最大值,然后比较即可 ...