写了一半不想写了,看这个 https://github.com/ytusdc/TensorRT-NMS-YOLO, utils/export.py 吧
先来一段摘抄自网上的TensorRT介绍:
TensorRT是英伟达针对自家平台做的加速包,TensorRT主要做了这么两件事情,来提升模型的运行速度。
- TensorRT支持INT8和FP16的计算。深度学习网络在训练时,通常使用 32 位或 16 位数据。TensorRT则在网络的推理时选用不这么高的精度,达到加速推断的目的。
- TensorRT对于网络结构进行了重构,把一些能够合并的运算合并在了一起,针对GPU的特性做了优化。现在大多数深度学习框架是没有针对GPU做过性能优化的,而英伟达,GPU的生产者和搬运工,自然就推出了针对自己GPU的加速工具TensorRT。一个深度学习模型,在没有优化的情况下,比如一个卷积层、一个偏置层和一个reload层,这三层是需要调用三次cuDNN对应的API,但实际上这三层的实现完全是可以合并到一起的,TensorRT会对一些可以合并网络进行合并。我们通过一个典型的inception block来看一看这样的合并运算。
TensorRT用来做模型的推理优化,也是有Python接口的,实际使用测试下来,python接口的模型推理速度C++基本差不多的。这里较为详细的记录TensorRT python接口从环境的配置到模型的转换,再到推理过程,还有模型的INT8量化,有时间的话也一并总结记录了,笔者使用的版本是TensorRT7.0版本,此版本支持模型动态尺寸的前向推理,下面也会分为静态推理和动态推理来介绍。
3.3.1 builder介绍
builder功能之一是搜索cuda内核目录,找到最快的cuda以求获得最快的实现,因此有必要使用相同的GPU进行构建(相同的操作,算子进行融合,减少IO操作),engine就是在此基础上运行的,builder还可以控制网络以什么精度运行(FP32,FP16,INT8),还有两个特别重要的属性是最大批处理大小和最大工作空间大小。
安装完 tensorRT后, pip安装pycuda
pip install pycuda
TensorRT 模型转换
简单来说就是用tensorrt的语言来构建模型,如果自己构建的话,主要是灵活但是工作量so large,一般还是用tensorrt parse