TensorRt推理部署优化方案及流程概述
TensorRt推理部署优化方案及流程概述
1.参考资料
先放上参考资料,以表感谢。
- TensorRT-Installation-Guide.pdf
- TensorRT-Developer-Guide.pdf (PG-08540-001_v8.4.1 | June 2022)
- TensorRT-Sample-Support-Guide.pdf
- CSDN:扫地的小何尚
- github:TensorRT
- https://pytorch.org/tutorials/
2.流程概述
1.首先,进行模型转换。目前掌握的模型转换方案有两种,分别是pytorch–>onnx–>engine方案和pytorch–>wts–>engine方案。
2.使用转换得到的TensorRT模型进行推理
3.TensorRT推理结果的decode和后处理
3.pytorch–>onnx–>engine方案
3.1 pytorch–>onnx转换
onnx是一种比较通用的模型表示形式,它不仅可以保存模型的网络结构,还可以保存模型的参数,因此将模型从pytorch导出到onnx后,不仅不需要pytorch权重文件(即:pth文件)了,而且使用pytorch定义的网络结构也不需要了。因为在导出时这些信息都已经保存到了onnx文件中去了。
这一步使用pytorch框架中的接口完成,一般是在将图像输入网络之前调用torch.onnx.export
接口,因为这样代码改动最少,更容易的找到网络的输入张量的维度和加载好的pytorch模型。
代码实现细节参考Pytorch官方教程链接。
3.2 onnx–>engine转换
在进行如下操作前需要安装好TensorRT,可以参考官方教程:TensorRT-Installation-Guide.pdf.
不同于pytorch–>onnx,而onnx–>engine转换具有多种实现方式。大概有三种方法:
1.使用TensorRT python API
2.使用TensorRT C++ API
3.使用TensorRT trtexec 可执行文件
python API和C++ API的流程是一样的,但是C++ API需要编写CMakeLists.txt或者Makefile文件,代码复杂度也更高一些,因此更建议使用python API的方式。python API的代码实现请参考TensorRT-Developer-Guide.pdf 4.1.2节。
trtexec适用于使用.tar.gz
压缩文件的方法安装TensorRT时,解压后在Samples中有一个trtexec
的项目,编译之后便可以在bin
目录下生成一个trtexec
的可执行文件。trtexec
的使用可以参考官方文档TensorRT-Developer-Guide.pdf的附录部分,或者CSDN该中文资料链接。
3.3 engine推理
使用转换的engine模型进行推理,这里特别说明本文推理指的是网络的forward过程。
首先从文件中读取engine文件,进行反序列化,生成engine模型,然后在engine在基础上构造一个context,后面的推理使用的便是此context。
使用engine进行推理的具体细节可以参考:TensorRT-Developer-Guide.pdf. C++ API 3.2和3.4节, Python API 4.2和4.4节。
本文所讲的推理,输出是网络forward的原始结果,以我的一个车道线检测的算法为例,输出的两个数组如下图所示:
该网络输出两个数组是因为该网络有两个输出头,分别对应是车道线关键点和车道线属性。
3.4 推理结果decode
如上节所示,TensorRT推理出来的结果无法直接使用,还需要一个decode的过程,一般是按照算法的原理或仿照Pytorch框架的推理逻辑,将TensorRT推理得到的数组decode为合适的张量或多维数组。以上面的算法为例,第一个25728维的数组需要解码为(1, 201, 32, 4)的一个张量或多维数组,第二个32位的数组需要解码为(1, 2, 16)的张量或多维数组。
至此,TensorRT的推理结果在形式上与Pytorch的推理结果可以实现对应了,在这一步可以对比两者的结果大致判断TensorRT的推理是否准确。然后,还需要后处理的一些操作,这部分与实际的功能需求而定,无论是TensorRT还是Pytorch,它们后处理的算法逻辑基本一致,只不过是代码实现上的差别。相比之下TensorRT的后处理要更加注重代码的时间复杂度。
4.pytorch–>wts–>engine方案
4.1 yolov5:pytorch–>wts
这一步转换只是将Pytorch的模型和参数读取并按照固定的格式写入到wts文件中,参考tensorrtx的gen_wts.py脚本即可。
4.2 wts–>engine
1.使用TensorRT重新实现与Pytorch模型一样的网络结构,使用TensorRT定义网络并导入权重的代码实现可以参考TensorRT-Developer-Guide.pdf 6.4节。
2.构建后网络后,需要生成engine,这一步转换可以是在线的也可以是离线完成的。如果是在线的,则每次程序运行时,都需要进行一次转换。如果是离线的可以将生成的engine保存下来,程序以后每次运行时仅需从engine文件反序列化即可。该方案的其余工作与pytorch–>onnx–>engine方案基本相同,不再重复。
TensorRt推理部署优化方案及流程概述相关推荐
- YOLO-v5训练自己的数据+TensorRT推理部署(2)
YOLO-v5训练自己的数据+TensorRT推理部署(2) 代码下载地址:下载地址 YOLO v5转TensorRT模型并调用 0.pt模型转wts模型 python3 gen_wts.py # 注 ...
- YOLO-v5训练自己的数据+TensorRT推理部署(1)
YOLO-v5训练自己的数据+TensorRT推理部署(1) 代码下载地址:下载地址 YOLO v5在医疗领域中消化内镜目标检测的应用 YOLO v5训练自己数据集详细教程
- 工程之道,解读业界最佳的深度学习推理性能优化方案
本文转载自旷视研究院 MegEngine「训练推理一体化」的独特范式,通过静态图优化保证模型精度与训练时一致,无缝导入推理侧,再借助工业验证的高效卷积优化技术,打造深度学习推理侧极致加速方案,实现当前 ...
- 应用部署优化方案分享
转载本文需注明出处:微信公众号EAWorld,违者必究. 引言: 在企业级应用实施和运营过程中,为了解决企业中部分业务场景访问量大.并发量高的问题,就需要对系统架构及应用参数做出优化和调整,如架构优化 ...
- ubuntu-desktop20.04 yolox+tensorrt yolov7+tensorrt推理部署
Ubuntu20.04镜像下载 使用 UltraISO 拷入镜像 vi /etc/apt/apt.conf.d/10periodic vi /etc/apt/apt.conf.d/20auto-upg ...
- 百度关键字SEO排名优化方案与流程
影响百度SEO自然排名算法的因素有特别多,像点击率访问率,访问深度以及关键词布局等一系列因素都会影响百度 SEO自然排名,那么有哪些方法可以优化排名呢?下面营销大咖喆哥就来介绍一些优化SEO排名的技巧 ...
- 目标检测推理部署:优化和部署
目标检测推理部署:优化和部署 本文简要介绍了端对端推理管道的优化技术和部署. 将在以下三个方面研究推理优化过程:硬件优化,软件优化和模型优化.推理优化的关键指标如下: • 吞吐量(未推理图像/秒) • ...
- tensorrt轻松部署高性能dnn推理_NVIDIA TensorRT高性能深度学习推理
NVIDIA TensorRT高性能深度学习推理 NVIDIA TensorRT™ 是用于高性能深度学习推理的 SDK.此 SDK 包含深度学习推理优化器和运行时环境,可为深度学习推理应用提供低延迟和 ...
- TensorRT优化方案图例
TensorRT优化方案图例 图 12. TensorRT 循环由循环边界层设置.数据流只能通过下方式离开循环环输出层. 唯一允许的后边缘是第二个输入递归层. 图 13. 一个 if 条件构造抽象模型 ...
最新文章
- Rocksdb Ribbon Filter : 结合 XOR-filter 以及 高斯消元算法 实现的 高效filter
- 每天一个linux命令(12):more命令
- 提示语_交通安全提示语
- CMS - tabBar
- 关于Unity中Shader的内置值
- 程序员如何用糖果实现盈利 - [别人家的程序员01]
- 每次新建Android项目都报样式找不到的错误?
- html中文本框冒号对齐,html5 冒号分隔符对齐的实现,
- [HNOI2005]狡猾的商人 带权并查集
- 【经典回顾】YouTube 深度学习推荐系统的十大工程问题(附论文下载链接)
- 【Vegas原创】导入结构一致表的SQL语句
- Android dalvik GC相关的属性详解
- 实战:详解Reaact+AntD+Node后台管理系统
- 深入医疗PACS影像融合存储解决方案
- Android 4.4 kitkat以上及以下根据uri获取路径的方法
- 【C语言编程】简单密码
- 怎么做视频剪辑,教你几招
- 飞书开发API的调用
- html5炫酷作品源代码,8个超炫酷的HTML5动画演示及源码
- 【matlab】随机函数生成随机排列:rand,randn,randi,randperm,randint