最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

onnx

运维笔记admin40浏览0评论

onnx

onnx

因项目需求要用到onnx-tensorrt,在安装过程中遇到不少坑,故这里简单记录一下,给大家一个参考。

首先是尝试在本机上直接安装,发现会出现版本对应不上一系列问题,故最终我还是选择在docker拉去一个镜像去配环境和使用。

1.docker

进入下面链接查找合适的cuda版docker
.md

# 拉取镜像
sudo docker pull nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04# 创建容器
# 其中,-v 指定一个路径是主机和docker共享的文件夹,
# xxx/trt_docker/表示在主机下的路径,/docker_data表示docker下的路径
sudo docker run --gpus all -it -v xxx/trt_docker/:/docker_data nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04 /bin/bash# 可以使用docker ps -a 查看创建的容器

2.tensorrt-8.4.5.1安裝

首先下载对应版本的安装包,我选择的是TensorRT-8.4.5.1,下载好的包放在xxx/trt_docker/下。
在安装tensorrt之前先安装python环境。

复制以下代码安装python

apt-get install -y --no-install-recommends \
python3 \
python3-pip \
python3-dev \
python3-wheel &&\
cd /usr/local/bin &&\
ln -s /usr/bin/python3 python &&\
ln -s /usr/bin/pip3 pip;

在.bashrc里配置环境

vim ~/.bashrc
export LD_LIBRARY_PATH=/解压TensorRT的路径/TensorRT-8.4.1.5/lib:$LD_LIBRARY_PATH
source ~/.bashrc

安装python版的tensorrt

cd TensorRT-8.4.1.5/python/
pip install tensorrt-8.4.1.5-cp38-none-linux_x86_64.whl

查看是否安装成功

import tensorrt
tensorrt.__version__

若报错
libnvinfer.so.8: cannot open shared object file: No such file or directory

# 在~/.bashrc里添加以下内容,即可解决
export PATH=/xxx/TensorRT-8.4.1.5/bin:$PATH
export LD_LIBRARY_PATH=/xxx/TensorRT-8.4.1.5/lib:$LD_LIBRARY_PATH
export LIBRARY_PATH=/xxx/TensorRT-8.4.1.5/lib:$LIBRARY_PATH

3.protobuf-3.9.2安装

cd protobuf-3.9.2/./autogen.sh
./configure '''
执行./autogen.sh,出错:
+ mkdir -p third_party/googletest/m4
+ autoreconf -f -i -Wall,no-obsolete
./autogen.sh: 37: autoreconf: not found解决:参考 
按顺序执行下列代码:sudo apt-get install autoconf
sudo apt-get install automake
sudo apt-get install libtool若出现: E:Unable to locate package xxx
更新源 apt-get update
再执行上述命令
'''# 编译,安装
make -j 12
make -j 12 check
make install# 刷新共享库
ldconfig# 验证版本
protoc --version
libprotoc 3.9.2

4.onnx-tensorrt-8.4-EA安装

下载源码
.4-EA

git clone -b 8.4-EA git@github:onnx/onnx-tensorrt.git

修改CMakeLists.txt文件
添加6-9行

# SPDX-License-Identifier: Apache-2.0cmake_minimum_required(VERSION 3.13)
project(onnx2trt LANGUAGES CXX C)include_directories(/xxxx/TensorRT-8.4.1.5/include)
include_directories(/usr/local/cuda/include)
link_directories(/xxxx/TensorRT-8.4.1.5/lib)
set(TENSORRT_ROOT /xxxx/TensorRT-8.4.1.5)
set(ONNX2TRT_ROOT ${PROJECT_SOURCE_DIR})

下载onnx-1.8.0
=2

# 1.解压文件
tar -zxvf onnx-1.8.0.tar.gz# 2.将解压后的onnx文件夹下的内容复制到 /onnx-tensorrt-8.4-EA/third_party/onnx/下cd xxx/onnx-tensorrt-8.4-EA/third_party/onnx/# 编译
cmake ..
make

编译安装

mkdir build && cd buildcmake .. -DProtobuf_PROTOC_EXECUTABLE=-DTENSORRT_ROOT=xxx/TensorRT-8.4.1.5make -j12make install

安装python版本onnx和onnx-tensorrt

# 安装onnx
python -m pip install onnx==1.8.0# 安装onnx-tensorrt
# 进入onnx-tensorrt文件夹下
cd xxx/onnx-tensorrt-8.4-EA/# 执行命令
python3 setup.py install#在执行上述命令时可能的报错:
#1.ModuleNotFoundError: No module named 'pycuda'
pip install pycuda# 2.TypeError : Descriptors cannot not be created directly . If this call came from a _pb2.py file , your generated code is out of date and must be regenerated with protoc >=3.19.0. If you cannot immediately regenerate your protos , some othe r possible workarounds are :1. Downgrade the protobuf package to 3.20.x or lo wer .2. Set PROTOCOL BUFFERS PYTHON IMPLEMENTATION = python ( b ut this will use pure - Python parsing and will be much slower ).
pip install protobuf# 3.AttributeError: module 'numpy' has no attribute 'object'. `np.object` was a deprecated alias for the builtin `object`. To avoid this error in existing code, use `object` by itself. Doing this will not modify any behavior and is safe.
#numpy版本太高,降低版本
pip uninstall numpy
pip install numpy==1.23.4

至此,onnx-tensorrt安装成功。

python版推理使用

import onnx
import onnx_tensorrt.backend as backend
import numpy as npmodel = onnx.load("/path/to/model.onnx")
engine = backend.prepare(model, device='CUDA:1')
input_data = np.random.random(size=(32, 3, 224, 224)).astype(np.float32)
output_data = engine.run(input_data)[0]
print(output_data)
print(output_data.shape)

使用onnx2trt转engine

onnx2trt my_model.onnx -o my_engine.trt

参考

发布评论

评论列表(0)

  1. 暂无评论