CUDA error: all CUDA-capable devices are busy or unavailable(待解决)
阅读原文时间:2021年04月20日阅读:1

学习实验到http://pytorch.panchuang.net/SecondSection/training_a_classifier/的
net.to(device)的时候发生如下报错

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-24-aa464e9d90d3> in <module>()
----> 1 net.to(device)

/home/asber/anaconda2/lib/python2.7/site-packages/torch/nn/modules/module.pyc in to(self, *args, **kwargs)
    384             return t.to(device, dtype if t.is_floating_point() else None, non_blocking)
    385 
--> 386         return self._apply(convert)
    387 
    388     def register_backward_hook(self, hook):

/home/asber/anaconda2/lib/python2.7/site-packages/torch/nn/modules/module.pyc in _apply(self, fn)
    191     def _apply(self, fn):
    192         for module in self.children():
--> 193             module._apply(fn)
    194 
    195         for param in self._parameters.values():

/home/asber/anaconda2/lib/python2.7/site-packages/torch/nn/modules/module.pyc in _apply(self, fn)
    197                 # Tensors stored in modules are graph leaves, and we don't
    198                 # want to create copy nodes, so we have to unpack the data.
--> 199                 param.data = fn(param.data)
    200                 if param._grad is not None:
    201                     param._grad.data = fn(param._grad.data)

/home/asber/anaconda2/lib/python2.7/site-packages/torch/nn/modules/module.pyc in convert(t)
    382 
    383         def convert(t):
--> 384             return t.to(device, dtype if t.is_floating_point() else None, non_blocking)
    385 
    386         return self._apply(convert)

RuntimeError: CUDA error: all CUDA-capable devices are busy or unavailable

首先之前因为指令conda install pytorch1.1.0 torchvision0.3.0 cudatoolkit=9.0 -c pytorch无法安装(可能是网络问题)
我是通过 pip install torch1.1.0 torchvision0.3.0 安装的 在这里并没有显示安装cuda的东西
anaconda中,按照这里的测试方法

# Python version
import sys
print('Python: {}'.format(sys.version))
#判断是否安装了cuda
import torch
print(torch.cuda.is_available())  #返回True则说明已经安装了cuda
#判断是否安装了cuDNN
from torch.backends import  cudnn 
print(cudnn.is_available())  #返回True则说明已经安装了cuDNN

输出

Python: 2.7.16 |Anaconda, Inc.| (default, Sep 24 2019, 21:51:30) 
[GCC 7.3.0]
True
True

说明这是anaconda的python,并且支持cuda和cudnn
Ubuntu下查看CUDA和CUDNN版本的方法

(base) asber@asber-X550VX:~$ cat /usr/local/cuda/version.txt
cat: /usr/local/cuda/version.txt: No such file or directory
(base) asber@asber-X550VX:~$ cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
cat: /usr/local/cuda/include/cudnn.h: No such file or directory
(base) asber@asber-X550VX:~$

这是一个疑问点
Ubuntu16.04下安装cuda和cudnn的三种方法(亲测全部有效)


网上看
出现CUDA error: all CUDA-capable devices are busy or unavailable报错的原因貌似还挺多的
拟定解决方案
1.先查看驱动程序是否ok
2.是不是下载pytorch的时候缺少包


先不去解决
补充一个现象:
当我学习到http://pytorch.panchuang.net/SecondSection/optional_data_parallelism/,
下载了 jupyter notebook 版本完整代码之后

运行成果,个人感觉这说明可能是我代码调用方式错误,不是环境的问题。
待调查哪里代码调用错误。