在使用服务器的tensorflow1.14时,发现GPU内存占用很低,才100多M,而且GPU利用率为0%
这根本没用GPU跑啊
回过头看编译输出的报告
出现了类似于
1 | Could not dlopen library 'libcufft.so.10.0'; dlerror: libcufft.so.10.0: cannot open shared object file: No such file or directory |
以及
1 | Cannot dlopen some GPU libraries. Skipping registering GPU devices... |
一类的报错
看了一下服务器里的CUDA安装的是9.0
实际上tf1.14和CUDA9.0是不匹配的,具体的匹配关系请参考
Tensorflow与cuda版本对应关系
关于这个问题如何解决,网上的解决方案众说纷纭,我也是菜鸡代码搬运工,只能一个个尝试
有的说是未配置 LD_LIBRARY_PATH的原因
直接在终端中输入
1 | vim ~/.bashrc |
按a进入编辑,在结尾添加
1 2 | export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH export PATH=/usr/local/cuda-9.0/bin:$PATH |
按Esc退出编辑 ,输入:wq保存
终端中输入
1 | source ~/.bashrc |
使其生效
我的实际操作中发现,自己并不是这个问题。
有的说如果的报的文件和你安装的CUDA版本是相同的,那可以通过
1 | ldconfig /usr/local/cuda-9.0/lib64 |
来解决。参考ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory
不过,我也不是这个问题
有的说是是创建一个libcudart.so的软链接就可解决
参考四 ubuntu下训练GPU未工作问题及解决办法
终端中输入,
1 | 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后具体操作中使用的是
1 2 3 4 5 6 | 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 |
这确实解决了一部分的问题
输出变成了
1 2 3 4 5 6 | 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报出了
1 | 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的版本
可通过
1 | nvcc -V |
来查看