前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TensorRT实战

TensorRT实战

原创
作者头像
shionyu
修改2019-09-03 19:55:09
2.1K0
修改2019-09-03 19:55:09
举报
文章被收录于专栏:后台技术后台技术

1、TensorRT是什么

TensorRT目前基于gcc4.8而写成,其独立于任何深度学习框架。对于caffe而言,TensorRT是把caffe那一套东西转化后独立运行,能够解析caffe模型的相关工具叫做 NvCaffeParser,它根据prototxt文件和caffemodel权值,转化为支持半精度的新的模型。

主要作用:模型的前向推理加速、降低模型的显存空间

目前TensorRT支持大部分主流的深度学习应用,效果最好的目前是CNN(卷积神经网络)领域

2、加速效果图

来源:https://blog.csdn.net/Jesse_Mx/article/details/56022967
来源:https://blog.csdn.net/Jesse_Mx/article/details/56022967

3、加速原理

1) 支持INT8和FP16的计算,通过在减少计算量和保持精度之间达到一个理想的trade-off,达到加速推断的目的。比如现在通常用的是FP32的数据类型,如果在做HPC的时候,就可能都会用double类型的float,我们为什么要double类型?因为精度需要非常大的动态范围。 但是深度学习在做训练的时候可能并不需要那么大的动态范围,它非常小,可能连FP32都用不了,这个时候就可以用一个更小的动态数据类型。 现在TensorRT提出一个FP16半精度的数据类型,还有int8以及最新出的int4的一些数据类型。用这个工具可以帮助把一个较大范围的数据映射到一个较小的范围之内。这样的话在做计算的时候,转换数据的速度非常快,因为数据类型的原因,它所占用的资源也非常少,这个时候的计算速度就会变得很快。

2) 对于网络结构进行了重构和优化,主要体现在一下几个方面。

a、tensorRT通过解析网络模型将网络中无用的输出层消除以减小计算。

b、对于网络结构的垂直整合,即将目前主流神经网络的conv、BN、Relu三个层融合为了一个层

c、对于网络的水平组合,水平组合是指将输入为相同张量和执行相同操作的层融合一起

d、对于concat层,将contact层的输入直接送入下面的操作中,不用单独进行concat后在输入计算,相当于减少了一次传输吞吐。

3) 内核调用优化,内核调用跟GPU底层相关,NVIDIA所有的工具基本上都是基于CUDA这个生态所建立,CUDA里核心的内容是两个方面。

a、一个方面是内存中各种显存的调用,多流的执行。并行计算最有一个难点是数据传输之间那部分很难消掉,硬件卡住的部分无法并行,而CUDA里边多流的执行把这些数据在传输的过程中进行计算,这样就把传输的部分给隐藏了。

b、另外一个方面是怎么调用CUDA核,怎么分配,每个block里边分配多少个线程,每个grid里边有多少个block。这些内容都对GPU要求或者对CUDA的计算功底要求比较高,需要花更多时间,也需要对硬件底层更了解。而TensorRT里边调用了一些方法,以一个最合理的方式去调用、操作这些数据。

4、图示完整的流程

层合并的图示,主要就是对层进行合并。减少层的操作。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
GPU 云服务器
GPU 云服务器(Cloud GPU Service,GPU)是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于深度学习训练、科学计算、图形图像处理、视频编解码等场景。腾讯云随时提供触手可得的算力,有效缓解您的计算压力,提升业务效率与竞争力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档