onnx tensorRT insightface 实践

一、环境问题

1、查看自己的电脑版本

cuda 版本
cat /usr/local/cuda/version.txt

cudnn 版本
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
不显示 运行如下命令
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

CUDA Version 11.0.207

#define CUDNN_MAJOR 8
#define CUDNN_MINOR 0
#define CUDNN_PATCHLEVEL 5
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)
#endif /* CUDNN_VERSION_H */

2、安装TensorRT!

安装TensorRT的方式有很多,官方提供了多种方式:

You can choose between the following installation options when installing TensorRT; Debian or RPM packages, a pip wheel file, a tar file, or a zip file.

这些安装包都可以从官方直接下载,从 https://developer.nvidia.com/nvidia-tensorrt-download 进入下载即可,需要注意这里我们要注册会员并且登录才可以下载。老潘一直使用的方式是下载tar包,下载好后解压即可,只要我们的环境符合要求就可以直接运行,类似于绿色免安装。

在这里插入图片描述 电脑cudnn 8.0 CUDA 11.0 , 选择TensorRT8
https://developer.nvidia.com/nvidia-tensorrt-8x-download
在这里插入图片描述

例如下载TensorRT-7.2.3.4.Ubuntu-18.04.x86_64-gnu.cuda-11.1.cudnn8.1.tar.gz,下载好后,tar -zxvf解压即可。

解压之后我们需要添加环境变量,以便让我们的程序能够找到TensorRT的libs。

vim ~/.bashrc
export LD_LIBRARY_PATH=/path/to/TensorRT-8.0.0.3/lib:$LD_LIBRARY_PATH
export LIBRARY_PATH=/path/to/TensorRT-8.0.0.3/lib::$LIBRARY_PATH

source ~/.bashrc

二、相关知识参考

TensorRT详细入门指北,如果你还不了解TensorRT,过来看看吧

bili 视频学习 onnx tensorRT 流程

3、onnx tensorrt 使用

我们不需要克隆TensorRT Backend For ONNX,之前下载好的TensorRT包中已经有这个工具的可执行文件了,官方已经替我们编译好了,只要我们的环境符合要求,是直接可以用的。

1、TensorRT-8.0.0.3/bin/ 中直接使用trtexec这个工具, 这个工具是 TensorRT-8.0.0.3/samples/trtexec/ 编译生成的, trtexec/README.md


./trtexec --help  查看输入参数信息
运行
./trtexec --verbose --onnx=resnet50.onnx --saveEngine=resnet50_fp16.trt --fp16
./trtexec --verbose --onnx=resnet50.onnx --saveEngine=resnet50.trt
动态输入命令
./trtexec --verbose --onnx=model.onnx --saveEngine=resnet50_dynamic_shape.trt --optShapes=input:16x3x244x244 --minShapes=input:1x3x244x244 --maxShapes=input:32x3x244x244 --shapes=input:5x3x244x244

2、如果报错了,报错会有很多中情况

1、一般是 onnx 的问题, 先改 onnx 模型,
在这里插入图片描述

	1、onnx 版本
	ValidationError: Your model ir_version is higher than the checker's  (从1.4.1 更新到最新2021/6/18是1.9.0)
	pip3 install --upgrade onnx

	2、simply 简化模型
    from onnxsim import simplify  #  pip install onnx-simplifier
    model, check = simplify(model)
    assert check, "Simplified ONNX model could not be validated"
	onnx.save(model, output)
	
	3、opset_version=12 版本 使用最高的
	
	4、自定义 onnx 层  onnx 官方有方法

2、 或者分析查找原因 tensorRT端的插件 用 GraphSurgeon 插件 修改 onnx 节点,再保存。

ONNX GraphSurgeon 可以修改我们导出的ONNX模型,增加或者剪掉某些节点,修改名字或者维度等等
cd TensorRT-8.0.0.3/onnx_graphsurgeon
pip3 install ./onnx_graphsurgeon-0.2.6-py2.py3-none-any.whl

在这里插入图片描述

3、如果是trt 不支持的层,进行 trt plugin 的修改添加。

	1

三、转换实践

在这里插入图片描述

在这里插入图片描述

3 转换insightface onnx to tensorRT

可以用trtexec 直接转换
错误解决1 Internal Error (Network must have at least one output) (1.7 pytorch insightface模型, onnx)

模型名字写错导致

一般错误 尝试方法, torch.onnx.export(net, img, output,input_names=[“data”],output_names=[“fc1”],verbose=True,opset_version=12) ,opset_version 换成多个版本导出,
更新onnx, 简化

不行的话不用自带编译好的 ./trtexec 运行生成 trt 模型了
下载 onnx / onnx-tensorrt 用查看issue 修改源码编译,生成trt模型

cd onnx-tensorrt-master/onnx_tensorrt$ mkdir build && cd build
cd onnx-tensorrt-master/onnx_tensorrt/build
onnx-tensorrt-master/onnx_tensorrt/build$ cmake .. -DTENSORRT_ROOT=/nfs-data/syy/TensorRT-8.0.0.3 && make -j  # tensort 安装的位置不是这个文件夹的位置

TensorRT Python API 详解

4、trt模型 前向推理

c++ 或者 python 官方示例
https://github.com/NVIDIA/trt-samples-for-hackathon-cn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值