当我们把CUDA、cudnn、tensorflow-GPU都装好,但在tensorflow GPU测试tf.test.is_gpu_avaiable()却始终返回false,怎么办?
import tensorflow as tf
tf.test.is_gpu_available()
FALSE
可能的原因如下:
————————————————————————————————
查看tensorflow官网的版本要求:https://tensorflow.google.cn/install/source_windows(见【经过测试的构建配置】)
请仔细核对你的版本是否符合要求。
eg:我的环境配置:
验证方式一:nvcc -V
正确输出版本表示成功,否则没装好。
验证方式二:运行demo
打开 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\extras\demo_suite
(若是自定义安装,则换成相对应的路径)
在此路径下打开powershell
执行:.\bandwidthTest.exe
输出如图,表示CUDA安装成功,否则CUDA没装好
若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
参考:https://blog.csdn.net/flana/article/details/104772614
可以尝试更新一下NVDIA驱动,看是否成功。不成功也没有影响。
这个也是有可能的,若是以前安装过tensorflow其它版本,如CPU版本,一定要卸载干净后再装新的版本!
看写没卸载干净,
方式一:pip list 看是否有带tensorflow名称的库
方式二:到对应的文件夹下看,eg:Anaconda就到Anaconda3\Lib\site-packages的目录下看是否还有tensorflow相关的文件夹
有的话用pip uninstall的方式卸载掉
我在anaconda环境下装了tensorflow-CPU,另外再系统内又直接装了一个tensorflow-CPU,两套是独立的,系统的那一套可以用Pycharm调用。
然后我在anaconda环境下安装tensorflow-GPU,结果在Pycharm中运行测试程序调用另一套tensorflow-CPU,所以始终FALSE。(装了太久,自己都忘了)
突然想到查看tensorflow运行时的版本,这才发现问题。切换到anaconda环境下的执行程序,问题解决。
这里给一个完整的验证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版本和安装路径。
——————————————补充——————————————————
不用,虽然tensorflow官网也有说让装,其实可以不用装,VS2017是用于编译tensorflow的,我们直接用编译好的,就不用装它。
推荐自定义安装,可以选择安装路径,教程如下:
https://blog.csdn.net/u010618587/article/details/82940528?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
只要CUDA Driver Version > Runtime Version就没有问题。
我把NVDIA Driver(不是CUDA)升级了,结果GPU还是可以用。
参考:https://www.cnblogs.com/liuhuacai/p/12328020.html
结论:1.在计算量较小的情况下,cpu的计算速度比gpu计算速度快,但是都是微量级别的差异
2.随着计算量的增加,cpu的计算时间逐步增加,而gpu的计算时间相对平缓,在计算量达到一定程度之后,gpu的优势就出来了。
最简单的就是直接在任务管理器-性能中查看。在进程里可以看到哪些程序在使用GPU。
参考:https://www.jianshu.com/p/f29dbb13bb07
OOM表示分配的显存超过GPU可用的最大显存,显存不足(OOM, Out of Memory)
可能的原因:
(1)batchsize太大,这种只需要将batchsize减小就行了
(2)GPU的显存太小,或者剩余的显存太少了
这是一个朋友运行测试代码后的报错情况,若是你也遇到这样的问题,那么可以仔细分析看一下报错中的第2、3行,主要问题在于“cudnn64_8.dll not found”,你可以在电脑中搜索一下是否存在这个文件,若没有,一个简单的办法就是去下载对应的文件,然后放到指定的目录中,具体可以参考:https://blog.csdn.net/a1456123a/article/details/115098630;若有,那么可能是路径不正确或其他的问题。