解决RuntimeError: CUDA error: invalid device symbol问题(已解决)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决RuntimeError: CUDA error: invalid device symbol问题(已解决)相关的知识,希望对你有一定的参考价值。

参考技术A 最近在跑一个程序,一直报RuntimeError: CUDA error: invalid device symbol错误,错误如下:

我使用的环境是Python3.7,torch1.4.0,cuda10.2

我确信程序肯定没有问题,就是环境的事情,google了所有的解决方法,全部都不行,崩溃。但是我肯定是cuda版本不合适,于是我用开启了更换cuda版本的漫长之路。我试图将cuda10.2版本更换成10.1,经过了各种各样的安装方法,各种修改/.bashrc还是失败,nvcc -V显示的一直是10.2版本。在我打算重新在GPU上重新开个账号,一切全新的重新开始之前,我做了最后的挣扎尝试,没想到竟然成了。

我查看当前torch1.4.0所需要的cuda版本是10.1

我直接重装一下带有cuda的torch呢,然后执行了以下命令

···

pip install torch===1.4.0+cu100 torchvision===0.5.0+cu100 -f https://download.pytorch.org/whl/torch_stable.html

···

安装完后,我又用nvcc -V查看了一下cuda版本,结果还是10.2,但是我重新运行了程序,完成Cuda error的错误已经解决了。

这个问题困扰了我整整三天,简直崩溃,写下来希望能帮助到其他人,能帮助到一个人就表示我没白写,哈哈哈。

解决问题:RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is_available()

问题:

Traceback (most recent call last):
  File "test.py", line 22, in <module>
    model = loadmodel()
  File "/home/joshuayun/Desktop/IBD/loader/model_loader.py", line 48, in loadmodel
    checkpoint = torch.load(settings.MODEL_FILE)
  File "/home/joshuayun/.local/lib/python3.6/site-packages/torch/serialization.py", line 387, in load
    return _load(f, map_location, pickle_module, **pickle_load_args)
  File "/home/joshuayun/.local/lib/python3.6/site-packages/torch/serialization.py", line 574, in _load
    result = unpickler.load()
  File "/home/joshuayun/.local/lib/python3.6/site-packages/torch/serialization.py", line 537, in persistent_load
    deserialized_objects[root_key] = restore_location(obj, location)
  File "/home/joshuayun/.local/lib/python3.6/site-packages/torch/serialization.py", line 119, in default_restore_location
    result = fn(storage, location)
  File "/home/joshuayun/.local/lib/python3.6/site-packages/torch/serialization.py", line 95, in _cuda_deserialize
    device = validate_cuda_device(location)
  File "/home/joshuayun/.local/lib/python3.6/site-packages/torch/serialization.py", line 79, in validate_cuda_device
    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.

解决方法1:

加载的时候使用cpu

model = torch.load('model/pytorch_resnet50.pth',map_location ='cpu')

解决方法2:

在./site-package/torch/serialization.py文件中更改

def load(f, map_location='cpu', pickle_module=pickle, **pickle_load_args):

为:

def load(f, map_location=None, pickle_module=pickle, **pickle_load_args):

解决方法3:

非要使用GPU的话,那环境出问题了,可能的地方有很多,查查吧。

以上是关于解决RuntimeError: CUDA error: invalid device symbol问题(已解决)的主要内容,如果未能解决你的问题,请参考以下文章

如何解决这个奇怪的错误:“RuntimeError: CUDA error: out of memory”

使用VGG网络训练发生错误RuntimeError: CUDA out of memory解决方案:

使用VGG网络训练发生错误RuntimeError: CUDA out of memory解决方案:

RuntimeError: cuda runtime error (59) : device-side assert triggered(已解决)

解决问题:RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is_available()

解决问题:RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is_available()