回顾在Windows7上安装TensorFlow-GPU的一路坑+Windows7上安装TensorFlow的GPU版本后记

https://blog.csdn.net/infovisthinker/article/details/54705826


目录(?)[+]

离完成上一篇文章有近1年了。2016年发生了太多的事情,从而没能坚持哪怕是每月一篇这样的频率。终于在2017年的1月份抽出几天搞出了一些东西。一路坑洼,赶紧记录下来。

2016年初就开始看深度学习的东西,主攻TensorFlow。但是一路项目再加上换了公司,每次都是搞两天就停一阵子,然后再拾起来重头搞两天,再被打断。而且换了公司后没有了随意能调用的计算资源,CPU版的TensorFlow直到11月份才安装完,并跑了一些例子。因为一般虚拟机都不支持GPU,所以GPU版就完全没有机会实践。直到TensorFlow出了Windows版,而且发现新换的电脑居然是NVIDIA的GeForce 940M显卡,立刻决定在笔记本上实验安装一把TensorFlow-GPU版本。

但因为手贱,就那么一抖,居然把整个过程搞了近4天才真正地让MNIST的例子跑在GPU上。

不再发骚了,直接上过程,并介绍碰到的这个大大大大坑!!


下面的过程不是一步一步的手把手教程,而是一个简略的叙述,所以如果你想重复实现,最好先了解一些TensorFlow的基础知识。

安装环境:

  • Windows 7 64bit
  • GPU: GeForce 940M
  • Python: 3.5.2
  • CUDA: 8

我的安装过程:

  1. 首先下载Anaconda3的Win7 64bit版,安装Python3.5版本。因为目前TensorFlow对Windows只支持Python3.5。可以直接下载Anaconda的安装包安装即可,一般不会有问题。
  2. Anaconda安装完成后,直接在Windows的命令窗口里敲Python就应该能看到版本是否是3.5。
  3. 用conda安装jupyter:conda install jupyter
  4. 创建一个jupyter notebook的目录,然后cd到此目录后启动jupyter notebook:jupyter notebook
  5. 然后用conda命令安装pip:conda install pip。
  6. 用conda命令创建tensorflow运行环境:conda create -n tensorflow-gpu。这一步的目的是建立一个单独的python运行环境,方便同时安装CPU版和GPU版本,不会互相影响。
  7. 启动此运行环境:activate tensorflow-gpu
  8. 用pip安装tensorflow:pip install tensorflow-gpu
  9. 启动python命令行编辑器,然后import tensorflow as tf,报错说没有cuda库。
  10. 按照tensoflow的git网页上指定的CUDA地址下载CUDA8和cudnn的库。其中想下载cudnn的库,需要去注册一下会员。略微麻烦了点。不过都顺利下载。
  11. 安装CUDA8,直接执行cuda_8.0.44_windows.exe文件,一路默认的点下去。半小时后安装完毕。
  12. 然后CUDA安装程序会安装一个什么NVIDIA Experience的程序,然后这个程序会自动启动,并询问是否要升级显卡的驱动程序。我脑子一晕,想当然的认为最新的肯定是最好啦,就手贱点了升级。然后一路绿灯的升级完毕。
  13. 接着解压缩cudnn的库文件cudnn-8.0-windows7-x64-v5.1.zip。把其中的文件夹放到一个地方,比如E:\CUDA。然后可以有两种方法把cudnn库设置成tensorflow可以用。
    1. 把此目录路径放到Windows的系统PATH参数里面;
    2. 把目录里面的内容放到CUDA的安装目录(我的是C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0)下面相对应的目录里面,bin的放到bin,lib的放到lib,include的放到include。
  14. 一切就绪,还是在命令行的tensorflow-gpu的运行环境里,启动启动python命令行编辑器,然后import tensorflow as tf。发现5行successfully load的东西,说明找到了cuda的库。
  15. 定义一个session,如 s=tf.Session() 然后回车,诡异的事情出现了!!
    1. Windows弹出了一个警告框,说什么“此硬件设备不可拔出或是不能移动......";
    2. Python命令行里面的错误提示是:......can not cuInit: CUDA_NO_DEVICE_ERROR......
  16. 完全无头绪的两个提示,立刻开始一顿狂搜百度。结果发现居然没有人碰到这样的问题。马上翻墙出去上google,再搜,得到的信息极其稀少。首先是安装在Windows上的就很少,而碰到这个问题的就更少。唯一一个一样的是stackoverflow上某人提到了设备不能拔出和移动,还是英语,一开始就没留意。而且他最后问题是解决了,解决方法是windows里面把显卡卸载了再安装就好了。基本没有参考价值。
  17. 接着继续搜,B+G满世界的海搜。的一个初始的想法是CUDA安装没装好,就把第11步反复搞,结果还是一样。
  18. 搞了一天,发现没进展,开始怀疑是显卡的问题,于是把显卡给删了,再装。然后重复14步,没问题,15步又出错,但是这次报的错不再是什么硬件不能拔,而是Python程序出错。眼泪立刻下来了,虽然还是错,但终于开始接近问题的本质了。开始怀疑是显卡驱动程序的问题。立刻查看,NVIDIA的控制面板里给出了驱动信息,是版本368.81。然后安装了一个GPU-z,看看显卡的情况。驱动版本也是一样的,但是提示显示CUDA不支持。。。。。。
  19. 于是去Geforce的官网找驱动,然后找了最新的2016年12月的版本,下载安装。然后第15步的错误再现!!根据18步的情况,判断新的驱动版本可能不行。
  20. 于是去Geforece官网找旧版本,奇葩的是,Geforece最旧的版本只到2016年8月份的372.54版。下载372.54,安装还是15步的问题。
  21. 只好满世界的找旧版本驱动,大海捞针一般。前后下了7-8个版本。终于在安装了一个很旧的版本后353.62(2015年出的驱动),情况开始发生逆转了!!
  22. 安装完此旧版,运行一个session后,tensorflow居然显示找到了显卡,且能打印出显卡的信息啦。那个心花怒放啊!!以为苦日子终于熬到头了。
  23. 然而,真正开始跑MNIST例子的时候,一堆警告出现:...... cuda version is insufficient for cuda runtime environment....。居然出了新的问题。不过还好,之前搜索驱动程序的时候见到过别人贴的这个问题,解决方案是显卡的驱动版本要足够高。
  24. 于是从353.62版本开始,一个一个的试更高的版本,355.98,359.06,361.91,365.81全都试过了,不是版本过低就是高版本后python程序出错。前前后后搞了2天多,还是不行。这时候开始冷静下来整理思路了:
    1. 问题已经基本锁定在显卡的驱动程序的版本上;
    2. 别人为什么没有出现过什么问题,从而造成B+G上几乎没有出现15里面的情况的帖子?
    3. 别人没碰到,说明自然安装就能解决掉。
    4. 那么就有可能是CUDA库会有自己支持的一个版本的驱动程序。
  25. 等分析到这里,思路就清晰了,CUDA的版本是确定的,就是要找到和这个CUDA支持的驱动程序版本。于是仔细的又看了一下CUDA的安装组件,果然发现,在安装CUDA的过程中,安装包自身就包括了一个369.30版的显卡驱动。那么这个版本就应该是和CUDA8相互支持匹配的驱动程序。
  26. 发现了这个问题后,就立刻卸载掉已经安装的高于369.30驱动程序,然后按照第11步从新装一遍CUDA,选择自定义安装,选择369.30的驱动。
  27. 装完重启,再次运行,终于只有successfully,没有其他的警告啦。GPU-Z也显示GPU load在80%左右。CPU的用量很低。
