故事要从一只蝙蝠说起……
总而言之,就是在家用实验室的linux服务器跑程序遇到的种种问题。
首先,可以参考这篇文章torch.cuda.is_available() 的返回值为何一直是False?
然后,是我的故事
全文总结,太长不看系列:
- 没有安装cuda、cudnn
- 安装的cuda、cudnn和你安装的pytorch对应的build环境中的cuda版本不符合
- 电脑安装的显卡驱动低于CUDA版本所需
- 集成显卡和独立显卡并存的电脑,需要将独立显卡设为默认。
安装了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处理器即可。
更多推荐
torch.cuda.is_available() 的返回值为什么一直是False?
发布评论