【tensorflow】为什么CUDA装好了,Tensorflow-GPU不能用?
原因
当我们把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;若有,那么可能是路径不正确或其他的问题。
更多推荐
所有评论(0)