TensorRT

一、简介

TensorRT 是一个深度学习模型线上部署的优化引擎,即 GPU Inference Engine。Tensor 代表张量,即数据流动以张量的方式,如4维张量 [N, C, H, W]。RT表示 runtime。

transformer和tensorflow有什么区别 tensorflow tensorrt对比_pytorch


一般情况如上图,线下构建网络结构,训练好模型,然后在实际业务中线上部署到对实时性要求较高(latency敏感)的场景,如一般的嵌入式设备,云端等等。实际应用中,可能同时处理几十路摄像头。TensorRT擅长CNN,3.0版本有RNN的API。

二、特性

2.1 特性列举

  1. 比一些深度学习框架,有更好的优化和及时性(虽然降低了使用的灵活性,但是有了更好的性能)
  2. 支持 custom layer,即用户自定义的神经网络层
  3. 利用低精度加速推理 inference,如FP16/INT8

2.2 特性1解释

在inference的阶段神经网络没有了后向传播,模型是固定的了,所以可使得计算图有更好的优化 (graph optimazation)。同时输入输出大小固定了,简化了内存管理 (memory management)。为了实时性,可改用更小的batch size,以减少latency(但是同时GPU的利用率也降低了)。这些方面都可以在TensorRT中得到改进。

transformer和tensorflow有什么区别 tensorflow tensorrt对比_nvidia_02

transformer和tensorflow有什么区别 tensorflow tensorrt对比_神经网络_03

2.3 特性2解释

transformer和tensorflow有什么区别 tensorflow tensorrt对比_神经网络_04


transformer和tensorflow有什么区别 tensorflow tensorrt对比_caffe_05


如果来自其他深度学习框架的模型中,有个别网络层比较新,TensorRT中暂不支持,用户可以通过TensorRT提供的API自定义自己的网络层。(具体可参见本文第四部分“工作流程”)

2.4 特性3解释

低精度技术 (high speed reduced precision)。在training阶段,梯度的更新往往是很微小的,需要相对较高的精度,一般要用到FP32以上。在inference的时候,精度要求没有那么高,一般F16(半精度)就可以,甚至可以用INT8(8位整型),精度影响不会很大。同时低精度的模型占用空间更小了,有利于部署在嵌入式模型里面。

英伟达显卡对精度的支持情况:

  • FP16 (Pascal P100 and V100 (tensor core))
  • INT8 (P4/P40)

其中V100采用 NVIDIA Volta 架构,相较于前代Pascal架构效率提升50%,拥有 640 个 Tensor Cores,tensor core的引入可以较高能效大幅增加浮点计算吞吐量。其中P4是专门线上做inference的一张小卡,功耗低。其他的还有T4显卡(含有Turing Tensor Cores,支持INT8/INT4精度,更快的inference)。

transformer和tensorflow有什么区别 tensorflow tensorrt对比_pytorch_06


上面是各显卡低精度与单精度FLOPS的比较。FLOPS (Floating-point Operations per Second),每秒浮点运算次数,亦称每秒峰值速度。TFLOPS (teraFLOPS) ,1万亿 (10^12) 次的浮点运算每秒。

三、精度转换

精度的降低可以大幅度加快神经网络模型的推理速度。

transformer和tensorflow有什么区别 tensorflow tensorrt对比_nvidia_07


transformer和tensorflow有什么区别 tensorflow tensorrt对比_nvidia_08


典型的精度转换流程:

transformer和tensorflow有什么区别 tensorflow tensorrt对比_nvidia_09


TensorRT中,单精度(FP32)模型到半精度(FP16)模型的转换如下:

transformer和tensorflow有什么区别 tensorflow tensorrt对比_深度学习_10


transformer和tensorflow有什么区别 tensorflow tensorrt对比_深度学习_11


transformer和tensorflow有什么区别 tensorflow tensorrt对比_深度学习_12


TensorRT中,FP32模型到INT8模型的转换如下:

transformer和tensorflow有什么区别 tensorflow tensorrt对比_深度学习_13


