动手学深度学习d2l报错问题及解决过程

动手学深度学习d2l报错问题及解决过程

背景:前一周因为各种事情耽误没有继续学习动手学深度学习的课程,但是这两天我在继续学习时发现程序不能正常运行。尝试了很久,也用了各种方法,花费了大量时间。记录下来一是给我未来遇到同样问题时能够更快地解决,也希望给其他人一个参考。

在这次解决报错过程中,遇到了非常多的错误,部分错误找到了原因后成功解决,部分错误只能通过重装环境解决,并未理解错误的原因。

本来发到了个人博客中,不过想到互联网中能搜到解决方法太少,而我的博客很难搜到,所以分享到知乎。知乎导入markdown的功能是真难用,导入后错误很多。

报错1:RuntimeError: Detected that PyTorch and torchvision were compiled with different CUDA versions. PyTorch has CUDA Version=11.7 and torchvision has CUDA Version=11.8. Please reinstall the torchvision that matches your PyTorch install.

我最初下载的就是CUDA11.8,之前运行一直没有报错,但突然运行报错CUDA版本不匹配。原因不清楚。我最近两周在使用大语言模型,频繁下载删除很多CUDA,此时我怀疑是我不小心使用d2l的conda环境并且下载了什么东西导致了冲突。既然冲突,我就只能切换CUDA版本:

conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia

报错2:ValueError: numpy.ndarray size changed, may indicate binary incompatibility. Expected 96 from C header, got 88 from PyObject

切换CUDA版本后依然无法运行,此时这个警告信息表示Numpy库在读取数组时与C头文件不兼容,可能会导致错误或异常结果。这通常是由于不同版本的Numpy库之间的二进制不兼容性引起的。确定是numpy的问题,于是更新numpy:

conda install numpy

报错后仍然有错误,提示:

报错3:ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.d2l 0.17.6 requires numpy==1.21.5, but you have numpy 1.24.3 which is incompatible.

d2l所依赖的numpy版本是1.21.5,更新后虽然解决了报错2,但是引起了其他问题!此时陷入了进退两难,但此时我并未认识到这是d2l的错误,我潜意识认为是我用其他环境时不小心改变了d2l的环境。于是我多次重新建立conda环境并安装CUDA等,浪费了大量时间!

报错4:module 'torch' has no attribute '_six'

装CUDA的时候遇到了一次这个问题,但我明明使用conda list|_six 能找到。之后搜索无果后再次重装。具体解决方法不清楚。

报错2仍未解决!所以我重装conda环境后,把问题重心放到了解决报错2。

机缘巧合我在d2l的官方仓库搜到了相同的提问,但是没有答案!于是我顺藤摸瓜继续在d2l的issue中找相似的问题。功夫不负有心人,我找到了解决方法:

ValueError: numpy.ndarray size changed, may indicate binary incompatibility. · Issue #2183 · d2l-ai/d2l-en (github.com)

简单解释:这是d2l的bug,和numpy不兼容,已经在d2l==1.0.0-alpha0版本修复。

解决方法 :更新d2l版本:

pip install d2l==1.0.0-alpha0

报错5:jupyter notebook的一系列错误

重装时jupyter也出现了很多错误,比如:

弹窗一个文件,内容经过搜索是跳转到浏览器的html代码,但我用的是WSL2,没有安装浏览器,它又不可能安装。不清楚怎么解决,重装conda环境后已经没有这个错误了。

总之,这个阶段按照教程总是有各种各样的报错,让人崩溃的连环报错。无解,只能重装conda环境。

报错6:AssertionError Could not load library libcudnn_cnn_infer.so.8. Error: libcuda.so: cannot open shared object file: No such file or directory

更新d2l后仍然不能正确运行结果!此时只有少量的笔记可以正常执行,大部分笔记都不能运行。错误也十分奇怪,内核突然挂掉,只显示:内核似乎挂掉了,它很快将自动重启。jupyter notebook页面上甚至没有报错。仔细查找WSL2命令行才找到报错,询问Claude后发现:是因为没装cuDNN。只能尝试装cuDNN库。(但我之前没装也没报错啊)

解决方法:装cuDNN

安装cuDNN:

  1. CUDA官网 中找到对应版本的cuDNN,我安装的是CUDA12.0,所以下载了这个: cuDNN v8.8.1 (March 8th, 2023), for CUDA 12.x
  2. 下载完成后移动到WSL2中,位置随意。下载完成后解压:
shell     sudo tar -xvf cudnn**    #**部分用tab自动补全

​ 解压后进入文件夹中

  1. 然后把解压得到的文件分别拷贝到对应的文件夹:
    #以下是安装命令   
   sudo cp -r /lib/ /usr/local/cuda-12.0(自己检查具体的版本修改路径)/lib64/    
sudo cp -r /include/ /usr/local/cuda-12.0(自己检查具体的版本修改路径)/include/
#为更改读取权限: