(已解决)Tensorflow无法调用GPU的问题及CUDA、Nvidia驱动和cuDNN的卸载重装

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( 显卡Nvidia GTX 2080Ti)。事实证明如果直接跑别人代码而不仔细看每一个细节处理的话,就会踩这种「以为设置的参数一定是真的」的坑。。。

仔细看了下终端的log,发现了穿插在successful的提示中的几句说 CUDA 某个库Lib目录不存在的报错还有句 Skip GPU registration 什么的,看起来GPU没有成功调用。

于是查看 GPU 使用情况:打开终端输入:

nvidia-smi

发现 GPU 占用率(Volatile GPU-Util) 才 10%,python 进程只占用 150多M

再查看 CPU 使用情况:

top

发现 CPU 占用到了 200% 多,原来我程序一直在 CPU 上跑呢。。。

另外还有一个 检查 tensorflow 能否调用 GPU 的方法:
终端输入:

python 

(我是python 3.6)

>>> import tensorflow as tf
>>> tf.test.is_gpu_available()

如果最后显示 True 就证明 CUDA 版本没问题,False 就是用不了GPU,CUDA版本不对

其实 Tensorflow 各版本支持的 CUDA、cuDNN、gcc和 python 版本号,都在这个官网有写。。。才知道 tensorflow 1.14.0 不支持 CUDA 10.2,得卸载重装CUDA 10.0及对应的nvidia驱动还有cuDNN了。

CUDA、Nvidia驱动 和 cuDNN 的卸载重装

网上有很多人说CUDA卸载不干净之类的,事实上没有那么麻烦,按照以下方法(参考官网文档&github)即可成功卸载重装不同版本CUDA。

1、卸载 CUDA 和 cuDNN:

由于我之前的的 CUDA 10.2 是使用 runfile 方式安装的,卸载只需要运行

sudo cd /usr/local/cuda-10.2/bin/
./cuda-uninstaller

命令行里会提示让你选择卸载哪些,全按 Enter 选上。即选项前面都变成 [X] 而不是 [ ]。
等待卸载结束,你会发现 /usr/local/ 里 cuda 文件夹没了,cuda-10.2 文件夹还在但是是空的,可以直接删了。

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%了,搞定。

你可能感兴趣的:(python,ubuntu,深度学习)