torch.cuda.is_available() 的返回值为什么一直是False?

故事要从一只蝙蝠说起……
总而言之,就是在家用实验室的linux服务器跑程序遇到的种种问题。
首先,可以参考这篇文章torch.cuda.is_available() 的返回值为何一直是False?
然后,是我的故事


全文总结,太长不看系列:

  1. 没有安装cuda、cudnn
  2. 安装的cuda、cudnn和你安装的pytorch对应的build环境中的cuda版本不符合
  3. 电脑安装的显卡驱动低于CUDA版本所需
  4. 集成显卡和独立显卡并存的电脑,需要将独立显卡设为默认。

安装了python3.6+pytroch1.0.1,conda install pytorch自动给我安装了最新版本的cudatoolkit(10.0)和cudnn(7.6.5),服务器自带的cuda是7.5的,运行别人的代码,报错:

raise RuntimeError('Attempting to deserialize object on a CUDA '
RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False. If you are running on a CPU-only machine, please use torch.load with map_location='cpu' to map your storages to the CPU.

然后,用网上的方法检查配置的conda环境能不能用gpu:

python
import torch
torch.cuda.is_available()

果然给我返回了False.
!!!一定记得要import torch,不然你可能连torch.cuda.is_available()都不能运行

原因一

服务器原有的是cuda 7.5,和我安装的pytorch对应的cuda10.0不兼容,所以不能检测到cuda。于是,我着手安装cuda10.0和cudnn 7.6.5

因为是实验室的linux服务器,没有sudo权限,靠Linux无root无sudo权限在用户目录安装cuda9.2和cudnn7.1安装完了。

nvcc -V

cuda的版本没问题:

nvcc: NVIDIA ® Cuda compiler driver
Copyright © 2005-2018 NVIDIA Corporation
Built on Sat_Aug_25_21:08:01_CDT_2018
Cuda compilation tools, release 10.0, V10.0.130

满怀希望地torch.cuda.is_available(),仍然是False……

原因二

又看到一篇文章Win10下cuda10.1安装正确torch.cuda.is_available()为False的解决方法

原因:
我机子的显卡驱动版本太低,为398.xx,不支持cuda10.1
解决:
更新显卡驱动至当前最新版本(430.xx),问题解决

我运行了nvidia-smi,显示如下:

±----------------------------------------------------------------------------+
| NVIDIA-SMI 384.130 Driver Version: 384.130 |
|-------------------------------±---------------------±---------------------+

比原文的博主的版本还低……由于是实验室的服务器,不能更新驱动,只能退而求其次,安装低版本的cuda、cudnn和pytorch。

nvidia官网查看驱动与CUDA版本的对应情况:
在这里插入图片描述
可以看到,我这里驱动是384.130,因此,最高只能装CUDA9.0,更多详情也可见CUDA 版本,显卡驱动,Ubuntu版本,GCC版本之间的对应关系

利用conda list可以看到pytorch虽然是1.0.1版本,但是对应的Cuda还是10.0版本的。

# Name                    Version                   Build  Channel
……
cudatoolkit               10.0.130                      0  
cudnn                     7.6.4                cuda10.0_0  
……
pytorch                   1.0.1           cuda100py36he554f03_0  
torchvision               0.2.1                    py36_0  

首先,安装cuda9.0版本的pytorch,从pytorch官网找到一键下载的代码:

conda install pytorch==1.0.1 torchvision==0.2.1 cudatoolkit=9.0 -c pytorch

注:如果你用的是国内的源的话,就去掉 -c pytorch,因为这个参数指定了conda获取pytorch的channel,在此指定为conda自带的pytorch仓库。具体可以参考pytorch镜像安装【清华源】

看到build里面对应的版本变成cuda9.0,是想要的,选择y

The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    cudatoolkit-9.0            |       h13b8566_0       237.0 MB
    cudnn-7.6.4                |        cuda9.0_0       143.5 MB
    pytorch-1.0.1              |py3.6_cuda9.0.176_cudnn7.4.2_2       320.5 MB  pytorch
    torchvision-0.2.1          |             py_2          37 KB  pytorch
    ------------------------------------------------------------
                                           Total:       701.1 MB

The following packages will be UPDATED:

  pytorch            pkgs/main::pytorch-1.0.1-cuda100py36h~ --> pytorch::pytorch-1.0.1-py3.6_cuda9.0.176_cudnn7.4.2_2
  torchvision        pkgs/main/linux-64::torchvision-0.2.1~ --> pytorch/noarch::torchvision-0.2.1-py_2

The following packages will be DOWNGRADED:

  cudatoolkit                                    10.0.130-0 --> 9.0-h13b8566_0
  cudnn                                    7.6.4-cuda10.0_0 --> 7.6.4-cuda9.0_0


Proceed ([y]/n)? y

去找到cuda的历史版本,按照Win10下cuda10.1安装正确torch.cuda.is_available()为False的解决方法这篇文章重新安装cuda9.0和cudnn

最终

终于成功了!

$ python                                                                        
Python 3.6.8 |Anaconda, Inc.| (default, Dec 30 2018, 01:22:34) 
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.cuda.is_available()
True
>>>                 

原因三

博主在自己的win10的电脑上配置cuda,又失败了。

明明安装了cuda和cudnn,pytorch的版本也正确。

参考了win10下pytorch-gpu安装以及CUDA详细安装过程一文:

可能是因为默认调用集成显卡而造成的问题,那么接下来就是将独立显卡设为默认即可。

打开NVIDIA控制面板(没有的话需要按上面的链接去安装一下驱动),全局设置中选择高性能NVIDIA处理器即可。
在这里插入图片描述

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iteapoy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值