使用NVIDIA 免费工具TENSORRT 加速推理实践–YOLOV3目标检测
tensorRT5.0之前主要支持计算机视觉类的模型,现在已经升级到TensorRT7.0 ,对语音、语义、自然语言处理等方向的模型也能提供很好的支持。
Nvidia TensorRT 是一种**高性能深度学习推理优化器和运行时加速库 ** ,可为深度学习推理应用程序提供低延迟和高吞吐量。应用场景主要是由于在嵌入式或移动端的GPU性能比较紧张,比如Nano,又希望能够保证快速的推理计算能力。
介绍YoloV3 在没有使用TensorRT和使用TensorRT的对比效果,这里使用的硬件是Tx1,设置batchsize=1,如果没有使用TensorRT 的情况下基本帧率是1FPS,在使用TensorRT的情况下是4.6FPS,提升效果在4倍以上。当batchsize设置的更大的话,tensorRT加速效果更好,作者尝试最多加速到14FPS。
使用传统框架和使用TensorRT 显存占比相差很大。这里PPT中提到了TensorRT 内部显存共用机制,需要再查一下。
- 低精度的数据类型。通过使用FP16或者Int8 数据类型,就可以给数据计算以及存储单元的占比上减少很大的压力。在计算能力较弱的嵌入式或者移动端上,存储单元是非常重要的。因为GPU计算是协处理器,它会把数据从CPU内存到GPU显存之间进行传输。可以减少这部分存储单元的占比。
- 动态的张量内存管理。
- 多流的执行。
- Kernel 自动调整。
- 网络层的融合。
这页介绍TensorRT 的使用流程,首先由于TensorRT发展比较快,在自己电脑上安装版本经常需要更新,讲师的建议是能用docker尽量使用docker。
- 创建builder ,builder 构造器包含了TensorRT 后面所有的tui
- 创建network , 保存训练好的神经网络。其实TensorRT 的输入是训练好的模型,(支持所有的框架下的模型),输出是可执行的推理引擎。
- 创建Parser,解析network。
- 绑定输入、输出以及自定义组件。
- 系列化或者反序列化。把前面得到的引擎序列化后,以后再次使用就直接反序列化,不需要再重新执行前面四步骤。
- 传输计算数据。从host侧传输到device侧。
- 执行计算。
- 传输计算结果。从device侧到host侧。
讲师推荐的这个版本号不是最新代码,属于适合学习的一个版本代码。
https://github.com/NVIDIA-AI-IOT/deepstream_reference_apps/tree/7f27f22d674c64f4859dd1da896a43e35b0b9063
工程中主要包括两部分:一部分是创建推理引擎,一部分是执行推理。
GPU是协处理器,是异步计算,在CPU计算不知道GPU有没有计算完。设置工作空间是避免资源被释放掉。
设置数据类型,可以是INT8,FP16,FP32
序列化,把GPU优化后的引擎给写成一个文档,写到我们的硬盘上。 序列化上有个潜在的机制,TensorRT在同一个型号的设备上是通用的,但是在不同架构上是不通用的。比如在服务器上优化后序列化的引擎,直接拿过来在其他设备上比如Nano、TX2直接反序列化是不行的。
对于如果模型中在优化中存在TensorRT不支持的网络层,需要用plugin的方式去实现。主要有两个部分,一个是PluginFactory,一个是MyPlugin。
PluginFactory 是一个接口。
代码讲解
三种大的方式去创建引擎:
- 通过解析器来解析已有的网络。比如CaffeParser,OnnxParser,UFFParser。在官方document 有对应样例说明。
2.用已经集成TensorRT的框架,比如TensorFlow。 - 基于TensorRT 自己去搭建网络模型。优点是灵活,缺点是需要有一定的TensorRT基础和实现能力。
trt-yolo-app.cpp main函数 --> yolo.cpp 创建yoloengine --> pluginfactory.cpp 如何定义plugin --> yoloplugin-lib.cpp 操作plugin具体运算–> yolov3.cpp 执行推理
DeepStream
TLT
TLT 可以直接提供出一个中间文件,这样TensorRT可以反序列化为推理引擎。(只能通过TLT 得到的文件,才能反序列化吗?)
资源
https://developer.nvidia-china.com/
https://www.nvidia.cn/content/dam/en-zz/zh_cn/assets/webinars/2020/jan08/1578537190017633564.mp4
https://www.nvidia.cn/developer/online-training/dli-community-training/
视频链接:
https://www.bilibili.com/video/av91148721/
PPT 地址
https://pan.baidu.com/s/1KVmYJoTojfX7BcJlhuSHbA
提取码:8x5w
FAQ
图像的预处理,包括拉流、编解码,推荐使用deepstream 。
视频回放放在优酷上。
网络剪枝推荐使用TLT