ImportError: libcudnn.so.8: cannot open shared object file: No such file or directory

问题描述

首先,先把遇到的两次报错记录下:

ImportError: libcudnn.so.8: cannot open shared object file: No such file or directory

ImportError: libcupti.so.12: cannot open shared object file: No such file or directory

以上2个错误均出在import torch的时候。其实这俩问题对于有一定深度学习基础的程序员而言不算陌生,也不难理解,即缺少两个cudnn相关的文件,那么解决方案就一定是把对应的cudnn装好就完事了。
但我遇到的问题没那么简单,请听我娓娓道来——

我本机上,有base和Qwen两个conda环境,安装的均为torch==2.3.0,同时服务器安装的cuda版本为CUDA12.1。我使用Qwen环境时,import torch并不会出错;但在使用base环境时,该命令即报错“libcudnn.so.8: cannot open shared object file: No such file or directory”。

排查过程

问题描述完了,看看我是怎么一点点排查的。

  1. 需要提前声明的是,我在这两个环境下安装的torch版本一致,甚至安装命令都是一样的;
  2. 首先,我想到,既然Qwen环境可以import torch,那么说明libcudnn.so.8实际上是存在于服务器上的,只不过base环境的python没有找到,所以我执行了以下命令
sudo find / -name libcudnn.so.8

经过查找,发现本机上有两个该文件:

/home/gpuadmin/anaconda3/envs/Qwen/lib/python3.10/site-packages/nvidia/cudnn/lib/libcudnn.so.8
/home/gpuadmin/.local/lib/python3.10/site-packages/nvidia/cudnn/lib/libcudnn.so.8

显而易见,libcudnn.so.8的两个文件,分别位于/home/gpuadmin/anaconda3/envs/Qwen/lib下,以及/home/gpuadmin/.local/lib/下。这也正能说明为何Qwen环境可以导入torch不报错,那是因为在Qwen环境下单独安装了cudnn,但base环境没有
3. 至此似乎问题解决了?非也,因为在我的~/.profile文件中,有这样一句定义:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi

这个定义也不难理解,即如果家目录下存在.local/bin,那么就将其加在环境变量首位。那么问题来了,既然nvidia/cudnn/lib/libcudnn.so.8这个文件位于该文件夹下,为什么base环境会找不到呢?
而且,如果你使用conda install -n base cudnn该命令指定进行cudnn的安装,anaconda反而会提示你相关库已经在/home/gpuadmin/.local/lib/python3.10/site-packages/nvidia/cudnn下,不会再次安装,然而我在使用时,却索引不到
4. 总之,我们还是可以通过对LD_LIBRARY_PATH的配置,将libcudnn.so.8所在文件夹设置进去;由于后续又用相同的方法发现缺少的libcupti.so.12文件所在文件夹,所以一并加入LD_LIBRARY_PATH:

export LD_LIBRARY_PATH=/home/gpuadmin/.local/lib/python3.10/site-packages/nvidia/cudnn/lib:/home/gpuadmin/anaconda3/envs/Qwen/lib/python3.10/site-packages/nvidia/cuda_cupti/lib:/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH

总结

最终总结下,发现这类cudnn文件缺少该怎么办:

  1. 先用find命令,看看本机到底有没有这个文件;
  2. 如果有,则先判断下为何这个文件没法被索引到
  3. 简单粗暴的索引到的方法,就是将它加到$LD_LIBRARY_PATH里去
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_illusion_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值