在使用服务器的tensorflow1.14时,发现GPU内存占用很低,才100多M,而且GPU利用率为0%
这根本没用GPU跑啊
回过头看编译输出的报告
出现了类似于
Could not dlopen library 'libcufft.so.10.0'; dlerror: libcufft.so.10.0: cannot open shared object file: No such file or directory
以及
Cannot dlopen some GPU libraries. Skipping registering GPU devices...
一类的报错
看了一下服务器里的CUDA安装的是9.0
实际上tf1.14和CUDA9.0是不匹配的,具体的匹配关系请参考
关于这个问题如何解决,网上的解决方案众说纷纭,我也是菜鸡代码搬运工,只能一个个尝试
有的说是未配置 LD_LIBRARY_PATH的原因
直接在终端中输入
vim ~/.bashrc
按a进入编辑,在结尾添加
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda-9.0/bin:$PATH
按Esc退出编辑 ,输入:wq保存
终端中输入
source ~/.bashrc
使其生效
我的实际操作中发现,自己并不是这个问题。
有的说如果的报的文件和你安装的CUDA版本是相同的,那可以通过
ldconfig /usr/local/cuda-9.0/lib64
来解决。参考ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory
不过,我也不是这个问题
有的说是是创建一个libcudart.so的软链接就可解决
终端中输入,
sudo ln -s /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudart.so.10.2 /usr/lib/x86_64-linux-gnu/libcudart.so.10.1
为10.0创建了软连接,我也尝试了,可能是版本不同的问题,进入root后具体操作中使用的是
ln -s /usr/local/cuda-9.0/lib64/libcudart.so.9.0 /usr/lib/x86_64-linux-gnu/libcudart.so.10.0
ln -s /usr/local/cuda-9.0/lib64/libcublas.so.9.0 /usr/lib/x86_64-linux-gnu/libcublas.so.10.0
ln -s /usr/local/cuda-9.0/lib64/libcufft.so.9.0 /usr/lib/x86_64-linux-gnu/libcufft.so.10.0
ln -s /usr/local/cuda-9.0/lib64/libcurand.so.9.0 /usr/lib/x86_64-linux-gnu/libcurand.so.10.0
ln -s /usr/local/cuda-9.0/lib64/libcusolver.so.9.0 /usr/lib/x86_64-linux-gnu/libcusolver.so.10.0
ln -s /usr/local/cuda-9.0/lib64/libcusparse.so.9.0 /usr/lib/x86_64-linux-gnu/libcusparse.so.10.0
这确实解决了一部分的问题
输出变成了
Successfully opened dynamic library libcudart.so.10.0
Successfully opened dynamic library libcublas.so.10.0
Successfully opened dynamic library libcufft.so.10.0
Successfully opened dynamic library libcurand.so.10.0
Could not dlopen library 'libcusolver.so.10.0'; dlerror: /usr/lib/x86_64-linux-gnu/libcusolver.so.10.0: undefined symbol: GOMP_critical_end
Successfully opened dynamic library libcusparse.so.10.0
可以看到除了libcusolver.so.10.0报出了
Could not dlopen library 'libcusolver.so.10.0'; dlerror: /usr/lib/x86_64-linux-gnu/libcusolver.so.10.0: undefined symbol: GOMP_critical_end
其他的文件都找到了。
具体的原因大概是别人都是10.1降到10.0,我是在用9.0来欺骗10.0,哈哈哈
所以,又回到了版本匹配 的问题,我先去重新装个CUDA10.0
由于使用的是实验室的服务器,修改CUDA会影响其他人使用pytorch。。。在我准备装CUDA10.0的时候被后排的师兄看见了,已经被打了,被打的很惨,已经不能走了,不过刚好不影响坐在电脑前写代码的那种。。。
最后我选择了重装tensorflow,装回了tensorflow1.10,问题解决。
关于CUDA的版本
可通过
nvcc -V
来查看