tensorflow-gpu的使用及遇到的各种问题

前言

很久没有更新博客了,和女朋友结束异地,更多的时间多了一些陪伴,多了一些幸福,生活中的学习琐碎就没有记录。标题所示问题困扰了我近一周,幸好在周二之前解决了问题,得以完成自编码器的训练,能够从容应对周二和导师的单独见面会hhh(昨晚做梦都是考试,也许是对见面会心存恐惧,压力有点大)。还是那句话不希望后来者仍走弯路,仍掉大坑。首先展示tensorflow-CPU和tensorflow-GPU运算速度的差距,是一个epoch的时长比较。下图是用了一小部分数据示范性训练,大约有八千张图,做自编码器。图知,大约快了25倍。这个倍数应该会随着数据量的扩大而增大。
CPU深度学习训练时长
GPU深度学习训练时长

版本问题

我在安装过程中,其实这个版本问题是一直萦绕在整个探索过程中。出现了很多问题,但是我都没有第一时间意识到是版本问题。所以首先确认好需要安装的版本可以避免超级多的麻烦。
首先确认一点:1.电脑显卡配置决定CUDA上限;2.CUDA版本和tensorflow-gpu(包括python版本)版本是一对多的关系;3.CUDA版本和cuDAA版本基本上是一对一(除了11.6的CUDA)的关系。因此你的版本思路可以是:CUDA-tensorflow(python)-cuDAA(电脑配置为起点),也可以是:tensorflow(python)-CUDA-cuDAA(项目代码为起点)。因为有些项目是基于tensorflow2.0及以上,因此跟代码走也是可以的。

电脑显卡配置决定CUDA上限

具体是显卡配置-算力-CUDA版本上限。但是这里提示一句,不一定要装该上限版本的CUDA,因为大家都懂,版本高好用,但不稳定啊。我的电脑最高能装11.6的,我装了后,出现了一系列麻烦的问题。所以我建议选择经典版本最稳妥。
显卡配置-算力:https://developer.nvidia.com/cuda-gpus#collapseOne
算力-CUDA版本上限:https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html
或者直接必应搜索显卡对应的CUDA版本。

CUDA版本和tensorflow-gpu版本对应

CUDA版本和tensorflow-gpu(包括python版本)版本是一对多的关系,见下图。如果你的CUDA版本更新,可以单独必应搜索即可。如CUDA11.6对应的tensorflow版本即可。官方最新查询渠道:https://tensorflow.google.cn/install/source_windows?hl=en#gpu
CUDA版本与tensorflow版本对应关系图

CUDA版本和cuDNN版本对应

在安装时,官网中直接根据CUDA版本,直接选择相应的cuDNN安装即可,就很简单了。这里须知,cuDNN就是CUDA的一个可深度学习的补丁。
最后我安装成功的版本配置给大家,可放心食用:python3.7+CUDA10.0+tensorflow-gpu1.15.0-keras-gpu1.5.0

安装问题

挑选了前辈的几个非常实用和详细的博客,大家可以自行仿照。
1.CUDA和cuDNN安装教程:https://blog.csdn.net/m0_37605642/article/details/98854753
2.CUDA卸载和重装:https://blog.csdn.net/m0_37605642/article/details/99100924
3.tensorflow-gpu安装,以1.5.0版本为例。记住在conda的虚拟环境中直接用pip安装而不是conda,且无需镜像也挺快。

pip install tensorflow-gpu==1.15.0

4.不会吧不会吧,不还不知道什么是虚拟环境,那就坏了。一定记住,每一个项目跟随着一个虚拟环境,就像一个小工作室,这个工作室里面配置想要的python版本和其他API。具体见我另外的博客:https://blog.csdn.net/learn_python_/article/details/109486668?spm=1001.2014.3001.5502。但是我的这个博客讲的也不是很细,可以必应搜索:anaconda环境配置、anaconda与pycharm连接。
5.安装成功验证:https://blog.csdn.net/weixin_56197703/article/details/125192385
6.调用GPU:

imort os
os.environ["CUDA_VISIBLE_DEVICES"] = "0,1"   # 选择GPU0和GPU1训练
model = multi_gpu_model(model, 2)   # 这里设定选择两个设备,不设定默认一个设备

提示几点:1.CUDA下载本地版,cuDNN下载ZIP,解压后一定记住,将cuDNN中目录下最里面的内容复制到对应的CUDA的位置,不是复制整个文件夹。2.同一个虚拟环境中只能由一个gpu的tensorflow版本,不能有cpu版本(我不知道是不是2.0及以上两者融合了)。其实你在换gpu的其他版本时,其实默认是卸载其余gpu版本的。2.环境变量配置一定要严谨,我的配置如下:
环境变量配置

出现的常见问题解答

如上,大家也看到我尝试过重装,因为出现了种种问题,但是有些问题没有截图,只有当时的搜索记录,我就按图索骥,给大家介绍下我遇到的一些问题,当然也希望大家用不到我的这一节。

问题一:Created TensorFlow device (/device:GPU:0 with 6696 MB memory) -> physical GPU…

这个不影响,说明还是能够搜索到可用GPU的

问题二:Cannot dlopen some GPU libraries

网上有很多解答,很多推测。我的解决办法不是唯一解,但是可以去尝试。我最终通过降级CUDA,从11.6降为了10.0,同时跟随着tensorflow-gpu版本也随之降低。当时觉得11.6不行,也不会是版本问题,我也是严格对应的,死马当活马医。结果真的是版本问题。

问题三:failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected

这说明GPU可用了,但是在做深度学习训练时连接不到GPU。查询后发现是在配置运用GPU设备时写了‘1’了,但实际上我的可用设备只有一个,因此改为0即可。

os.environ["CUDA_VISIBLE_DEVICES"] = "1"  # 改为0即可

但是这里提下,我的电脑中包含了一个独显一个集显。集显一般无法使用,因此显示还是只有一个GPU可用,是正常的。
记住一点:只要安装验证中出现的tf.test.is_gpu_available()为Ture代表的就是全部安装成功,gpu是可用的。如果再报错或者是没有用GPU计算,那大概率就是代码的问题了。

问题四:TensorFlow requires that this DLL be installed in a directory that is named in your %PATH% environme

解决办法:1.直接将这个DLL文件放在系统的环境变量中,记住,环境变量不只是到这个DLL文件的所在文件夹,是直接到改文件本身的。2.直接换一个当前CUDA版本对应的其他tensorflow-gpu版本。
先尝试1,不行就2。
其他问题就按照问题的字面意思进行修改和调整。

结语

其实还有不少问题,但是不成体系,也不是关键问题。总之这个过程很麻烦。但是工欲善事必先利其器,毕竟这是一劳永逸的事情。最终还是总结几点:
1.一定不要追求最高的CUDA版本或者是tensorflow-gpu版本,一定优先是经典的或者是被人验证过的版本组合。
2.网上的对应关系或是别人验证过的组合也确实不一定适合你的,但是至少给我们划定试验范围了。牢记一点,以此为基础,遇事不决,就先更换tensorflow版本,再不行就更换CUDA版本和tensorflow版本。版本问题真是很神奇,你也不知道为啥这个版本组合就行。
3.从以下几个层面考虑问题:版本问题–环境变量问题–安装细节问题–代码问题。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值