系统: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卸载不干净之类的,事实上没有那么麻烦,按照以下方法(参考官网文档&github)即可成功卸载重装不同版本CUDA。此外,由于 cuda 驱动和 nvidia 驱动千丝万缕的关系,基本上两者要一起卸载、一起安装。
卸载 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
sudo /usr/bin/nvidia-uninstall
(对应 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版本的重新装一遍,过程一样。
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
Tensorflow 未使用GPU的问题系统:Ubuntu 16.04之前按照这篇博客成功装好了 CUDA 10.2、Nvidia驱动及 cuDNN 7.6.5 ,跑mnist测试通过了。然而,跑一个基于tensorflow 1.14.0的深度学习代码时,发现训练速度特别慢。这是不应该的,因为我在运行程序时指定了使用GPU( Nvidia GTX 2080Ti)。事实证明如果直接跑别人代码而不仔细看每一个细节处理的话,就会踩这种「以为设置的参数一定是真的」的坑。。。仔细看了下终端的log,发现了几句
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ['CUDA_VISIBLE_DEVICES'] = "0"
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a...
ngpu= 1
# Decide which device we want to run on
device = torch.device("cuda:0" if (torch.cuda.is_available() and ngpu > 0) else "cpu")
print(device)
print(torch.c.