【一文解决】已安装CUDA与Pytorch但torch.cuda.is_available()为False

news2025/1/12 20:40:52

目录

  • 问题描述
  • 总览:导致问题的原因
  • 可能1:CUDA版本与驱动程序不兼容
  • 可能2:CUDA库的路径设置存在问题
  • 可能3:PyTorch版本与CUDA版本不匹配
  • 可能4:编译问题
  • 可能5:软件包或库冲突
  • 写在最后

问题描述

已经安装CUDA与Pytorch。但执行如下Python脚本,输出结果为False:

import torch
print(torch.cuda.is_available())

出现这个问题的原因很多,很多文章的分析并不全面。博主遇到这个问题时,也是不断整合网络上零零散散的信息,浪费了不少功夫,因此写下了本文。如果你也遇到了这个问题,本文致力于帮助你通过这一篇文章解决这一问题。如果本篇文章对你有帮助,希望能点赞鼓励一下。

注意,本文解决的问题是,import torch不报错,但Pytorch与cuda没有正确匹配上。如果你的import torch报错,说明你没有正确安装Pytorch,请参考这一链接,安装合适的Pytorch版本。

为了方便说明,本文以CUDA 10.2与PyTorch 1.11.0(GPU版本)为例。

总览:导致问题的原因

导致这一问题的原因主要分为如下四个方面,在这里先作总结,具体方法在之后展开。有经验的同学可以直接根据本节进行快速排查,以提高效率。

  1. CUDA版本与驱动程序不兼容:CUDA版本需与GPU驱动程序兼容。
  2. CUDA库的路径设置存在问题:如果CUDA库路径未正确配置,PyTorch将无法找到CUDA库文件。
  3. PyTorch版本与CUDA版本不匹配:安装的PyTorch版本需与CUDA版本匹配。
  4. 编译问题:如果使用预编译的PyTorch二进制文件,可能存在与CUDA版本不匹配的问题。
  5. 冲突:可能存在其他软件包或库与PyTorch或CUDA发生冲突。

绝大多数的问题都可以通过前三步解决。

请按照1-5的顺序排查,直至问题解决。

可能1:CUDA版本与驱动程序不兼容

驱动程序与CUDA的兼容,指的是GPU驱动程序与安装的CUDA版本相匹配,并且能够正确地与CUDA库进行通信和协作。可以按照如下步骤排查二者是否兼容:

1. 查看CUDA版本。

在终端输入如下指令:

