初步了解TensorRT

1. 什么是TensorRT?

众所周知神经网络在CV等领域有着非常出众的表现,但是现实部署往往面临网络模型inference时间过大等问题,各类加速尤其是针对inference阶段的加速手段被提出。TensorRT是NVIDIA针对神经网络inference阶段提供的加速器。

2. TensorRT 做了哪些优化?

相对于训练过程,网络推断时模型结构及参数都已经固定,batchsize一般较小,对于精度的要求相较于训练过程也较低,这就给了很大的优化空间。具体到TensorRT,主要在一下几个方面进行了优化:

2.1. 合并某些层

有时制约计算速度的并不仅仅是计算量,而是网络对于内存的读写花费太大,TensorRT中将多个层的操作合并为同一个层,这样就可以一定程度的减少kernel launches和内存读写。例如conv和relu等操作一次做完。

另外,对于相同输入及相同filtersize的层会合并为同一层,利用preallocating buffers等消除了concat层

2.2. 支持FP16 或者INT8的数据类型

训练时由于梯度等对于计算精度要求较高,但是inference阶段可以利用精度较低的数据类型加速运算,降低模型的大小

2.3. Kernel Auto-Tuning

TensorRT针对不同的超参数有一写算法层面的优化,比如会根据卷积核的大小、输入大小等超参数确定使用哪种算法进行卷积运算

2.4. Dynamic Tensor Memory

TensorRT经过优化减少内存开销,提高内存的reuse

2.5. 多支并行运算

对于同一输入的多个分支可以进行并行运算

下图是优化的一个栗子:

更多请细节就要浏览更专业的[官方文档](https://developer.nvidia.com/tensorrt)了

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181021G1GD5400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券