当我们把CUDA、cudnn、tensorflow-GPU都装好,但在tensorflow GPU测试tf.test.is_gpu_avaiable()却始终返回false,怎么办?

import tensorflow as tf
tf.test.is_gpu_available()

FALSE

可能的原因如下:
————————————————————————————————

1.CUDA、cudnn、Tensorflow、python版本并不配套!!!(大多都是这个原因)

查看tensorflow官网的版本要求:https://tensorflow.google.cn/install/source_windows(见【经过测试的构建配置】)
在这里插入图片描述
先查看目前能支持的最高的CUDA版本!
在安装之前可以在pytorch官网看一下能支持的的最高的CUDA版本,尽量与tensorflow共用CUDA。https://pytorch.org/

请仔细核对你的版本是否符合要求。
eg:我的环境配置:

  • python: 3.7.1
  • CUDA:10.0.132
  • cudnn:V7.4.1.5(根据cuda版本和tf版本来选)
  • tensorflow-gpu-2.0.0

重要补充:CUDA环境升级教程----------------------

CUDA驱动版本是向下兼容的,所以保持最新就没事,也就是驱动版本可以高于CUDA版本。
卸载和重装CUDA教程:
https://blog.csdn.net/weixin_44606139/article/details/127493438

同一台电脑,我将CUDA从10升级到了11.0,此时我就可以用更高的python版本和tensorflow版本、pytorch版本,给一个版本配套的配置:

  • python:3.8

  • cuda:11.0,能够同时满足tensorfow和pytorch的是CUDA11.0

  • cudnn:8.0

  • tensorflow-GPU:2.4.0
    在这里插入图片描述

  • pytorch:1.7.1

在这里插入图片描述

2.CUDA没有装好:

验证方式一:nvcc -V
在这里插入图片描述
正确输出版本表示成功,否则没装好。

验证方式二:运行demo

打开 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\extras\demo_suite

(若是自定义安装,则换成相对应的路径)

在此路径下打开powershell

执行:.\bandwidthTest.exe
在这里插入图片描述
输出如图,表示CUDA安装成功,否则CUDA没装好

若CUDA可运行,且版本没问题,那么可能是一下的原因:

3.环境变量没配置好

参考这里:https://blog.csdn.net/u010618587/article/details/82940528?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

4.NVDIA驱动版本太低不合要求

参考:https://blog.csdn.net/flana/article/details/104772614

可以尝试更新一下NVDIA驱动,看是否成功。不成功也没有影响。

5.以前的tensorflow没有卸载干净

这个也是有可能的,若是以前安装过tensorflow其它版本,如CPU版本,一定要卸载干净后再装新的版本!

看写没卸载干净,

方式一:pip list 看是否有带tensorflow名称的库

方式二:到对应的文件夹下看,eg:Anaconda就到Anaconda3\Lib\site-packages的目录下看是否还有tensorflow相关的文件夹

有的话用pip uninstall的方式卸载掉

6.装了多个Tensorflow或Python(少见,但我就是这个原因!!!)

同一台电脑中装了多个python,在一个python中装了tensorflow,但在pycharm中调用Interpreter时又没有选对对应的装了tensorflow的python环境。
比如:我有一个直接通过python安装包安装的python环境(图中的Python3.7,称为A),还有一个anaconda自带的python环境(图中的Python3.7(2),称为B),我在A环境下装了tensorflow-CPU,另外在B环境下又直接装了一个tensorflow-CPU,此时两套是独立的,两套环境都可以在Pycharm调用和切换。
在这里插入图片描述

然后我想把B环境下的tensorflow换成GPU版本,装好了,然后在Pycharm中运行测试程序或其它程序时,没有将Interpreter切换到对应的B环境,此时相当于还是在用A环境下的tensorflow-CPU,所以始终FALSE。(因为环境装了太久,自己都忘了)

然后通过检查查看tensorflow运行时的版本和路径,才发现了这个问题。此时将Interpreter切换到B环境下,问题解决。
多说一句:这个本质原因不是同时装了多个tensorflow的问题,而是多个python环境在执行程序时没有选择正确。

这里给一个完整的验证tensorflow-GPU是否可用的程序

import tensorflow as tf

print(tf.__version__)  # 查看tensorflow版本
print(tf.__path__)     # 查看tensorflow安装路径

a = tf.test.is_built_with_cuda()  # 判断CUDA是否可以用
b = tf.test.is_gpu_available(
    cuda_only=False,
    min_cuda_compute_capability=None
)  # 判断GPU是否可以用

print(a) # 显示True表示CUDA可用
print(b) # 显示True表示GPU可用

# 查看驱动名称
if tf.test.gpu_device_name():
    print('Default GPU Device: {}'.format(tf.test.gpu_device_name()))
else:
    print("Please install GPU version of TF")

网上看了那么多,我可能是第一个提醒:在验证tensorflow-GPU是否可用前,先查看一下tensorflow版本和安装路径

——————————————补充——————————————————

其它问题

1.VS20XX,如VS2017必须要装吗?

不用,虽然tensorflow官网也有说让装,其实可以不用装,VS2017是用于编译tensorflow的,我们直接用编译好的,就不用装它。

2.CUDA是精简安装还是自定义安装?

推荐自定义安装,可以选择安装路径,教程如下:

https://blog.csdn.net/u010618587/article/details/82940528?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

3.CUDA Driver Version / Runtime Version不一致有没有问题?

只要CUDA Driver Version > Runtime Version就没有问题。

我把NVDIA Driver(不是CUDA)升级了,结果GPU还是可以用。

如何查看这两个的版本:
在这里插入图片描述

4.为什么tensorflow的GPU运算比CPU还慢?

参考:https://www.cnblogs.com/liuhuacai/p/12328020.html
在这里插入图片描述

结论:1.在计算量较小的情况下,cpu的计算速度比gpu计算速度快,但是都是微量级别的差异

2.随着计算量的增加,cpu的计算时间逐步增加,而gpu的计算时间相对平缓,在计算量达到一定程度之后,gpu的优势就出来了。

5.如何看GPU是否运行?

最简单的就是直接在任务管理器-性能中查看。在进程里可以看到哪些程序在使用GPU。

6.GPU运行报错:Resource exhausted: OOM when allocating tensor with shape

参考:https://www.jianshu.com/p/f29dbb13bb07
OOM表示分配的显存超过GPU可用的最大显存,显存不足(OOM, Out of Memory)
可能的原因:
(1)batchsize太大,这种只需要将batchsize减小就行了,比如从1开始
(2)GPU的显存太小,或者剩余的显存太少了

7.测试代码的报错分析

在这里插入图片描述
这是一个朋友运行测试代码后的报错情况,若是你也遇到这样的问题,那么可以仔细分析看一下报错中的第2、3行,主要问题在于“cudnn64_8.dll not found”,你可以在电脑中搜索一下是否存在这个文件,若没有,一个简单的办法就是去下载对应的文件,然后放到指定的目录中,具体可以参考:https://blog.csdn.net/a1456123a/article/details/115098630;若有,那么可能是路径不正确或其他的问题。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