Could not dlopen library ‘libcublas.so.XXX.0’ 的解决方法
Github
上的项目通常需要不同版本的tensorflow
,然而不同版本的tensorflow
可能需要不同的Cuda
版本。若Cuda
版本不对应,则不一定能成功调用GPU
,纵使程序成功运行,也是在大量占用CPU
资源。
本解决方法主要利用Cuda
各版本向下兼容的特点,即在当前版本Cuda
的库文件夹中放入所需要的高版本 library
文件。
声明:
- 本方法存在局限性;
- 本方法针对小白,大佬肯定可以从Cuda文件中直接找到需要的库文件,或者其它更优的解决方法,欢迎分享在评论区;
libcublas.so.10.0
相关库文件可以在个人主页进行下载
首先放上解决前后的实验运行截图:
上图是缺少libcublas.so.10.0
等库文件时的运行情况,程序运行期间,GPU
内存占用稳定在191MiB
。此时使用top
命令查看CPU
使用情况。
可以看出CPU
使用率来到了643%
,实际实验过程中1200%
也经常出现。
上图是添加libcublas.so.10.0
等库文件后的运行情况,GPU
利用率直接升至97%
,内存占用也是来到了8000+MiB
。此时再用top
命令查看CPU
使用情况。
发现CPU
占用只有120%
左右。使用nvcc --version
命令查看当前Cuda
版本。
仍旧为9.0
,并不影响其它需要Cuda9.0
环境的程序运行。
下面介绍解决问题的整体过程:
- 安装
VMware
虚拟机 - 下载
Ubuntu18.04
镜像iso文件 - 在VMware中安装Ubuntu18.04
- 下载并在ubuntu18.04中安装
Cuda10
- 找到安装的库文件,
拷贝
到实验主机中
接下来详细说明解决过程以及操作原因:
第1步
:安装VMware虚拟机,选择试用for
windows
即可。
(本文假定使用环境为:个人PC系统为Windows10
,跑程序使用系统为Ubuntu
的公共机。为了获取cuda10的库文件,我们需要将其进行安装,因为要防止破坏公共机上已有的Cuda环境,所以采用在个人PC上安装虚拟环境)
第2步
:下载Ubuntu18.04镜像iso文件,选择第一个即可。
(笔者最开始选用了Ubuntu20
,但是安装过程中报内核版本错误
,修改内核会导致系统的不稳定,所以降回18.04)
第3步
:VMware中安装Ubuntu。
第4步
:下载并在ubuntu18.04中安装Cuda。
(因为公共机采用的是ubuntu系统,因此下载ubuntu对应的cuda10)
安装指令参考官方指导:
但是在执行第四步sudo apt-get install cuda
时可能报错,因笔者未能截屏,因此借用Jayce~大佬的实验截屏,报错类型完全相同,不过笔者报错内容是cuda-10-0
。
这里将第四条指令修改为
sudo apt-get install aptitude
sudo aptitude install cuda
第5步
:找到安装的库文件,拷贝复制到实验主机中。
(安装结束后所需要的库文件在/usr/local/cuda/lib64
目录下,拷贝至公共机的Cuda库文件目录[……/lib64]
下即可)
这里复制只用复制so.10.0
与so.10.0.130
文件,其余文件不用复制,以防破坏原Cuda库文件,复制过程中 !!!没有!!! 覆盖
的操作。
复制后部分
库文件夹如下:
至此,即可成功加载库文件,并调用GPU。