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)了
领取专属 10元无门槛券
私享最新 技术干货