问题描述

        今天在环境迁移的时候遇到了这样一个报错内容ImportError: libcudnn.so.8: cannot open shared object file: No such file or directory,在本机跑的时候是没出现这样情况的,那为什么在这里出现了呢?看报错内容应该是少了什么文件,把这个文件加上去就可以了。

原因分析

        看这个名字的话好像是和什么库文件有关,而lib后面又是cudnn(nvidia加速计算库),再联系到之前服务器安装cuda的时候并没有配置该库文件,所以是这个错误无疑了。

        而在冲浪的时候发现了这样一个帖子,更证明了我的推断。ImportError: libcudnn.so.8: cannot open shared object file: No such file or directoryicon-default.png?t=N7T8https://blog.csdn.net/weixin_41012399/article/details/119350929

        不美的是,这个作者并没有给出这个下载的cudnn文件,还得自己下载,而我也老是忘自己的密码,所以浪费很多时间来搞定这个问题,为了不让后面的人少走些弯路,在这里给出全套的操作和资源包。

解决方案

        首先,需要将安装的cuda版本对应的包路径软链接到cuda上,具体操作以下代码:

sudo ln -s /usr/local/cuda-11.6 /usr/local/cuda

        有的博客中会让先执行这条命令:sudo rm -rf cuda,千万不要,个人经验,这条命令是用来删除本来的cuda文件夹的,如果对系统文件以及前人都做了些什么操作,千万不要随意的rm(删除),这个是个非常严重的事情,万一崩了后果不堪设想!

        接下来就是从官网下载相对应的cudnn版本,具体对应关系可以查看我之前的一篇博客:conda安装和cudnn安装的建议---能用命令行解决的事不要费劲下载icon-default.png?t=N7T8https://blog.csdn.net/BetrayFree/article/details/132103375

        我的系统信息如下:系统ubuntu20.04,cuda11.6,所以如果和我一样的可以从下面这个链接直接获取cudnn的tar.xz包:链接: https://pan.baidu.com/s/1t_e01svu46kn-56nwVHXRQ?pwd=bbqq
        下载完成后,用scp命令上传到服务器:

scp -r cudnn-linux-x86_64-8.8.0.121_cuda11-archive.tar.xz user@ip:destination folder

        而后把这个压缩文件解压,需要注意的是J是大写:

tar xvJf cudnn-linux-x86_64-8.8.0.121_cuda11-archive.tar.xz

        ok,需要注意的重头戏来了,我们上面分析过,是因为缺少库文件,那把库文件加上就可以了,回看cudnn的安装有很多种,包括且不限于deb安装和解压缩并且移动到cuda对应的目录下,在这里我们采用第二种:把inculde和lib(注意不是lib64)里的文件复制到cuda中:

sudo cp include/cudnn.h /usr/local/cuda/include

sudo cp lib/libcudnn* /usr/local/cuda/lib64

sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

         其中最后一步的作用是给所有用户添加可读的权限,否则可能程序识别不到。具体权限相关请查看chmod命令的用法-CSDN博客chmod a+r *:用户自己使用此命令,可给所有用户添加可读的权限超级用户给其他用户设置权限:sudo chmod a+rx /home/user 使所有人可以访问,读取文件,bu no Write指令名称 : chmod使用权限 : 所有使用者使用方式 : chmod [-cfvR] [–help] [–version] mode file…说明 : Linux/Unix 的档...https://blog.csdn.net/fengxiwutong369/article/details/87928158

完结撒花

        解决完了这个东西,记一些随笔下来:

        压缩文件目录到指定的压缩文件名称:

tar -zcvf Clip-Vit.tar.gz clip-vit-large-patch14/

or

tar -zcvf VIT.tar.gz /home/visionx/.cache/huggingface/hub/models--openai--clip-vit-large-patch14

        二者不同之处在于,第一条需要在本文件目录下方可,而第二条在任意目录下均可以,毕竟是完整目录,但是解压的时候第二个也是解压的完整路径,所以会麻烦一些。

        解压缩tar.gz:

tar -zxvf VIT.tar.gz

        其中-后面的每个字母都有具体意义:选项 z,通过gzip压缩或解压;选项 x,解压tar包;选项 c,表示创建新的tar包;选项 v,表示显示详细tar执行过程;选项 f,指定压缩的文件名字;选项 t,不解压查看tar包的内容;选项 p,表示保持文件的原有属性;选项 j,通过bzip2命令压缩或解压;选项 z,通过gzip压缩或解压;选项 x,解压tar包;选项 C(大写),指定解压的目录路径。

        具体的可以查看这个Linux打包命令之tar详解icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/447604518        不过要是解压tar.xz则要用:

tar xvJf cudnn-linux-x86_64-8.8.0.121_cuda11-archive.tar.xz

        这是很不同的一点。

        除了压缩和解压,最近还用到了统计目录和文件个数的命令:

        1、统计当前目录下文件的个数(不包括目录)

ls -l | grep "^-" | wc -l

         2、统计当前目录下文件的个数(包括子目录)

ls -lR| grep "^-" | wc -l

        3、查看某目录下文件夹(目录)的个数(包括子目录)

ls -lR | grep "^d" | wc -l

        4、统计当前文件夹下叫某某的文件的数量

find . -name filename | wc -l

        5、统计当前文件夹下指定类型的文件的数量        

find -name "*.js" | wc -l

        具体参考Linux 统计目录下文件数量的方法icon-default.png?t=N7T8https://blog.csdn.net/zenglongjian/article/details/129975294        ok,最近的学习成果汇报结束,希望各位老师批评指正。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