离线编译 onnxruntime-with-tensortRT

记录为centos7的4090开发机离线编译onnxruntime的过程,因为在离线的环境,所以踩了很多坑。

https://onnxruntime.ai/docs/execution-providers/TensorRT-ExecutionProvider.html
这里根据官网的推荐安装1.15 版本的onnx
在这里插入图片描述
因为离线环境,所以很多都是要自己手动编译安装的
onnx 源码 1.51
cmake 3.26.6 (本地环境的3.16不可以)
Python 3.8.12
cuda 11.8
cudnn 8.97.29
patch 2.7.6
TensorRT 8.6.1.6
gcc11(要求gcc>7)

patch是onnx给他的某些依赖库打补丁用的,centos中yum install patch即可,这里本地只能自己编译
python是因为系统自带的python只有可执行文件,编译过程需要头文件和python的库文件

压缩包+安装路径的截图如下
在这里插入图片描述
在这里插入图片描述
对应的环境变量设置如下


export PATH=/home/users/zyx/cmake26_install/bin:$PATH
export PATH=/home/users/zyx/python3.8/bin:$PATH
export LD_LIBRARY_PATH=/home/users/zyx/python3.8/lib:$LD_LIBRARY_PATH
export C_INCLUDE_PATH=/home/users/zyx/python3.8/include:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=/home/users/zyx/python3.8/include:$CPLUS_INCLUDE_PATH
export TENSORRT_ROOT=/home/users/zyx/TensorRT-8.6.1.6
export CUDA_HOME=$CUDA_HOME:/home/users/zyx/cuda_11.8
export PATH=/home/users/zyx/cuda_11.8/bin:$PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/users/zyx/cuda_11.8/lib64export CMAKE_C_COMPILER=/usr/local/gcc-11.4/bin/gcc
export CMAKE_CXX_COMPILER=/usr/local/gcc-11.4/bin/g++
export PATH=/usr/local/gcc-11.4/bin:$PATH
export CC=/usr/local/gcc-11.4/bin/gcc
export CXX=/usr/local/gcc-11.4/bin/g++
export LD_LIBRARY_PATH=/usr/local/gcc-11.4/lib64:$LD_LIBRARY_PATH#export PATH=/usr/local/gcc-5.4.0/bin:$PATH
#export CC=/usr/local/gcc-5.4.0/bin/gcc
#export CXX=/usr/local/gcc-5.4.0/bin/g++
export PATH="/home/users/zyx/patch-install/bin:$PATH"
export CMAKE_CXX_FLAGS="-Wno-error"export CXXFLAGS="-mavx512f" # 这里的编译并没有用到,设置指令集相关的
export CFLAGS="-mavx512f"   # 这里的编译并没有用到,设置指令集相关的

设置好代理,下载代码,–recursive 带着他的子module

git clone -b v1.15.1 https://github.com/microsoft/onnxruntime --recursive

这里使用如下的指令,开启cuda,开启tensorRT,构建python的onnxruntime安装包,release模式

./build.sh \
--parallel 8 \
--use_cuda \
--skip_tests \
--use_cuda --cuda_version=11.8 \
--cudnn_home /home/users/zyx/cuda_11.8/lib64 \
--cuda_home /home/users/zyx/cuda_11.8/ \
--use_tensorrt --tensorrt_home /home/users/zyx/TensorRT-8.6.1.6 \
--build_shared_lib --build_wheel \
--config Release

因为最开始没有看官网的推荐版本兼容配置,使用onnx1.8 搭配 TensorRT 8.6.1.6报错

TENSORRT_LIBRARY_MYELIN tensorrt版本不匹配

https://github.com/onnx/onnx-tensorrt/issues/355
在这里插入图片描述

patch报错 /bin/sh: Patch_EXECUTABLE-NOTFOUND: command not found

在这里插入图片描述
原因是/usr/bin/patch缺少 这个可执行文件,联网可直接install,或者自己编译

