Pytorch-cuDNN version mismatch: PyTorch was compiled against 7005 but linked against 7103

事情是这样的,从pytorch=3.0.0换了个版本到pytorch=3.0.1的时候,conda update完就报这个运行时错误了。
原因是PyTorch用cudnn=7.0.5编译的,但是在这个环境中只找到了版本为7.1.3cudnn,版本错误改了好久,大部分是说把7.1.3的环境从$PATH变量中删除就好了,可服务器上好几个环境怎么都没找到7.0.5的,不知道删了之后该链接到哪儿。问题截图如下:
Pytorch-cuDNN version mismatch: PyTorch was compiled against 7005 but linked against 7103_第1张图片

解决方案:

安装cudnn=7.0.5,并将libcudnn.so链接到7.0.5版本上。

1. 查看cuda版本:

cat /usr/local/cuda/version.txt , 这里我的cuda是9.0.176。

2. 下载对应的cudnn

路径:https://developer.nvidia.com/rdp/cudnn-archive ,这里我在服务器上配置的,所以下载的Linux版本的。
Pytorch-cuDNN version mismatch: PyTorch was compiled against 7005 but linked against 7103_第2张图片
下载完是后缀为solitairetheme8的文件~
在这里插入图片描述

3. 解压

cp cudnn-9.0-linux-x64-v7.solitairetheme8 cudnn-9.0-linux-x64-v7.0.5.tgz
tar -zxvf cudnn-9.0-linux-x64-v7.0.5.tgz

4. 复制到工作目录下

这里建议查一下当前版本7103在什么位置,看到网上好多是放在/usr/local/cuda/lib64下,刚开始我也放在这个底下了,可还是没有用。后来通过find ./ -name *cudnn*在当前用户根目录下查了下包含cudnn的都有哪些,才发现在anaconda3/envs/sanra123/lib下包含了cudnn=7.1.3的版本(这里sanra123是自己的conda下的环境名哦),实际工作时会在这个目录下去找。所以下一步把cudnn=7.0.5的版本复制到这个目录下,配置一下环境变量。

sudo cp cuda/include/cudnn.h /home/root/anaconda3/envs/sanra123/include 
sudo cp cuda/lib64/libcudnn* /home/root/anaconda3/envs/sanra123/lib
sudo chmod a+r /home/root/anaconda3/envs/sanra123/include/cudnn.h /home/root/anaconda3/envs/sanra123/lib/libcudnn*

5. 配置环境变量

设置环境变量有两个位置,/etc/profile和自己用户名下的~/.bashrc。服务器上就在自己的用户名下进行了配置。这段我其实忘了有没有用了(大概率是没用的),因为之前其实在/etc/profile下已经找到这个环境变量了,也是指到lib64下。后面是自己改了下.bashrc设错了,就又设了下。不过,记一下备忘吧,其实是不需要这步了的。

export PATH=/usr/local/cuda-9.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH
export PATH=/home/root/anaconda3/bin:$PATH

6. 设置软链接

进入/home/root/anaconda3/envs/sanra123/lib目录(即刚刚找到的工作目录),查看有关cudnn的文件,可以看到,虽然将7.0.5移动到了这里,但实际链接到的还是7.1.3,所以这里需要改一下软链接指向啦。
在这里插入图片描述

sudo ln -sf libcudnn.so.7.0.5 libcudnn.so
sudo ln -sf libcudnn.so.7.0.5 libcudnn.so.7

7.测试输出

改好了,到python中测一下。输出为7005的cudnn版本证明我们终于改好这个问题啦!真棒,夸夸~

import torch
print(torch.backends.cudnn.version())

参考:
cudnn官方(5-6页)
cudnn安装步骤看的这里啦,不过配置那步感觉要改一下的
谢谢这里的链接提示

你可能感兴趣的:(Python,Linux学习)