onnx-tensorrt安装

最近踩了一下从onnx导出到TensorRT的坑,在这记录一下。

安装TensorRT

官方地址下载合适版本的TensorRT,例如我这里下载的就是TensorRT-7.0.0.11.CentOS-7.6.x86_64-gnu.cuda-10.2.cudnn7.6.tar.gz

1
2
3
4
5
6
7
8
9
10
11
12
13
# 解压缩
# tar -xzvf TensorRT-7.0.0.11.CentOS-7.6.x86_64-gnu.cuda-10.2.cudnn7.6.tar.gz -C /指定你要的路径
# 比如
tar -xzvf TensorRT-7.0.0.11.CentOS-7.6.x86_64-gnu.cuda-10.2.cudnn7.6.tar.gz -C /data2/zhaodali/software

# 添加环境变量
vim ~/.bashrc
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data2/zhaodali/software/TensorRT-7.0.0.11/lib
source ~/.bashrc

# 安装Python支持,选择对应python版本的whl进行安装
cd /data2/zhaodali/software/TensorRT-7.0.0.11/python
pip install tensorrt-7.0.0.11-cp37-none-linux_x86_64.whl

安装ONNX_tensorrt

1
2
3
4
5
6
7
8
9
10
git clone --recurse-submodules https://github.com/onnx/onnx-tensorrt.git
cd onnx-tensorrt
# 值得注意的是,这个版本必须要和tensorrt的版本对应!!!
git checkout 7.0
mkdir build
cd build
# cmake .. -DTENSORRT_ROOT=<tensorrt_install_dir> -DGPU_ARCHS='xxx'
# 从https://developer.nvidia.com/cuda-gpus这里查看你GPU的计算能力,替换上面的'xxx'
cmake .. -DTENSORRT_ROOT=/data2/zhaodali/software/TensorRT-7.0.0.11 -DGPU_ARCHS="61"
make -j 12

这个时候,遇到了一个问题:Expected "required", "optio nal", or "repeated".经过查询,是protoc的版本过低导致的:

1
2
3
4
5
6
7
8
9
10
# 命令 whereis protoc 可以查看哪些路径下安装了protoc
# 命令 which protoc 可以查看默认选用protoc的路径
# 命令 protoc --version 可以查看当前protoc版本

[zhaodali@64 ~]$ whereis protoc
protoc: /usr/bin/protoc /usr/local/bin/protoc
[zhaodali@64 ~]$ which protoc
/usr/bin/protoc
.[zhaodali@64 ~]$ protoc --version
libprotoc 2.5.0

这个时候需要重新编译protoc,操作过程为:

官方地址下载最新的安装包,例如我这里下载的为protobuf-all-3.12.3.tar.gz

1
2
3
4
5
6
7
8
9
10
11
tar -zxvf protobuf-all-3.12.3.tar.gz
# 更改安装路径
cd protobuf-3.12.3/
./autogen.sh
./configure --prefix=/data2/zhaodali/software/protobuf
make -j 12
make check
make install

# 设置环境变量,注意将$PATH放在后面
export PATH="/data2/zhaodali/software/protobuf/bin:$PATH"

需要注意的是export PATH="/data2/zhaodali/software/protobuf/bin:$PATH"会先从前面加载protobuf,但是若设置为:export PATH=$PATH:/data2/zhaodali/software/protobuf/bin,则会先从系统路径中加载protobuf!!!

这里附一个附录,是关于怎么添加各种环境变量的

1
2
3
4
5
6
7
8
9
10
11
12
#(动态库搜索路径) 程序加载运行期间查找动态链接库时指定除了系统默认路径之外的其他路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib/
#(静态库搜索路径) 程序编译期间查找动态链接库时指定查找共享库的路径
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/protobuf/lib/
#执行程序搜索路径
export PATH=$PATH:/usr/local/protobuf/bin/
#c程序头文件搜索路径
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/protobuf/include/
#c++程序头文件搜索路径
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/protobuf/include/
#pkg-config 路径
export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/

这个时候又遇到了一个问题,提示cmake的版本过低,23333我可真难。首先从官方地址下载最新的cmake安装包,例如我下载的就是cmake-3.17.1.tar.gz。然后执行如下操作:

1
2
3
4
5
6
7
8
9
10
11
12
tar xvf cmake-3.17.1.tar.gz
cd cmake-3.17.1
./bootstrap --prefix=/data2/zhaodali/software/cmake3171
make -j 12
make install

# 设置环境变量
vim ~/.bash_profile
export PATH=/data2/zhaodali/software/cmake3171/bin:$PATH
source ~/.bash_profile
# 验证
cmake --version

然后这个时候,重新回到onnx-tensorrt/build,执行如下操作:

1
2
3
4
5
cd onnx-tensorrt/build
rm -r *
cmake .. -DTENSORRT_ROOT=/data2/zhaodali/software/TensorRT-7.0.0.11 -DGPU_ARCHS="61" -DCMAKE_PREFIX_PATH=/data2/zhaodali/software/protobuf
make -j 12
make install

这个时候又报错了,提示:

1
2
3
4
5
6
7
CMake Error at cmake_install.cmake:47 (file):
file INSTALL cannot copy file
"/data2/zhaodali/software/onnx-tensorrt/build/onnx2trt" to
"/usr/local/bin/onnx2trt": Success.


make: *** [install] Error 1

这是因为我们没有sudo权限的问题,所以执行如下操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
cd onnx-tensorrt/build
rm -r *
# -DCMAKE_INSTALL_PREFIX设置安装路径
# -DCMAKE_PREFIX_PATH可以设置库的路径
cmake .. -DTENSORRT_ROOT=/data2/zhaodali/software/TensorRT-7.0.0.11 -DGPU_ARCHS="61" -DCMAKE_PREFIX_PATH=/data2/zhaodali/software/protobuf -DCMAKE_INSTALL_PREFIX=/data2/zhaodali/software/onnx-trt
make -j 12
make install

# 设置环境变量
vim ~/.bash_profile
export PATH=/data2/zhaodali/software/bin:$PATH
source ~/.bashrc
# 这个环境变量是我自己猜着写的,没想到还真的work了
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data2/zhaodali/software/onnx-trt/lib
export PATH=$PATH:/data2/zhaodali/software/onnx-trt/bin

# 测试,输入下面指令看是否有输出
onnx2trt

终于成功了,撒花~~

参考

TensorRT7 + Onnx_TensorRT 安装过程记录
protobuf版本问题? - Gilbert.Wu的回答 - 知乎
centos6.x升级protobuf操作流程.
Linux cmake安装,配置以及测试
在CentOS安装CMake 升级cmake 3.5
Centos 7安装protobuf3.6.1
How to import the path of compiled protobuf in cmake #104

------ 本文结束------
坚持原创技术分享,您的支持将鼓励我继续创作!

欢迎关注我的其它发布渠道