当前位置:首页 > Web开发 > 正文

tensorrt前面已经装好了

2024-03-31 Web开发

环境:ubuntu16.04

tensorrt版本:5.1.5.0

cuda版本:9.0

GPU:1080Ti

Mxnet版本:1.3.1

cudnn:7.3.1

1、tensorrt安置:

https://github.com/NVIDIA/TensorRT

tensorrt的差别版本:

https://developer.nvidia.com/nvidia-tensorrt-download

tensorrt python版的安置参考:

https://blog.csdn.net/zong596568821xp/article/details/86077553

官网参考:

https://docs.nvidia.com/deeplearning/sdk/tensorrt-install-guide/index.html

其实看官网安置tensorrt很简单

2、安置ONNX_TensorRT:

这里才是重点,由于mxnet模型不能直接在tensorrt上直接进行前向运算,所以需要先将mxnet模型转换为onnx模型,再用tensorrt对onnx模型进行前向运算,即模型转换:mxnet->onnx  tensorrt使用onnx完成计算。

首先要安置ONNX_TensorRT,开始踩坑(真是太坑了!!)

ONNX_TensorRT:

主要法式看官方教程

https://github.com/onnx/onnx-tensorrt

第一个坑:cmake找不到cuda编译器。cmake3.15.1和3.11.1均无法找到cuda的编译器,最后安置的3.9.0告成找到编译器(期间改了无数遍环境变量各类折腾,就是找不到)

由于ONNX_TensorRT需要依赖protobuf和tensorrt,,tensorrt前面已经装好了,此刻安置protobuf:

https://github.com/protocolbuffers/protobuf

源码安置和pypi两种都做了,原因是两者安置完以后cmake编译时均找不到protobuf,后来变动了third_party下的CMake.lists中233行

COMMAND ${ONNX_PROTOC_EXECUTABLE} ARGS ${PROTOC_ARGS}改为

COMMAND ${Protobuf_PROTOC_EXECUTABLE} ARGS ${PROTOC_ARGS}

Protobuf_PROTOC_EXECUTABLE为界说好的环境变量名称来找到/usr/local/bin/protoc(这一步弄了两天终于编译过了)

第二个大坑:

mxnet模型转换为onnx模型和tensorrt读取onnx模型并创建engine:

mxnet在界说网络时(以下均为symbol情形)尽量将所有函数参数确定,不要用默认参数(及时它们不异),否则容易报错。

期间遇到的问题:

1、BatchNorm下attribute含有spatial,而onnx貌似不撑持这一属性(本人也不太清楚spatial具体感化),在转换时注失spatial=0

2、tensorrt读取onnx模型时发明不撑持3d卷积操纵,tensorrt撑持的onnx operator:

https://github.com/onnx/onnx-tensorrt/blob/master/operators.md

3、源码安置的mxnet(1.3)版本转换onnx时deconv不撑持,到

https://github.com/apache/incubator-mxnet/tree/fd34dc5f847192dfd522555afdf13be1eb67b72b/python/mxnet/contrib/onnx

下替换文件。

4、tensorrt挪用onnx model时maxpool报错,暂不撑持ospet10版本的maxpool。有些操纵可以通过转换版本实现,转换版本要领:

https://github.com/onnx/onnx/blob/master/onnx/version_converter.py

最后是onnx安置:

pypi安置即可:

pip3 install onnx

Mxnet模型转换ONNX,再用tensorrt执行前向运算

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32476.html