TensorRT

作为Inference(推理)端的SDK的工具,TensorRT是可编程的处理加速器,主要是用来部署神经网络到Inference端之前,对于网络进行优化加速,来提高程序的吞吐量以及降低延迟。TensorRT理论上可以支持所有主流的深度学习框架,目前最新的版本是3.0版,可以支持Caffe 模型的直接导入,还有就是TensorFlow模型转换为UFF格式后的导入。对于其他的framework,需要用户手动的去调用一些API进行模型和参数的导入,而且在TensorRT 3.0里面还加入了对Python接口的支持,原来我们是只支持C++的,目前加入了Python,这样使得导入网络模型可以变得更加容易一些。

TensorRT 能够帮助我们做哪些网络模型优化呢?

大家可以看到上边这个图里面有五大优化方面,这里面着重介绍两个,第一个叫做权重系数和激活值的精度校准,我们知道在Training端,一般计算精度是FP32单精度的。但是在做Inference部署的时候,在整个网络精度变化不大的情况下,我们更关心延迟和吞吐。实际上这也是降低计算精度的一个很常用的方法。比如我们可以将FP32的精度降为FP16或者INT8,由于量化范围缩小,我们只需要在量化过程中做一些动态的校准,TensorRT 就可以自动帮助我们完成校准过程,并且精度损失缩到最小化。

第二个叫做网络层的合并,在网络模型里,通常一个layer(网络层)就需要发射一次Kernel,而在layer比较小的情况下,这种发射的效率是比较低的,因为每次Kernel发射是需要耗时的,并且对GPU的利用率也不会很高。这时TensorRT 就可以自动地去检测一些可以合并的来源,把它们合并成一个比较大的Kernel发射,减少Kernel发射并且提升GPU的利用率。关于其他的一些优化方法,大家可以再参考TensorRT 用户手册进行详细的了解。

TensorRT的部署流程可以分成两部分。

首先是向TensorRT 导入训练好的网络模型、参数,输入一组测试集数据,这个数据集不用太大。在TensorRT 启动之后,会根据我们刚才所说的几大优化方式依次对网络模型进行优化,对于规模不大的网络,这个过程可能需要耗费几分钟的时间。在执行完成之后,它会输出一个优化策略,如上图所示的Plan。这时我们可以选择将这个优化策略以序列化的方式导出到磁盘文件进行存储,这样,这个策略文件就可以被复制以及移植到不同的设备端来使用。

接下来我们就可以拿着这个优化策略文件连通TensorRT 的引擎,一起部署到线上服务端。

我们在上面这幅图里给出了两组TensorRT 3.0 Performance的benchmark,左侧的benchmark是对一个CNN网络ResNet-50的测试结果,大家可以先看第二和第四个柱状图,这里面是比较了使用V100 加TensorFlow,也就是不用TensorRT做优化 ,然后直接做Inference,此时的吞吐量是305,在使用TensorRT 加速以后,吞吐量提升到5707,大概是20倍的性能提升。另外,大家再看第三和第四个柱状图,可以看到同样使用FP16的计算精度,Tesla V100比Tesla P100提升了大概3倍多的性能,这主要得益于Tensor Core的加速。

右边的benchmark是对一个RNN网络OpenNMT的测试结果。大家可以先来看二和四这两个柱状图,使用Tesla V100+Torch直接做Inference,这时候吞吐量是26.16,我们用TensorRT 加速以后,吞吐量直接提升到了541,加速比可以达到20倍以上。我们再来看第三和第四,比较一下Tesla P100和Tesla V100的加速,可以看出Tesla V100大概比Tesla P100加速比在1.5倍左右,这主要是因为我们在该网络模型里使用FP32进行Inference,无法使用Tensor Core进行加速,实际上TensorRT 目前对RNN网络只能支持FP32的精度,还不能支持到FP16。

原文发布于微信公众号 - 吉浦迅科技(gpusolution)

原文发表时间:2018-01-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ATYUN订阅号

机器学习项目:使用Keras和tfjs构建血细胞分类模型

人工智能的应用非常广泛,尤其是在医疗领域。先进的人工智能工具可以帮助医生和实验室技术人员更准确地诊断疾病。例如,尼日利亚的一位医生可以使用这个工具从他根本不了解...

2453
来自专栏人工智能头条

谷歌 TensorFlow 物理检测 API,目前最好的物体识别方案?

1522
来自专栏数据小魔方

think-cell chart系列9——折线图

今天跟大家分享think-cell chart系列的第9篇——折线图。 折线图是平时用的频率比较高的图表类型的了,下面教大家怎么在think-cell char...

4797
来自专栏机器之心

资源 | 英语不行?你可以试试TensorFlow官方中文版教程

TensorFlow 最近提供了官方中文版教程(Tutorials)和中文版指南(Guide)。其中教程主要介绍了 TensorFlow 的基本概念,以及各种基...

842
来自专栏AI研习社

想要训练专属人脸识别模型?先掌握构建人脸数据集的三种绝招

雷锋网 AI 研习社按,随着深度学习的发展,很多技术已经落地,成为我们每天都能接触到的产品,人脸识别就是其中之一。人脸识别的应用范围很广,涉及上下班打卡、门禁、...

1772
来自专栏AI科技大本营的专栏

用好这几款炼丹利器,调参从此得心应手

来源:PaperWeekly ▌01. Live CV 实现显示结果的CV开发环境 Live CV 是一个用于实现显示结果的计算机视觉算法开发环境,基于 Qt...

4986
来自专栏磐创AI技术团队的专栏

TensorFlow + Keras 实战 YOLO v3 目标检测图文并茂教程(文末有惊喜)

2633
来自专栏人工智能

TensorFlow核心使用要点

正文之前,小梦先来说说什么是TensorFlow。TensorFlow是谷歌研发的第二代人工智能学习系统,可被用于语音识别或图像识别等多项机器深度学 习领域。T...

2327
来自专栏AI研习社

可应用的目标检测代码来了,一秒锁定你

计算机视觉是人工智能的一个重要领域。计算机视觉是一门关于计算机和软件系统的科学,可以让计算机对图像及场景进行识别和理解。计算机视觉还包括图像识别、目标检测、图像...

901
来自专栏CVer

开源 | 深度学习网络模型(model)可视化开源软件Netron

前两天,Amusi分享了一篇 经典卷积神经网络(CNN)结构可视化工具,该工具可用于可视化各种经典的卷积神经网络结构。如AlexNet、VGG-16、ResNe...

6393

扫码关注云+社区

领取腾讯云代金券