CUDA 版本不对导致 Pytorch / Tensorflow 无法调用GPU的问题
系统:Ubuntu 16.04
Tensorflow版本: 1.14.0
原 CUDA:10.2 (Nvidia 440.几忘了)
新 CUDA:10.0 (Nvidia 410.48)
之前成功装好了 CUDA 10.2、Nvidia驱动及 cuDNN 7.6.5(参见这篇博客),并按照cuDNN官网测试安装是否成功的方法跑 mnist 测试也通过了。然而跑一个基于Tensorflow 1.14.0的深度学习代码时,发现训练速度特别慢,看起来GPU没有成功调用。
检查 Tensorflow 能否调用 GPU :
终端输入:
python
>>> import tensorflow as tf
>>> tf.test.is_gpu_available()
检查 Pytorch 能否调用 GPU :
终端输入:
python
>>> import torch
>>> torch.cuda.is_available()
如果最后显示 True 就证明 CUDA 版本没问题,False 就是用不了GPU,CUDA 版本不对。
Tensorflow 各版本与支持的 CUDA、cuDNN、gcc和 python 版本关系:官网.
Pytorch 各版本与支持的 CUDA 版本关系:官网
才知道 tensorflow 1.14.0 不支持 CUDA 10.2,得卸载CUDA 10.2,重装CUDA 10.0及对应的nvidia驱动还有cuDNN了。
CUDA、Nvidia驱动 和 cuDNN 的卸载重装
网上有很多人说CUDA卸载不干净之类的,事实上没有那么麻烦,按照以下方法(参考官网文档&github)即可成功卸载重装不同版本CUDA。此外,由于 cuda 驱动和 nvidia 驱动千丝万缕的关系,基本上两者要一起卸载、一起安装。
1、卸载 CUDA 和 cuDNN:
卸载 CUDA 10.2 :
cd /usr/local/cuda-10.2/bin/
sudo ./cuda-uninstaller
命令行里会提示让你选择卸载哪些,全按 Enter 选上。即选项前面都变成 [X] 而不是 [ ]。
等待卸载结束,你会发现 /usr/local/ 里 cuda 文件夹没了,cuda-10.2 文件夹还在但是是空的,可以直接删了。
卸载CUDA 10.0 :
cd /usr/local/cuda-10.0/bin/
sudo ./uninstall_cuda_10.0.pl
2、卸载 Nvidia 驱动:
sudo /usr/bin/nvidia-uninstall
3、重新装 CUDA 10.0(及对应的 nvidia 410.48驱动)和 cuDNN:
(对应 Tensorflow 1.14.0)
进入CUDA download 界面,选择 legacy releases(旧版本), 找到 CUDA 10.0, 下载 runfile (local)
按照这篇博客安装即可,把其中 CUDA 10.2文件换成新下载的10.0的文件。注意: export 环境变量那两句也要把 10.2 改成 10.0。cuDNN也找到对应 CUDA 10.0版本的重新装一遍,过程一样。
4、最后再测试 tensorflow 是否能使用 GPU:
python
>>> import tensorflow as tf
>>> tf.test.is_gpu_available()
最后返回: True
重装完毕。
重新跑我之前的训练程序,速度快了60倍,GPU占用率也变成 68%了,搞定。
[2022.2.11更新]
若仍然返回False, 另一种检查办法: 跑CUDNN的测试程序
cd ~/cudnn_samples_v7//mnistCUDNN/
make clean && make
./mnistCUDNN
若出现报错 libcudart.so.10.0: cannot open shared object file: No such file, 解决方法:
运行:
sudo ldconfig /usr/local/cuda-10.0/lib64
即可解决.
[2020.10.2更新]
若重启电脑后Ubuntu出现循环登录,则:
第一步,卸载NVIDIA驱动:
ctrl + alt + F1进入命令行:
sudo apt-get remove --purge nvidia-*
sudo apt-get autoremove
sudo nvidia-uninstall
一路选OK.卸载完 sudo reboot
重启可进入系统。
第二步,重装CUDA和相应NVIDIA驱动: 这篇博客
ctrl + alt + F1进入命令行,sudo service lightdm stop
,进入cuda runfile在的文件夹,sudo sh ./cuda- ...... .run
安装CUDA,一路按默认的选就行。装完运行 sudo service lightdm start