…/protobuf-build/protoc-3.21.12.0: /usr/local/gcc-5.4.0/lib64/libstdc++.so.6: version `GLIBCXX_3.4.29’ not found (required by …/protobuf-build/protoc-3.21.12.0)

cmake报错,GILBC因为没有把gcc14的库路径指定连接
不需要升级gcc,这里只是因为没有加入LD_LIBRARY_PATH

export LD_LIBRARY_PATH=/usr/local/gcc-11.4/lib64:$LD_LIBRARY_PATH

error: ‘virtual void nvinfer1::IGpuAllocator::free(void*)’ is deprecated [-Werror=deprecated-declarations]

error: ‘IPluginV2’ is deprecated [-Werror=deprecated-declarations]

耗时最久的报错,因为trt源码的某些函数已经废弃,而编译目标时候把废弃当作错误
在这里插入图片描述
解决办法就是手动修改cmake,下图可以看到对应编译失败的目标文件名字,全局找到对应的cmake
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

给对应的目标文件的编译选项都忽略废弃报错

修改之后编译就没问题了,后面打包制作python包,安装对应的两个包就好
ModuleNotFoundError: No module named ‘packaging’
No module named ‘wheel’

编译成功如下
在这里插入图片描述

在 onnxruntime/build/Linux/Release/dist 下有onnxruntime_gpu-1.15.1-cp38-cp38-linux_x86_64.whl包,直接安装即可

pip3 install onnxruntime_gpu-1.15.1-cp38-cp38-linux_x86_64.whl
之后,python中可以导入,成功安装。
在这里插入图片描述

因为-Werror=deprecated-declarations 这个问题,尝试过更高版本的onnx,对应的报错和解决方法如下,不再继续深入研究其他版本。

1.16.2版本
cpu部分指令集,开发机链接器太旧
在这里插入图片描述

1.16.1版本
[Build] Eigen hash mismatch
https://github.com/microsoft/onnxruntime/issues/18286
在这里插入图片描述

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

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

相关文章

1. Matplotlib的Figure基础概念

1. Matplotlib的Figure基础概念 一 **角色和作用**二 **类比:**三 **基本使用示例** Matplotlib是一个用于绘制二维图形的Python库,广泛应用于数据可视化领域。其灵活性和强大的功能使得用户能够轻松创建各种类型的图表,包括折线图、散点图、…

RectMask2D的合批情况验证

1.经过实际测试,RectMask2D在裁剪区域完全相同且位置完全重合的情况下能够合批 但是当RectMask2D位置不重合时,就不能合批 注意,虽然此处被RectMask2D裁剪了,但是有部分是被渲染的,在计算深度时属于需要渲染…

Labview for循环精讲

本文详细介绍Labview中For循环的使用方法,从所有细节让你透彻的看明白For循环是如何使用的,如果有帮助的话记得点赞加关注~ 1. For循环结构 从最简单的地方讲起,一个常用的for循环结构是由for循环结构框图、循环次数、循环计数(i)三部分组成…

动静态库的理解、制作、使用。

一.动静态库的理解。 1.什么是库? 代码是无穷无尽的,当程序猿在写一些项目时,未必所有代码亲历亲为,他们可以在网上寻找大佬写过的一些有关需求的代码,这些代码可以让他们拿过来直接使用,而省去了许多精力…

回归问题波士顿房价预测

线性回归API sklearn.linear_model.LinearRegression(fit_interceptTrue) 正规方程优化参数:fit_intercept,是否计算偏置属性:LinearRegression.coef_ (回归系数) LinearRegression.intercept_(偏置&…

STL第四讲

第四讲 万用Hash Function 左侧的是设计为类并重载调用运算符,右侧是一般函数的形势; 但是右侧形势在创建容器时更麻烦; 具体例子: 第三种形势:struct hash 偏特化形式 tuple 自C03引入; 关于源码解读的…

ASCB1系列一体式智能微型断路器 智慧空开-安科瑞 蒋静

1. 概述 ASCB1系列智能微型断路器(一体式)(以下简称智能微型断路器)应用于户内建筑物及类似场所的工业、商业、民用建筑及基础设施等领域低压终端配电网络。智能微型断路器对用电线路的关键电气参数,如电压、电流、功率、温度、漏电、能耗等…

北美“水务巨头”遭遇勒索软件攻击,账单支付系统被破坏

近日,威立雅北美公司披露了一起勒索软件攻击事件,此次攻击影响了其市政水务部门的部分系统,并破坏了其账单支付系统。 在发现攻击后,该公司立即采取了防御措施,并暂时关闭了部分系统,以避免漏洞造成更大的…

Broadcom交换芯片56620架构

文章目录 架构1.系统逻辑视图2.逻辑芯片视图3.芯片框图4.MIIM(Medium Independent Interface Management)5.交换结构6.CAP 架构 1.系统逻辑视图 Ingress Chip作用: 解析报文128字节的头部(MMU(Memory Management Uni…

JavaWeb之开发介绍 --黑马笔记

什么是 Web ? Web:全球广域网,也称为万维网(www World Wide Web),能够通过浏览器访问的网站。 Web 网站的工作流程 上图解释: 当你在浏览器中输入网址或点击一个链接时,浏览器会向前端服务器发起请求&…

C++进阶--哈希的应用之位图和布隆过滤器

哈希的应用之位图和布隆过滤器 一、位图1.1 位图(bitset)的提出1.2 位图的概念1.3 位图的模拟实现1.3.1 位图的底层结构1.3.2 位图的成员函数1.3.2.1 位图的构造1.3.2.2 位图的插入:set1.3.2.3 位图的删除:reset1.3.2.4 位图的查找…

头疼管理 Postgres Schema?开源工具大盘点!

Postgres 前不久荣获了 DB-Engines 2023 年度数据库的桂冠,其生态也在蓬勃发展,不过,迁移 Postgres 数据库 schema 仍旧令人头疼,不是一件好办的事儿。 本文中,我们盘点几个好用的用于 Postgres 的开源数据库 schema 迁…

UDS Flash刷写流程介绍

一、刷写流程介绍 1.1刷写包含以下三个步骤:预编程,编程,后编程 1.2预编程步骤 此步骤是保证能够正常进入编程(10 02)会话下。 (1)如果无特殊要求,只保证刷写能够正常进行&#x…

Fluent 技巧:查找并修改隐藏的设置

绝大部分 Fluent 设置可以通过图形界面或者命令行内置的命令按照提示处理。少部分设置因为种种原因被隐藏,需要在命令行中使用 scheme 语句进行处理。例如关闭温度的二阶梯度,需要在命令行中完整输入如下 scheme 语句(包括英文括号部分&#…

编译安装Nginx健康检查模块和echo模块

1、编译安装Nginx健康检查模块和echo模块 -rw-r--r-- 1 root root 482 1月 20 09:51 1.sh -rw-------. 1 root root 1060 11月 26 09:12 anaconda-ks.cfg -rw-r--r-- 1 root root 370929 1月 16 18:02 bash.txt drwxrwxr-x 5 root root 174 8月 1 2022 ec…

网站将http升级到https大概要多少费用

随着网络安全意识的不断提升,越来越多的网站正从传统的HTTP协议转向更安全的HTTPS协议。这一转变的核心在于部署SSL(Secure Sockets Layer)或TLS(Transport Layer Security)证书,以实现数据加密传输&#x…

【算法专题】动态规划之路径问题

动态规划2.0 动态规划 - - - 路径问题1. 不同路径2. 不同路径Ⅱ3. 珠宝的最高价值4. 下降路径最小和5. 最小路径和6. 地下城游戏 动态规划 - - - 路径问题 1. 不同路径 题目链接 -> Leetcode -62.不同路径 Leetcode -62.不同路径 题目:一个机器人位于一个 m …

srs5.0.205编译启动

官方有教程了,但是我编译的时候出了很多错误,记录一下。 官方文档:https://ossrs.net/lts/zh-cn/docs/v4/doc/getting-started-build 拉取源码 git clone -b 4.0release https://gitee.com/ossrs/srs.git进入文件夹 cd srs/trunk配置 ./c…

【STM32】STM32F4中USB的CDC虚拟串口(VCP)使用方法

文章目录 一、前言二、STM32CubeMX生成代码2.1 选择芯片2.2 配置相关模式2.3 设置时钟频率2.4 生成代码2.5 编译并下载代码2.6 结果2.7 问题 三、回环测试3.1 打开工程3.2 添加回环代码3.3 编译烧录并测试 四、出现问题和解决方法4.1 烧录总是要自己插拔USB4.2 自己生成的工程没…

【win】Windows下MSI Afterburner如何让其不在某个软件中显示帧数

本文首发于 慕雪的寒舍 Windows下MSI Afterburner如何让其不在某个软件中显示帧数 1.问题说明 总所周知,MSI Afterburner这个软件可以在游戏里面展示你当前电脑的各项生命体征,包括GPU/CPU功耗频率温度,内存占用,当前帧数等等数据…