onnx-tensorrt-8.4-EA安装和使用

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

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

1.docker

进入下面链接查找合适的cuda版docker
https://gitlab.com/nvidia/container-images/cuda/blob/master/doc/supported-tags.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安装

https://github.com/protocolbuffers/protobuf/releases

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解决:参考 https://blog.csdn.net/newbeixue/article/details/125239047
按顺序执行下列代码: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安装

下载源码
https://github.com/onnx/onnx-tensorrt/tree/8.4-EA

git clone -b 8.4-EA git@github.com: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
https://github.com/onnx/onnx/releases?page=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

参考

https://zhuanlan.zhihu.com/p/502098639

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/133462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

马斯克发布大模型Grok;主流AI创意生成工具图谱;Runway视频大赛获奖作品解析;DALL-E 3图像混合操作;42章经播客推荐 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 👀 马斯克「xAI」发布首个AI大模型「Grok」 https://grok.x.ai 11月5日,马斯克旗下人工智能公司 xAI 发布了首款 AI 聊天产品…

Capto2024专为Mac电脑设计的屏幕录制和视频编辑软件

不得不说视频编辑功能:Capto提供了多种视频编辑功能,例如剪辑、旋转、裁剪、调整音频和视频的音量、加入水印、添加注释等,你能够使用Capto编辑你的视频,使之更加专业和生动。有目共睹的是录制完成后,你能够使用Capto提…

20.7 OpenSSL 套接字SSL加密传输

OpenSSL 中的 SSL 加密是通过 SSL/TLS 协议来实现的。SSL/TLS 是一种安全通信协议,可以保障通信双方之间的通信安全性和数据完整性。在 SSL/TLS 协议中,加密算法是其中最核心的组成部分之一,SSL可以使用各类加密算法进行密钥协商,…

web3 dapp React项目引入 antd 对 balance 用户token信息组件进行样式改造

好 上文 web3 React dapp中编写balance组件从redux取出并展示用户资产 我们简单处理了用户资产的展示 那么 我们继续 先启动 ganache 环境 终端输入 ganache -d然后 打开我们的项目 将合约发布到区块链上 truffle migrate --reset然后 我们启动项目 确认一切正常 还原到上文…

k8s中实现mysql主备

文章目录 一、k8s中实现mysql主备1.1 环境信息1.2 部署nfs-provisioner1.2.1 安装nfs1.2.2 部署nfs-provisioner 1.3 安装mysql1.4 备库上查看是否同步 一、k8s中实现mysql主备 1.1 环境信息 机器操作系统ipmysql版本k8s版本storageClassmaster1CentOS7.8192.168.0.20mysql5.…

C++ 代码实例:多项式除法简单计算工具

文章目录 前言代码仓库代码说明核心片段 结果总结参考资料作者的话 前言 C 代码实例:多项式除法简单计算工具。 代码仓库 yezhening/Programming-examples: 编程实例 (github.com)Programming-examples: 编程实例 (gitee.com) 代码 说明 由于代码篇幅较多&#…

【蓝桥杯省赛真题41】Scratch电脑开关机 蓝桥杯少儿编程scratch图形化编程 蓝桥杯省赛真题讲解

目录 scratch电脑开关机 一、题目要求 编程实现 二、案例分析 1、角色分析

基于STM32的设计智慧超市管理系统(带收银系统+物联网环境监测)

一、前言 基于STM32+OneNet设计的智慧超市管理系统(2023升级版) 1.1 项目背景 随着IoT技术的不断发展,智能无人超市也越来越受到人们的关注。智能无人超市是指在无人值守的情况下,通过物联网、大数据等技术手段实现自助选购、结算和配送的新型商场。当前设计了一种基于STM32…

【数据开发】大数据平台架构,Hive / THive介绍

1、大数据引擎 大数据引擎是用于处理大规模数据的软件系统, 常用的大数据引擎包括Hadoop、Spark、Hive、Pig、Flink、Storm等。 其中,Hive是一种基于Hadoop的数据仓库工具,可以将结构化的数据映射到Hadoop的分布式文件系统上,并提…

家用电脑做服务器,本地服务器搭建,公网IP申请,路由器改桥接模式,拨号上网

先浇一盆冷水! 我不知道其他运营商是什么情况。联通的运营商公网IP端口 80、8080、443 都会被屏蔽掉,想要开放必须企业备案(个人不行)才可以。也就是说,只能通过其他端口进行showtime了。 需要哪些东西? 申…

邦芒攻略:面试迟到该如何补救

面试迟到该如何补救 ,人际交往能力强的人在职场上也非常吃得开,职场少不了竞争,职场上的很多东西都是值得学习的,要学会职场的规则才能够如鱼得水,了解面试迟到该如何补救 。 ​ ​1、路上突发情况事先提前告知的 在…

leetcode做题笔记216. 组合总和 III

找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。 示例 1: 输入: k 3, n 7 输出: [[1,2,4]] 解释…

HTML表单标签

## HTML标签:表单标签 * 表单: * 概念:用于采集用户输入的数据的。用于和服务器进行交互。 * form:用于定义表单的。可以定义一个范围,范围代表采集用户数据的范围 * 属性&#xff1…

MySQL中的刷脏机制详解

名词解释 脏页:当内存数据页跟磁盘数据页内容不一致的时候,我们称这个内存页为“脏页”。 干净页:内存数据写入到磁盘后,内存和磁盘上的数据页的内容就一致了,称为“干净页”。 LSN:称为日志的逻辑序列号(l…

HTB——introduction to active directory

文章目录 一、Active directory structure二、Active Directory Terminology 一、Active directory structure Active Directory (AD) 是用于 Windows 网络环境的目录服务。它是一种分布式分层结构,允许集中管理组织的资源,包括用…

MIPI-CSI-2 RAW10笔记

好文: 【精选】摄像头的MIPI接口、DVP接口和CSI接口-CSDN博客【精选】摄像头的MIPI接口、DVP接口和CSI接口-CSDN博客 (56 封私信 / 24 条消息) 显示器的 VGA、HDMI、DVI 和 DisplayPort 接口有什么区别? - 知乎 (zhihu.com) 嵌入式工程师必备&#x…

基于白鲸算法的无人机航迹规划-附代码

基于白鲸算法的无人机航迹规划 文章目录 基于白鲸算法的无人机航迹规划1.白鲸搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用白鲸算法来优化无人机航迹规划。 1.白鲸搜索算法 …

内核态内存映射

内核态的内存映射机制,主要包含以下几个部分: 内核态内存映射函数 vmalloc、kmap_atomic 是如何工作的;内核态页表是放在哪里的,如何工作的?swapper_pg_dir 是怎么回事;出现了内核态缺页异常应该怎么办&am…

什么是智慧工地?

智慧工地将更多人工智能、传感技术、虚拟现实等高科技技术植入到建筑、机械、人员穿戴设施、场地进出关口等各类物体中,并且被普遍互联,形成“物联网”,再与“互联网”整合在一起,实现工程管理干系人与工程施工现场的整合。智慧工…

OpenSSH

SSH(Secure SHell protocol)是一种在不安全网络上提供安全远程登录及其它安全网络服务的协议。SSH协议使用的是TCP 22号端口,telnet 使用的是TCP的23号端口,SSH协议是C/S架构,分为服务器端与客户端。 OpenSSH是对SSH协…