![nvcc -V](https://img-blog.csdnimg.cn/7aa95a08cc654edd83a126fd30b8953d.png)

或者:

cat /usr/local/cuda/version.txt

在这里插入图片描述

例如,我的CUDA版本是10.2。

2. 查看GPU驱动程序版本。

在终端输入如下指令:

nvidia-smi

在这里插入图片描述

找到第一行的Driver Version,例如我的是440.44。

3. 检查二者是否兼容。

驱动程序与CUDA的兼容性是非常重要的,因为PyTorch和其他基于CUDA的库需要与GPU驱动程序进行交互才能正确运行。如果驱动程序与CUDA不兼容,可能会导致无法正常使用CUDA功能或出现错误。

检查上述二者的版本,确保二者是匹配的。例如,CUDA 10.2对应的推荐驱动程序版本为NVIDIA驱动程序版本440.33或更高版本,我的版本是440.44,因此兼容。

CUDA版本与GPU驱动的兼容性表格(Linux请参照第一二列,Windows请参照第一三列)如下,请根据自己的版本自行比对:
在这里插入图片描述
注:引用自此链接。

4. 更新驱动程序或更改CUDA版本。

若二者不匹配,可以选择更新驱动程序或更改CUDA版本。

可以通过访问NVIDIA官方网站下载并安装适当的驱动程序版本。在安装新的驱动程序之前,请确保先卸载旧的驱动程序,并按照安装指南进行正确的安装,这里不做展开。如对CUDA版本无特殊要求,建议优先选择更改安装的CUDA版本。

可能2:CUDA库的路径设置存在问题

简单来说,如果CUDA库路径未正确配置,PyTorch将无法找到CUDA库文件。在这种情况下,即便CUDA与Pytorch的安装都是正确的,也会导致错误。

请按照如下步骤,将CUDA路径添加到Linux系统的环境变量中(Windows平台下的操作与之类似,这里以Linux为例,供参考):

  1. 在终端输入如下指令:
vim ~/.bashrc

即使用vim文本编辑器打开~/.bashrc文件。也可以选择通过其他的文本编辑器打开。

  1. 以vim为例,按下字母i,进入编辑模式,在文件的末尾添加以下行:
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

其中,/usr/local/cuda为CUDA的安装路径。如果你的CUDA的安装路径不是/usr/local/cuda,请填你的实际路径。

该操作会将CUDA的bin目录添加到PATH环境变量中,以便系统可以找到CUDA可执行文件,同时将CUDA的lib64目录添加到LD_LIBRARY_PATH环境变量中,以便系统可以找到CUDA库文件。

  1. 按下ESC,然后输入:wq,之后按下回车,保存~/.bashrc文件。
  2. 在终端窗口中,运行以下命令以使环境变量更改生效:
source ~/.bashrc

该命令会重新加载.bashrc文件,使添加的环境变量生效。

  1. 检查CUDA路径是否成功添加到环境变量中。

在终端窗口中,运行以下命令:

echo $PATH
echo $LD_LIBRARY_PATH

上述命令将显示环境变量的当前值。检查输出中是否包含CUDA的路径(/usr/local/cuda/bin和/usr/local/cuda/lib64),以确保添加成功。

如果输出中不包含CUDA的路径,或包含多个CUDA路径,请继续参考如下步骤操作。

  1. 排查环境变量问题。

如果环境变量的当前值不正确,那么这个问题可能是由其他配置文件或环境变量引起的。除了~/.bashrc文件之外,还可能存在其他配置文件,这些文件也可能包含CUDA库路径的设置。打开这些文件并查找类似PATH、LD_LIBRARY_PATH的设置行,以确定是否在其他文件中设置了/usr/local/cuda路径。

  1. 检查其他环境变量。

除了LD_LIBRARY_PATH环境变量之外,还可能存在其他与CUDA相关的环境变量设置,这些设置可能导致/usr/local/cuda/lib64路径被添加到LD_LIBRARY_PATH中。运行如下指令检查是否存在其他环境变量与CUDA相关:

env | grep CUDA

如果有的话,可能是由于执行过其他的CUDA相关的操作引起的,可以参照下一条将其清除。

  1. 清除旧的环境变量。

如果曾经安装过其他版本的CUDA或执行过其他与CUDA相关的操作,旧的环境变量设置可能仍然存在于系统中。可以手动清除这些环境变量,然后重新设置正确的CUDA库路径。

首先,运行如下指令:

env

这将列出所有当前的环境变量。在输出中查找与CUDA或旧版本相关的环境变量设置,使用unset命令来删除指定的环境变量。例如,假设存在名为OLD_CUDA_PATH的环境变量,可以运行以下命令删除它:

unset OLD_CUDA_PATH

对每个需要删除的环境变量重复此步骤。注意,除非确定环境变量存在问题,否则不要轻易删除环境变量。

  1. 重新加载配置文件。

运行指令:

source ~/.bashrc

注意,如果此时报错:/bin/lesspipe: 1: /bin/lesspipe: basename: not found,可能是由于删除了PATH环境变量,请参考此链接。

  1. 再次检查环境变量。

运行env命令再次检查环境变量,确保旧的环境变量已成功删除。

可能3:PyTorch版本与CUDA版本不匹配

有些同学可能直接通过下面的指令安装Pytorch:

pip install pytorch
conda install pytorch

这些指令都是不合适的,可能导致安装的PyTorch版本与CUDA版本不匹配。也有些同学访问Pytorch官网,看到安装指令之后直接复制粘贴,而没有进一步检查Pytorch与CUDA的匹配性。

在这里插入图片描述

更加推荐的安装方式是,访问Previous PyTorch Versions | PyTorch,找到与CUDA版本相符的Pytorch版本,再复制安装。

在这里插入图片描述

可能4:编译问题

我没有遇到过这种情况,我也不推荐使用源代码编译PyTorch。如果排查到这一步依旧没有解决问题,建议首先更换Pytorch版本尝试(例如由conda安装改为pip安装)。如果依旧无法解决,再参照使用源代码编译PyTorch的相关文章。

可能5:软件包或库冲突

为了避免这种情况,建议新建一个conda环境,在新的conda环境下安装Pytorch。

写在最后

上面五点是博主根据个人经验与网上的相关文章总结的,如果有补充,欢迎同学们在评论区讨论。

如果这篇文章帮助到了你,希望能点赞或评论支持一下,大家的鼓励是我持续创作的最大动力。

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

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

相关文章

2023 陕西省大学生网络安全技能大赛 --- 高职组 Crypto ezmath

文章目录 题目解题过程 题目 from Crypto.Util.number import * from secret import y,a,b flagbflag{} l len(flag) m1, m2 flag[: l // 2], flag[l // 2:]x bytes_to_long(m1) c bytes_to_long(m2)assert (x**21)*(y**21)-2*(xy)*(x*y1)gift-4*x*y 4*b**6-2*a**33*a*c …

JavaScript案例分享:让前端开发者抓狂的按钮

前言 我分享一个前端案例,代码来源我不确定,可能是我某个编程技术交流群的群友分享的。由于我设置了自动下载文件,今天在查看微信文件时偶然发现了这个案例,查看下载日期是6月7日,所以无法确定到底是哪个群友分享的。但…

618,你会入手哪些书?【文末送书】

好书分享 前沿技术人工智能半导体新一代通信与信息技术网络空间安全参与规则 一年一度的618又到啦!今年的618就不要乱买啦,衣服买多了会被淘汰,电子产品买多了会过时,零食买多了会增肥,最后怎么看都不划算。可是如果你…

超强整理,性能测试-常用服务器性能指标分析总结,一篇概全...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 压测过程中&#…

Hive SQL DML

Hive SQL DML 本节所需数据集 数据集 提取码:rkun ⛵加载数据 Load 加载,装载将数据文件移动到与Hive表对应位置,移动时是纯复制,移动操作。纯复制移动指数据load加载到表中,hive不会对表中数据内容进行任何变换&…

Cache技术在星辰处理器中的应用

Cache技术在星辰处理器中的应用-修复MicroPython在MM32F5上启动慢的问题 文章目录 Cache技术在星辰处理器中的应用-修复MicroPython在MM32F5上启动慢的问题引言Cache的工作原理需要关闭DCache的情况鱼和熊掌都想要使用内存保护单元MPU使用内存隔离/同步指令 总结参考文献 引言 …

catkin cmake官方教程解读以及资料补充

这里写目录标题 cmakei下载cmake 官方教程教程1step1最低版本 报错报错2 vscode 路径没有配置好setting.json通过该方式打开的似乎是一个全局的文件,可以为本工作文件夹下设置一个本地的吗 报错3配置cmake工具链准确的流程报错4 cpp中main函数返回值问题结果 官方教…

虚拟机centos7无法正常启动:Generating“/run/initramfs/rdsosreport.txt“

一、问题描述 1.出现问题的原因 Centos 7 断电导致 ,最近电脑老是自己蓝屏,然后重启电脑,一个月里断断续续可能有个3次左右,突然发现启动就这个问题,估计是虚拟机异常物理断电导致的系统磁盘出错了 2.具体的报错信息…

打开冒险岛提示丢失vcruntime140.dll的解决方法

今天准备打开冒险岛软件的时候,当打开我自己的冒险岛软件后,弹出了一个对话框,内容是:由于找不到vcruntime140_1.dll,无法继续执行代码。重新安装程序可能会解决此问题。 我很纳闷,前几天还好好着呢。于是…

【ARIMA-WOA-LSTM】合差分自回归移动平均方法-鲸鱼优化-长短期记忆神经网络研究(Python代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

vue新手入门实践教程

介绍vue运行环境的搭建、vue项目的初步构建与运行、使用element-ui组件构建页面内容、使用页面模块与路由设置等。基于此教程,可以初步实现一个静态网页,并对vue项目由一定理解。 1、基本环境安装 vue项目的编译运行依赖nodejs环境,故需要下…

使用rasterio计算tif文件中两点之间的物理实际距离

假设有一张含有地理坐标信息的tif格式的图片及其对应的jpg或者png格式的普通图片 如下图所示: 其中第一张为tif格式的地理信息图,第二张为按照一定比例下采样之后转换得到的普通jpg图片 如何计算jpg图片中任意两点之间的实际距离呢? 比如&a…

终于等到你:期待已久的CAD .NET 15 Crack

期待已久的CAD .NET 15 现已推出!新包包括一个.NET 6 框架构建。目前,它仅与 Windows 兼容,但我们计划在未来的版本中添加对 Linux 的支持。 我们还进行了一系列更改以增强库的稳定性并改进其导入和导出功能。他们来了: 改进了 DW…

Scala--03

第6章 面向对象 Scala 的面向对象思想和Java 的面向对象思想和概念是一致的。 Scala 中语法和 Java 不同,补充了更多的功能。 6.1类和对象详解 6.1.1组成结构 构造函数: 在创建对象的时候给属性赋值 成员变量: 成员方法(函数) 局部变量 代码块 6.1.2构造器…

详解c++---map的介绍

目录标题 map容器的介绍pair的介绍map的构造函数insert函数make_pair函数find函数map的[ ]重载multimap map容器的介绍 通过之前的学习想必大家对set容器的理解应该非常的深刻了,我们知道他的底层是一个k结构的搜索二叉树,可以对数据进行去重并排序&…

Redis实现分布式锁详解

Redis实现分布式锁详解 一 分布式锁简介二 Redis实现分布式锁核心思路三 Redis实现分布式锁实践3.1 锁的基本接口3.2 加锁解锁逻辑3.3 修改业务逻辑3.4 单元测试观察结果 四 Redis分布式锁误删情况4.1.Redis分布式锁误删情况逻辑说明:4.2 解决Redis分布式锁误删问题…

当心健身跑步应用悄悄泄露用户住址

据BleepingComputer 6月11日消息,美国北卡罗来纳州立大学罗利分校的研究人员发现 Strava 应用程序的热图功能存在隐私风险,可能导致攻击者识别出用户的家庭住址。 Strava 是一款流行的跑步伴侣和健身追踪应用程序,在全球拥有超过 1 亿用户&a…

2个月“我“从功能测试进阶到自动化测试,offer收到麻了...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 自动化测试是将人…

C++【STL】之vector模拟实现

C vector类模拟实现 上一篇讲解了vector的使用,这一篇接着介绍vector的模拟实现,这里依然是讲解常用接口的模拟实现,话不多说,正文开始! 文章目录: C vector类模拟实现1. 成员变量2. 默认成员函数2.1 构造…

使用lcov生成覆盖率报告

使用lcov生成覆盖率报告 1- 需要准备的东西1.1 工具lcov1.2 需要用到中间脚本 gcno gcda1.3 源文件 2- 生成覆盖率报告2.1 step1: 编译阶段2.2 step2: 数据收集与提取阶段2.3 step3: 报告形成阶段2.4 step4: lcov生成覆盖率报告结果info文件2.5 step5: genhtml 命令生成网页版的…