一、简介
1.官网
https://docs.nvidia.com/deeplearning/sdk/tensorrt-install-guide/index.html
NVIDIA TensorRT是一个C ++库,可以进行NVIDIA GPU的高性能推断。
TensorRT专注于在GPU上快速有效地对网络进行推理,并生成高度优化的运行时引擎。
TensorRT通过C ++和Python提供API,可通过 API、解析器加载预定义模型。
TensorRT提供了一个runtime
,可在kepler一代以上的所有NVIDIA GPU上执行。
2.网上博客
《高性能深度学习支持引擎实战——TensorRT》:https://yq.aliyun.com/articles/580307
TensorRT项目立项的时候名字叫做GPU Inference Engine(简称GIE),Tensor表示数据流动以张量的形式。
所谓张量大家可以理解为更加复杂的高维数组,一般一维数组叫做Vector(向量),二维数组叫做Matrix(矩阵),再高纬度的就叫Tensor(张量),Matrix其实是二维的Tensor。
在TensoRT中,所有的数据都被组成最高四维的数组,如果对应到CNN中其实就是{N, C, H, W},N表示batch size,即多少张图片或者多少个推断(Inference);C表示channel数目;H和W表示图像或feature maps的高度和宽度。
RT表示的是Runtime。
2.1 深度学习分为训练和部署两部分。
训练部分首先也是最重要的是构建网络结构,准备数据集,使用各种框架进行训练,训练要包含validation(验证)和test(测试)的过程。在线下有大规模的集群开始对数据或模型进行更新,这样的训练需要消耗大量的GPU,相对而言一般会给一个比较大的batchsize,因为它的实时性要求相对较低,一般训练模型给的是128,甚至有些极端的1024,大的batch的好处是可以充分的利用GPU设备。
但是到推断(Inference)的时候就是不同的概念了,推断(Inference)的时候只需要做一个前向计算,将输入通过神经网络得出预测的结果。而推断(Inference)的实际部署有多种可能,可能部署在Data Center(云端数据中心),还可能部署在Embeded嵌入端,对实时性要求很高。
训练(Training)这个阶段如果模型比较慢,其实是一个砸钱可以解决的问题,我们可以用更大的集群、更多的机器,做更大的数据并行甚至是模型并行来训练它,重要的是成本的投入。
而部署端不只是成本的问题,如果方法不得当,即使使用目前最先进的GPU,也无法满足推断(Inference)的实时性要求。因为模型如果做得不好,没有做优化,可能需要二三百毫秒才能做完一次推(Inference),再加上来回的网络传输,用户可能一秒后才能得到结果。在语音识别的场景之下,用户可以等待;但是在驾驶的场景之下,可能会有性命之庾。
在部署阶段,latency(交互延迟)是非常重要的点,而TensorRT是专门针对部署端进行优化的,目前TensorRT支持大部分主流的深度学习应用,当然最擅长的是CNN(卷积神经网络)领域,但是的TensorRT 3.0也是有RNN的API,也就是说我们可以在里面做RNN的推断(Inference)。
总结一下推断(Inference)和训练(Training)的不同:
- 1.推断(Inference)的网络权值已经固定下来,无后向传播过程,因此可以
1)模型固定,可以对计算图进行优化
2)输入输出大小固定,可以做memory优化 - 2.推断(Inference)的batch size要小很多。
- 3.推断(Inference)可以使用低精度的技术,研究结果表明没有特别大的精度损失,尤其对CNN。