onnxruntime无法使用GPU加速 加速失败 解决方法【非常详细】
onnx 无法使用GPU加速 加速失败 解决方法【非常详细】
应该是自目前以来最详细的加速失败解决方法GPU加速,收集了各方的资料。引用资料见后文
硬件配置:
GPU CUDA版本:12.2
客户架构:window10
输入: nvcc --version

onnxruntime版本后文提供
1 先检测是否无法使用GPU加速
检测代码如下,记得把模型换成你模型的地址
import onnxruntime
print(onnxruntime.__version__)
print(onnxruntime.get_device() ) # 如果得到的输出结果是GPU,所以按理说是找到了GPU的
ort_session = onnxruntime.InferenceSession("your_onnx_module_path.onnx",
providers=['CUDAExecutionProvider'])
print(ort_session.get_providers())
explain:
如果print(onnxruntime.version)输出成功,应该包就安装成功了
如果没有,见后文的
onnxruntime版本匹配
如果print(onnxruntime.get_device() )输出成功的话,大概率是能够获取到你的gpu了
如果没有获取成功的话,则参见后文的配置
cudann
如果print(ort_session.get_providers()),应该是没什么问题了
如果有问题的话,有蛮多情况导致的,我遇到的一个情况与版本有关
2.1 版本匹配
我的报错问题就与版本匹配有关,其他全部都是正确的,且这个关系到onnxruntime的包安装,固直接放到2.1来说明,你的硬件版本很重要,我这个是解决cuda12的,如果是cuda11可能不一样,或者也能给你们提供一点灵感也不错。
问题描述

报错信息大致是:
CreateExecutionProviderInstance CUDA_PATH is set but CUDA wasn't able to be loaded. Please install the correct version of CUDA andcuDNN as mentioned in the GPU requirements page
翻译出来就是,CUDA_PATH 路径已经设置了,但是 CUDA 不能被读取【也就说理论上环境变量没问题】,但保险起见,各位也可以检查一下你们的环境变量(后文cudann安装说明)
问题处理
找到官方提供的
onnx与cuda的官方文档
当初没想到这里那么多坑
坑1【直接pip安装onnxruntime-gpu】
默认下载的是最新的且是针对11.8的版本,因此你直接
pip install onnxruntime-gpu实际上安装的版本是onnxruntime-gpu=1.18[ 即最新版 ,而且默认是cuda11的]坑2【使用官方提供的ort但不指定版本】:
点进去官方的对12.x的指示

使用官方的命令也会留有后患,因为官方确实是对12.x进行适配了,但默认还是version--1.18,适配cuda12.4,但!他不向下兼容版本,就是说你可能cuda版本是12.2,安装了最新的1.18 ,CUDA版本的12.4就不能使用了,因此需要在安装的时候添加你cuda版本对应的ORT的版本
pip install onnxruntime-gpu==what_you_want_version --extra-index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/onnxruntime-cuda-12/pypi/simple/
将
what_you_want_version换成你需要的版本,对应上图。问题解决了,程序有输出了
总结,如果没有遇到上述问题或者cuda版本不是12.x的,也可以对应图片通过pip安装即可,cuda12.x的话就要注意多一点,以免踩坑
2.2 安装cuda nn失败、缺失dll
可以参考这位博主的心路历程:
为什么在使用onnxruntime-gpu下却没有成功调用GPU?
在linux系统上可以参考这位博主:
大致需要排查的是:
是否已经安装cuda
是否已经将cudaNN对应的库放入cuda的文件中
cudaNN版本与cuda版本是否匹配

记得你的cudaNN版本要与ORT【onnxruntime版本匹配】

按照那位博主或者其他博主的教程安装好对应cudaNN就好,90%的用户都是这个模块出问题了
检查你的cuda、cudaNN是否设置环境变量成功


在你开发的虚拟环境中运行如下命令查看ORT需要设置的环境变量是否成功设置【默认应该是ok的】
set CUDA_PATH
正常输出如下图所示:

如果没有怎么办?去环境变量里面设置即可

