Jupyter Notebook常见错误(一)

一、错误类型:

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.

谷歌翻译结果

超时错误:尝试反序列化 CUDA 设备上的对象,但 torch.cuda.is_available() 为 False。 如果您在仅有CPU 的机器上运行,请使用带有 map_location='cpu' 的 torch.load 将您的存储映射到 CPU。

说明:torch.cuda.is_available()语句是判断GPU是否可用的语句,返回true说明GPU可用。但是我们现在的返回结果是false。

二、错误分析

那么应该这么解决这个问题呢?经过分析有两种可能性:

1.你的电脑没有自带GPU

这个可能性的验证十分简单,只需打开任务管理器,点击性能选项,即可看到总体配置情况:

Jupyter Notebook常见错误(一)_第1张图片

 可以看到我的电脑是自带GPU的,说明不是这个错误。

(如果没有GPU,请参照下文的“笼统版解决思路”)

2.CUDA与pytorch的版本不符

在cmd中输入nvidia-smi语句即可查看

nvidia-smi

我的显示结果是这样的:

Jupyter Notebook常见错误(一)_第2张图片

可以看到CUDA版本为11.2,由下文的“根源版解决思路”可以验证确实是版本不符的问题。

三、解决方法

1.笼统版解决思路:

根据谷歌翻译的提示,找到所有的torch.load()语句,将map_location='cpu'字段加入其中即可,以下列语句举例:

torch.load(model_file)

只需改为:

model = torch.load(model_path, map_location='cpu')

总结:这种方法并不治本,对于有GPU的电脑来说不仅浪费了硬件资源,而且每次跑代码都需要在后面加上这一个选项,并修改所有使用到GPU的语句,因此并不推荐。

2.根源版解决思路

(1)查看原有的pytorch包类型,找到Anaconda文件夹中site-packages文件:

比如我的是存放在:D:\ProgramData\Anaconda3\Lib\site-packages 路径下的,结果如下:

Jupyter Notebook常见错误(一)_第3张图片

可以看到大多都是cpu类型的,难怪会报错。所以我们将其全部删除并前往pytorch官网下载对应版本。(地址:https://pytorch.org/get-started/locally/#no-cuda-1)

(2)查找CUDA版本对应的pytorch包类型

Jupyter Notebook常见错误(一)_第4张图片

 可以看到11.3版本的CUDA需要三个包,序号4是地址(后面要用这个)

如果发现没有相应的CUDA类型,可到点击install previous versions of PyTorch选项进入查找:

Jupyter Notebook常见错误(一)_第5张图片

比如我是windows下11.2的CUDA,因为匹配不到对应的型号,所以安装11.1对应的pytorch类型即可。 

 Jupyter Notebook常见错误(一)_第6张图片

注意:此步pytorch类型一定要严格和CUDA的版本对应。因为pytorch官方没有给出对应的11.2版本,我在查阅资料后才使用11.1版本对应的pytorch。

(3)下载相应的包

此处推荐以包的形式进入序号4中的地址分别下载:https://download.pytorch.org/whl/torch_stable.html

当然也可以通过fanqiang或换源的方式在cmd控制台中直接输入命令下载,但可能因为网速原因会下载不成功:

pip install torch==1.9.0+cu111 torchvision==0.10.0+cu111 torchaudio==0.9.0 -f https://download.pytorch.org/whl/torch_stable.html

以CUDA11.2版本举例,参照上图,共有以下的三个包:

torch==1.9.0+cu111
torchvision==0.10.0+cu111
torchaudio==0.9.0

 进入地址页面发现长长的一串,下面以此句为例解释说明各字段含义:

cu111/torch-1.9.0%2Bcu111-cp39-cp39-win_amd64.whl

其中cu111表示cuda10.1 ,cp39表示CPython 3.9 版,win_amd64表示这是为 64 位 Windows 编译的。详细说明请参照:python下载包文件名中一些常见字段的含义_云隐雾匿的博客-CSDN博客

那么如何查看python版本呢?在搜索框中输入cmd,控制台里输入命令即可:

python --version

我的python版本是3.9的,而windows现在一般都是64位的。 

准备工作完毕,下面依次下载:

torch==1.9.0+cu111

Jupyter Notebook常见错误(一)_第7张图片

 torchvision==0.10.0+cu111:

Jupyter Notebook常见错误(一)_第8张图片

 torchaudio==0.9.0:

Jupyter Notebook常见错误(一)_第9张图片

最后找到刚下载的三个包,将它们复制到site-packages文件夹下,也就是之前你删除不正确的pytorch包的地方。

四、验证

在jupyter notebook中输入下列语句:

python
import torch
torch.cuda.is_available()

如果输出结果为True,那么恭喜你,已经大功告成了。

你可能感兴趣的:(那些神奇的问题,大数据,python,pycharm)