到此为止,终于解决了Windows7上安装运行TensorFlow GPU版本,成功运行了简单版和卷积版的MNIST。

问题分析:

  1. 根源其实很简单,就是CUDA8有自己完全兼容匹配的Geforece显卡的驱动程序。我的GeForece 940M对应的就是369.30版
  2. 用CUDA安装程序默认就会把这个版本的驱动程序装上。但这里有两个坑:
    1. CUDA安装默认是全装,神马Experience、Insights都装,装完了就立刻检测你机器的显卡驱动是否是最新的,发现不是最新的,就建议你升级。如果如我一般手贱了一下,后面就悲剧了。
    2. 如果你已经自己升级过驱动版本高于369.30,CUDA安装不会降级,这个时候也会悲剧。
  3. 如果机器的驱动版本低于369.30,CUDA就会安装升级。这种情况应该是最常见的,因此一般安装完成后TensorFlow-GPU就能完美的识别GPU并用来进行计算。我猜测这也就是为啥网上几乎没有出现我碰到的问题的帖子。因为默认都是OK的。
虽然过程很痛苦也漫长,但是这么一折腾还是学到了很多东西,NVIDIA的网站也看了不少。对GPU也有了一些了解。得失都有。下面就开始TensorFlow GPU的学习了。

后记:用CPU和GPU搞了一下对比,结果还是很清楚的。
CPU:4核的i5,
GPU:GeForce 940M

CNN的MNIST,CPU的4核全100%的负载,搞了56分钟;GPU平均80%的负载,7分钟搞定。实在是快!!!
______________________________________________________________


上一篇写了之前在我的Windows7上安装TensorFlow GPU版的一路坑坑洼洼,本以为已经解决了。但实际上在过年的几天内,又一次出现了问题。经过了反复的尝试,到今天为止终于稳定下来,特此记录一下。但是具体原因还是不十分清楚。

上一篇写到用CUDA自带的安装包里的390.60版显卡驱动程序完成安装后,终于可以运行TensorFlow的例子在GPU上了,很是开心了一阵子。但就在带回家过年的几天里,再次运行例子,居然又出现了“此设备不能移动或不能拔出”的问题,然后程序崩溃掉了,连切换到CPU都不行。彻底晕菜!!

