离线编译 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.hqwc.cn/news/427880.html

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

相关文章

微信小程序如何做到高效引流?-数灵通

随着微信小程序制作门槛的降低,大量的小程序如雨后春笋般涌现,其中小程序商城类型尤为众多。然而,由于微信自身的流量有限,对于大多数小程序商城而言,获取足够的流量成为了一大挑战。 针对这一问题,我们可以…

【Python编程工具】【ssh连接Docker容器】如何使用Docker容器里的python环境,如何调试在容器中的代码

文章目录 方案一览Gateway软件介绍启动容器配置apt源在容器中安装SSH服务器配置SSH服务器生成SSH密钥启动SSH服务为root创建密码连接到容器使用Gateway 方案一览 本篇博客将介绍如何在Docker容器中打开SSH连接服务,以及如何使用JetBrains Gateway软件进行代码调试。…

C++ | 六、栈 Stack、队列 Queue

栈的基础知识 栈&#xff08;stack&#xff09;是一种数据结构&#xff0c;在C中属于STL&#xff08;标准库&#xff09;特点&#xff1a;先进后出 栈的使用&#xff1a; 一、引入头文件<stack>二、创建栈变量&#xff08;类似容器、集合的创建方式&#xff09;&#xf…

GNSS模块引领共享出行新纪元:创新微公司的技术创新之路

共享出行服务正在成为城市交通中不可或缺的一环&#xff0c;而全球导航卫星系统&#xff08;GNSS&#xff09;模块的应用为这一领域注入了新的活力。创新微公司通过其先进的GNSS技术&#xff0c;为共享出行服务提供了更智能、高效的解决方案。本文将探讨创新微公司的GNSS模块在…

java(渣哇)------输入与输出语句(详解) (๑•̌.•๑)

目录 一.java的输出语句&#xff1a; System.out.println() -----输出并换行 System.out.print() -----输出但不换行 System.out.printf() -----类似C语言的printf()输出语句,按格式进行输出 二.java的输入语句&#xff1a; 2.1-----Scanner的基础用法&#xff1a; 2.2…

bash 5.2中文修订4

Compound Commands 复合命令 复合命令是 shell 编程语言的结构。每个构造都以保留字或控制运算符开始&#xff0c;并以相应的保留字或运算符终止。与复合命令关联的任何重定向&#xff08;请参阅 Redirections &#xff09;都适用于该复合命令中的所有命令&#xff0c;除非显式…

AI-数学-高中-8-函数奇偶性

原作者视频&#xff1a;函数】6函数奇偶性&#xff08;易-中档&#xff09;_哔哩哔哩_bilibili 示例&#xff1a; 已知奇偶性求解析式&#xff1a; 奇偶、单调函数综合示例&#xff1a;

Redis的五种数据类型(string、hash 、list、set、zset)

Redis 提供了丰富的数据类型&#xff0c;常见的有五种&#xff1a;String&#xff08;字符串&#xff09;&#xff0c;Hash&#xff08;哈希&#xff09;&#xff0c;List&#xff08;列表&#xff09;&#xff0c;Set&#xff08;集合&#xff09;、Zset&#xff08;有序集合&…

云手机与实体手机的对比

在数字化时代&#xff0c;云手机作为一种虚拟手机在云端服务器上运行&#xff0c;与传统的实体手机相比存在诸多差异。让我们深入探讨云手机与实体手机之间的区别&#xff0c;以便更好地了解它们的特点和优势。 外观上的差异 实体手机具有实际的外观和重量&#xff0c;占据一定…

从0开始python算法工程师(一):安装conda

1.为什么要安装conda 主要是为了在命令行使用conda命令管理虚拟环境。 2.两种conda Windows用户&#xff0c;一般建议初学者都安装anaconda&#xff08;省事&#xff09;&#xff1b;Windows用户&#xff0c;熟练的安装者则安装miniconda&#xff08;省存储空间&#xff09;…

影响可变利差有几个因素,Anzo Capital先说两个

了解利差的变化规律&#xff0c;盈利赚钱还不是轻轻松松的事情&#xff0c;但Anzo Capital想问各位投资者&#xff0c;你们知道影响可变利差的价值有几个因素吗&#xff1f;今天就先抛砖引玉&#xff0c;先说两个影响可变利差的因素。 首先就是交易工具的流动性——商品快速买…

Java玩转《啊哈算法》排序之桶排序

过去心不可得&#xff0c;现在心不可得&#xff0c;未来心不可得 目录在这里 楔子代码地址桶排序代码核心部分优缺点 完整代码演示 升级版核心代码完整代码演示 楔子 大家好&#xff01;本人最近看了下《啊哈算法》&#xff0c;写的确实不错&#xff0c;生动形象又有趣&#x…