使用onnx模型进行推理时,提示如下报错:
Could not load library libcudnn_ops_infer.so.8. Error: libcudnn_ops_infer.so.8: cannot open shared object file: No such file or directory
看了很多网上的方案都无法解决,尝试了找到环境中libcudnn_ops_infer.so.8文件的位置,并将其加入 ~/.bashrc 环境配置文件中,依然提示报错。
如果你也是在修改了cuda版本之后突然无法运行之前的代码,不妨试试我的解决方案。
先说结论:该错误会由于cudnn和cuda版本不匹配造成。
解决方案:
一.确保cuda版本安装正确
使用nvcc检查当前cuda版本
nvcc -V
得到结果
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Sep_21_10:33:58_PDT_2022
Cuda compilation tools, release 11.8, V11.8.89
Build cuda_11.8.r11.8/compiler.31833905_0
cuda tookit历史版本下载链接:cuda download
二.下载对应版本的cudnn
1.下载:
以我的为例,我系统为Ubuntu 系统版本为18.04,下载cudnn 8.6.0对应的版本。cudnn历史版本下载链接: cudnn download
2.上传
下载好之后上传至服务器后,cd进存放的路径,这里存放路径任意,都可以
我这里下载的文件名为: cudnn-local-repo-ubuntu1804-8.6.0.163_1.0-1_amd64.deb
在命令行执行:
sudo dpkg -i cudnn-local-repo-ubuntu1804-8.6.0.163_1.0-1_amd64.deb
sudo cp /var/cudnn-local-repo-ubuntu1804-8.6.0.163/cudnn-local-77B32ECB-keyring.gpg /usr/share/keyrings/
sudo apt-get update
第一条命令执行完会提示你第二条命令需要的路径是什么
紧接着,如果你根据官网提示的最后一条命令执行:
sudo apt-get -y install cudnn-cuda-11
如果报了如下提醒:
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package cudnn-cuda-11
则可以手动进行安装:
a.首先进入到刚才的目录下:
cd /var/cudnn-local-repo-ubuntu1804-8.6.0.163
会发现这三个.deb的文件
b.手动安装这三个文件
sudo dpkg -i libcudnn8_8.6.0.163-1+cuda11.8_amd64.deb
sudo dpkg -i libcudnn8-dev_8.6.0.163-1+cuda11.8_amd64.deb
sudo dpkg -i libcudnn8-samples_8.6.0.163-1+cuda11.8_amd64.deb
c.以上完成,验证一下是否安装成功:
whereis cudnn_version.h
返回:
cudnn_version: /usr/include/cudnn_version.h
cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
返回:
#define CUDNN_MAJOR 8
#define CUDNN_MINOR 6
#define CUDNN_PATCHLEVEL 0
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)
可以看到,cudnn 8.6.0成功安装。
接下来再重新运行刚才的代码,Could not load library libcudnn_ops_infer.so.8.报错就不会出现了。