之后按照之前的做法,卸掉显卡,卸掉驱动,卸掉CUDA程序,再从头安装,居然问题没有解决。于是又一通卸载和安装,但问题依旧。驱动程序版本低了说insufficient version,版本高了不是python崩溃,就是弹出显卡。

折腾了几天,完全没有头绪了。后来想起CUDA在安装的过程中曾经提出过Visual Studio的版本不兼容的问题,再想起莫烦的视屏里也提到需要Visual Studio 2015的一个情况,就在想是不是我本机的Visual Studio有问题。赶紧查看,发现本机没有安装Visual Studio,但有一对Visual C++,最高是2013版。于是开始了心酸的VS升级的过程。

升级VS最大的问题出现在微软的任何软件都是超级大,不是一般的大,是超级大。公司的电脑C盘只给了75G,在剩余15G的情况下,居然装不了VS 2015 community版本!!!!最后C盘空间不足而失败!!!

中间各种卸载其他软件等等的苦难就不说了,最后还是找IT运维把C盘扩展到150G解决了这个狗屎问题。

装完VS 2015,再装各种CUDA和驱动,问题依然。此时已经几乎是心灰意冷了,想想还是用用CPU版算了。

中间隔了几天,恢复心态后,又仔细想想这个问题。总觉得和TensorFlow没啥关系,因为TensorFlow自己报的错是找不到硬件:CUDA_NO_DEVICE_ERROR。那么就是硬件和Windows7自己的问题。于是上网去专门搜“此设备不能移动或不能拔出”的问题,而不是和TensorFlow一起搜。

果然,各个游戏论坛里关于这个问题的帖子很多,基本都是升级了显卡驱动程序后出现的。一般的解决方案都是回退显卡的驱动到前一个版本。但是对于我来说,是没有了前一个版本的。最后抱着死马当作活马医的想法,用GeForce Experience里的驱动更新功能,来更新显卡驱动程序。发现最新的显卡版本已经是2017年1月24号的了,比之前折腾的时候还要新,于是就安装了一把。


奇迹出现了!!!安装完是最新的378.49版本。然后一切正常,TensorFlow也可以用GPU来运算了,反复重启后还是很好用。完美解决!!


原因分析:基本能定位在是GeForce显卡的驱动程序上,但是具体明确的原因还是不清楚。之前安装396.60版后成功了,但是又出问题,怀疑是Windows更新了驱动程序。同时估计是这个版本和当时机器上的VS还是存在兼容的问题。而更新到VS 2015后,再用最新的驱动程序,两者之间兼容性很好,所以显卡就能正常工作了。


后记:利用GPU,现在跑Udacity教程,基本上调参再跑一次都是分钟杀。在Linux CPU版本上如果做同样的事情,那每个跑一次模型都要几个小时,完全无法正常练习。所以还是强烈建议想学TensorFlow的童鞋,用GPU版本吧。人生会灿烂很多!!!



________________

转载的,https://blog.csdn.net/infovisthinker

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是在 Windows 系统上安装 TensorFlow-GPU 2.12.0 的步骤: 1. 确认显卡驱动已经安装并支持 CUDA 10.0 或 10.1,这是 TensorFlow-GPU 2.12.0 的要求。 2. 安装 CUDA Toolkit 10.0 或 10.1,下载地址为: * CUDA 10.0:https://developer.nvidia.com/cuda-10.0-download-archive * CUDA 10.1:https://developer.nvidia.com/cuda-10.1-download-archive 安装时选择自定义选项,仅安装 CUDA 核心组件和 CUDA 工具。安装完成后需要设置环境变量: ``` CUDA_HOME = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0 (或 v10.1) Path = %PATH%;%CUDA_HOME%\bin;%CUDA_HOME%\extras\CUPTI\lib64 ``` 3. 安装 cuDNN 7.4.2 或 7.5.x,下载地址为: * cuDNN 7.4.2:https://developer.nvidia.com/rdp/cudnn-archive * cuDNN 7.5.x:https://developer.nvidia.com/rdp/cudnn-download 将文件解压到 CUDA Toolkit 的安装路径下,例如: ``` C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\include C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\lib\x64 ``` 4. 安装 Anaconda,下载地址为:https://www.anaconda.com/products/individual 5. 创建一个新的 Python 环境: ``` conda create -n tf_gpu python=3.6 ``` 激活环境: ``` conda activate tf_gpu ``` 6. 安装 TensorFlow-GPU 2.12.0: ``` pip install tensorflow-gpu==2.12.0 ``` 安装完成后可以测试是否成功,例如: ``` import tensorflow as tf print(tf.__version__) ``` 如果输出版本号为 2.12.0,说明安装成功。 希望这些步骤可以帮助你安装 TensorFlow-GPU 2.12.0。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值