transformer和tensorflow有什么区别 tensorflow tensorrt对比_神经网络_14


transformer和tensorflow有什么区别 tensorflow tensorrt对比_深度学习_15

四、工作流程

TensorRT的工作流程主要分为模型解析、模型转换优化、模型执行三个步骤(如下图)。

transformer和tensorflow有什么区别 tensorflow tensorrt对比_nvidia_16


更加细化的流程如下:

transformer和tensorflow有什么区别 tensorflow tensorrt对比_神经网络_17


比如传入一个caffe模型,解析(Tensor中的Parser)就是得到模型里面有哪些网络层,有怎样的连接关系。然后对应得再转换成TensorRT的。可能有个别的比较新的网络层TensorRT中没有支持,用户可以通过API接口自定义layer,比如构建某种特殊卷积层。这个自定义API支持C++和Python语言。目前支持的layer类型

transformer和tensorflow有什么区别 tensorflow tensorrt对比_pytorch_18


transformer和tensorflow有什么区别 tensorflow tensorrt对比_nvidia_19


Parser现在支持

  1. caffe
  2. uff(tensorflow可转换的一种模型文件结构)
  3. ONNX (Open Neural Network Exchange),开放神经网络交换,对应Pytorch,caffe2等。

如果这些框架都不支持,还可以用TensorRT提供的API的,一层一层自己构建相应的神经网络。

从Caffe导入神经网络的示例代码

transformer和tensorflow有什么区别 tensorflow tensorrt对比_pytorch_20


从definition APIs导入神经网络的示例代码

transformer和tensorflow有什么区别 tensorflow tensorrt对比_nvidia_21


模型优化中,优化好的engine(上图中的PLAN),可以进行保存,可以序列化(serialization) 到一个buffer或者file里面。读的时候,再deserialization。具体优化策略看本文后面。

等到执行的时候,先创建一个context分配一些预先的资源,然后再执行新的优化好的模型。

示例代码:

transformer和tensorflow有什么区别 tensorflow tensorrt对比_nvidia_22

4.1 自定义层

transformer和tensorflow有什么区别 tensorflow tensorrt对比_神经网络_23


transformer和tensorflow有什么区别 tensorflow tensorrt对比_nvidia_24


transformer和tensorflow有什么区别 tensorflow tensorrt对比_深度学习_25


transformer和tensorflow有什么区别 tensorflow tensorrt对比_pytorch_26


transformer和tensorflow有什么区别 tensorflow tensorrt对比_nvidia_27


transformer和tensorflow有什么区别 tensorflow tensorrt对比_nvidia_28


transformer和tensorflow有什么区别 tensorflow tensorrt对比_nvidia_29


transformer和tensorflow有什么区别 tensorflow tensorrt对比_神经网络_30

4.2 优化策略

transformer和tensorflow有什么区别 tensorflow tensorrt对比_神经网络_31


卷积、添加bias和激活函数(如,ReLu)这些操作是可以合并到一起的。多路径网络层相同部分可以合并。concat层是可以消除的。并行的卷积计算可以合并到一起。还有就是针对特定的平台,自动选择最好的layers和算法。同时支持可扩展的multi-stream输入的并行处理。如下图Inception结构在TensorRT中的优化方式

transformer和tensorflow有什么区别 tensorflow tensorrt对比_深度学习_32


transformer和tensorflow有什么区别 tensorflow tensorrt对比_神经网络_33

transformer和tensorflow有什么区别 tensorflow tensorrt对比_pytorch_34


transformer和tensorflow有什么区别 tensorflow tensorrt对比_神经网络_35

transformer和tensorflow有什么区别 tensorflow tensorrt对比_深度学习_36


具体的比如,YOLOv2的模型优化策略

transformer和tensorflow有什么区别 tensorflow tensorrt对比_深度学习_37


transformer和tensorflow有什么区别 tensorflow tensorrt对比_caffe_38


transformer和tensorflow有什么区别 tensorflow tensorrt对比_神经网络_39