如果没有的话,按照我这个变量新建即可,地址根据自己安装cuda地址填【因为我的cudaNn是嵌入进去的 ,公用一个文件夹】
3 疑难杂症
如果上述两个都解决不了你的问题,那确实是少有的疑难杂症了,我抛砖引玉一下吧,但我不是通过这个思路解决的
来源于ORT的官方issue:Windows CUDA_PATH 已设置,但 CUDA 无法载入
其中有这样一段话让我围绕了这个思路进行思考:
“The
D:\part just points to the source file on a build box, so it had nothing to do with your machine. You might want to check if those CUDA folders are present in thePATHof your Conda environment. Easy way to check is to usewherecommand in CMD.”大意就是:第一是检查一下cuda在不在环境变量PATH中,有没有可能在conda环境中无法访问到PATH的路径
但这个毕竟不是我解决的方法,如果上面两个问题都无法解决,无妨去看看issue
4 参考资料
鸣谢:为什么在使用onnxruntime-gpu下却没有成功调用GPU?,这位大佬的分享让我初期解决这个问题的时候有了一定参考
onnxruntime无法使用GPU加速 加速失败 解决方法【非常详细】的更多相关文章
- Docker安装、命令详情、层级架构、docker服务启动失败解决方法
容器背景: 层级架构: 容器对比传统化虚拟机: 可以把docker理解成是一款自带软件(比如:nignx.tomcat.....)的镜像操作系统(首先是要下载镜像) 以下是Windows环境安装Do ...
- Win10提示“您未连接到nvidia gpu的显示器”的解决方法
显卡有Nvidia 和 ATI两个芯片,我们经常称他们为N卡和A卡,N卡更加注重于性能,而A卡则为颜色艳丽,画面更好.不过,最近一些windows10系统用户在使用N卡过程中,遇到了提示“您当前未使用 ...
- Win10 连接L2TP VPN 失败解决方法
Win10 连接L2TP VPN 失败解决方法 iOS系统不知道在什么时候,已经不支持PPTP VPN.偶尔的机会刚好看到github上的一键式VPN服务器部署脚本setup-ipsec-vpn,就在 ...
- 用户 NT AUTHORITY\NETWORK SERVICE 登录失败 解决方法(转载)
用户 NT AUTHORITY\NETWORK SERVICE 登录失败 解决方法 (MS SQL 2005) Windows server 2003,2008 Web.Config 配置连接sql ...
- 检索 COM 类工厂中 CLSID 为 {10020200-E260-11CF-AE68-00AA004A34D5} 的组件时失败,解决方法如下:
检索 COM 类工厂中 CLSID 为 {10020200-E260-11CF-AE68-00AA004A34D5} 的组件时失败,解决方法如下: 第 一步:首先将msvcr71.dll, SQLD ...
- nfs文件系统挂载失败解决方法
nfs文件系统挂载失败解决方法 */--> nfs文件系统挂载失败解决方法 Table of Contents 1. 错误提示 2. 我的配置 1 错误提示 bootserver=255.255 ...
- Oracle高版本导出dmp导入Oracle低版本报错:"不是有效的导出文件、头部验证失败"解决方法
从Oracle高版本中导出dmp,然后导入到Oracle低版本时会报错:"不是有效的导出文件.头部验证失败",解决方法: 方法一:下载软件:AlxcTools,打开后选择要修改的文 ...
- [Q]“获取AutoCAD安装信息时失败...”解决方法
“获取AutoCAD安装信息时失败...”解决方法:在“setup.exe”上右键,以管理员权限运行即可.
- Genymotion下载失败解决方法
Genymotion下载虚拟机版本时会很慢,而且经常下载失败 解决方法如下: 1.先去选择下载你需要的版本,之后会下载(很慢),或者失败. 2.到C:\Users\yourname\AppData\L ...
- ORA-12638: 身份证明检索失败 解决方法
用PL/SQL或Navicat连接本地或远程Oracle数据库的时候报错:ORA-12638: 身份证明检索失败 解决方法: 开始 -> 所有程序 -> Oracle - Oracle_h ...
随机推荐
- FFMPEG 信息查询
一.问题描述 最近测试反馈一个隐私模式的问题,主播端启用隐私模式之后,在观看端发现画面转菊花并且还有回跳的现象 二.问题分析: 从网上下载了直播的视频文件,进行了一下分析,发现视频长度和音频长度不匹配 ...
- css 透明气泡效果
css body { background:#333333; } .login-card { text-align:center; width:430px; height:430px; margin: ...
- 忘记root密码,破解root密码
破解root用户密码: 1.按e进入内核参数重置界面 2.找到开头Linux的段落,行尾输入rd.break 3.按ctrl+x 进入可选步骤 5.以读写方式挂载sysyroot 修改root密码要挂 ...
- Java邮件发送解决ssl javax.mail实现方式
package test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.activation.DataH ...
- Android自动化-如何获取视图元素属性?
在做Android自动化时候,我们需要知道视图有哪些元素,元素都有哪些属性,获取到属性我们才能获取到元素从而做自动化控制,所以做Android自动化获取元素属性是必要的第一步 获取视图元素属性最便捷的 ...
- 在C#中进行单元测试
单元测试 前言 时隔多个月,终于抽空学习了点新知识,那么这次来记录一下C#怎么进行单元测试,单元测试是做什么的. 我相信大部分刚毕业的都很疑惑单元测试是干什么的?在小厂实习了6个月后,我发现每天除了写 ...
- Python中使用MySQL模糊查询的方法
1.方法一:使用pymysql库的方法 当在Python中使用MySQL进行模糊查询时,我们通常会使用pymysql或mysql-connector-python这样的库来连接MySQL数据库并执行查 ...
- 一次Java服务内存过高的分析过程
现象 年前,收到了短信报警,显示A服务的某台机器内存过高,超过80% 如上图所示,内存会阶段性增加.奇怪的是,十多台机器中只有这一台有这个问题 堆内内存分析 最先怀疑是内存泄漏的问题,所以首先使用jm ...
- Qt 学习笔记 - 第四章 - Qt的三驾马车之 - 网络编程
Qt 学习笔记全系列传送门: Qt 学习笔记 - 第一章 - 快速开始.信号与槽 Qt 学习笔记 - 第二章 - 添加图片.布局.界面切换 Qt 学习笔记 - 第三章 - Qt的三驾马车之一 - 串口 ...
- DASCTF X CBCTF 2023|无畏者先行 [PWN] WP
DASCTF X CBCTF 2023|无畏者先行 [PWN] WP 1.GuestBook 题目保护情况 开启canary,nx保护 64位ida载入 首先可以通过输入0x18个垃圾数据可以通过打印 ...