在安装好Anaconda3后,利用其自带的spyder运行程序,出现报错:

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.

接着运行

print(torch.cuda.is_available())

果然返回False
网上提供的解决办法是在torch.load后面加上一句map_location=‘cpu’。变成

torch.load(model_dir,map_location='cpu')

这个方法虽然可行,但本质上是用CPU资源在跑数据,运行时间较长。
另一种方法是改成:

torch.load(model_dir,map_location='cuda:0')

如此一来就实现了利用GPU跑数据,但程序报错。
猜想是CUDA与pytorch版本不符,其后的调试证实了这一想法。
具体解决步骤:(所用系统为windows10)
1.
桌面右键进入英伟达控制面板,查看显卡驱动版本号。

点击”组件“查看支持的CUDA版本:

根据上述版本号和CUDA最高适配版本,在下表中选择一个CUDA准备下载:

2.在下载之前,先去torch下载页面上找到适配的torch版本,注意前缀为”cpu"的版本不要下载,我们需要的是gpu版本。
ps:通过pip install命令下载的torch默认是cpu版本,这一点可以通过输入

import torch
torch.__version __

得知,输出为”torch-cpu",如果已经安装需要先卸载此模块重新通过本地下载whl文件安装。
whl安装包下载地址:
https://download.pytorch/whl/torch_stable.html

下载前缀是“cu"的,其后的100代表CUDA10.0,依此类推cu90代表CUDA9.0。
cp37代表python3.7.
当时安装Anaconda的时候默认python版本为3.8,版本太高找不到适配torch。
因此在Anaconda下又重新配置了一个python3.7的环境,以后在进入命令行的时候输入

conda activate py36

即可启动python3.7.
注意两个版本python安装的模块也是不相通的。
3.本地安装torch
进入选定版本的python环境命令行后,cd到安装包所在位置,
使用

pip install xxx.tar

conda install xxx.tar

即可安装torch。
4.安装CUDA和CUDNN
网上有许多详细教程,大致步骤为:
安装CUDA–配置系统环境变量–解压CUDNN–将CUDNN文件复制到CUDA对应文件夹下。
具体步骤参见:
https://blog.csdn/u010618587/article/details/82940528

至此CUDA与torch配置完毕,后续如需下载pytorch与torchvision仍需注意版本对应。
推荐使用清华源下载,速度较快。

https://mirrors.tuna.tsinghua.edu/anaconda/cloud/pytorch/win-64/

接着运行程序,问题解决:

更多推荐

torch.cuda.is_available()返回False的解决办法