当前位置: 代码网 > it编程>前端脚本>Python > 【一文解决】已安装CUDA与Pytorch但torch.cuda.is_available()为False

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

2024年08月05日 Python 我要评论
已经安装CUDA与Pytorch。但执行如下Python脚本,输出结果为False,本文给出了尽可能详细全面的解决思路。

问题描述

已经安装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。

写在最后

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

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com