在Win10 Anaconda中安装Tensorflow

离完成上一篇文章有近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分钟搞定。实在是快!!!



笔者正在学习TensorFlow,在比较了官方的几种安装方式后,选择了Anaconda。因为Anaconda是一种集成环境,拥有各种Python库,非常方便;它也支持Windows、Mac和Linux系统,我就把它当成了一个跨平台的IDE使用了。

       由于官网中,没有直接说明在Anaconda中安装Windows版的TensorFlow的做法,因此有需要的朋友可以参考一下。


1、安装Anaconda


Anaconda官网并没有被墙,但是下载速度很慢。

这里推荐一个清华的镜像:



选择相应的版本,笔者选用的使用64位版本。需要注意的是,目前Windows版本的TensorFlow只支持Python3.5以上,在这些镜像里已经默认是Python3.5了。
下载完以后,安装。
安装完以后,打开Anaconda Prompt,输入清华的仓库镜像,更新包更快:

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes

推荐第一行命令输入两次,以便把这个镜像地址放在首位。

2、安装TensorFlow

继续打开Anaconda Prompt,输入:
conda create -n tensorflow python=3.5

安装完以后,输入:
activate tensorflow

激活后,我选择安装的是CPU版本,输入:

在整个过程中,我在家测试,全程无阻,没有遇到墙的情况;在公司反而安装很慢,掉线频繁,大家可以多尝试吧。

剩下的测试部分,大家就可以参考官网了。

过一篇在 ubuntu 下安装 TensorFlow 的教程,那个时候 TensorFlow 官方还不支持 Windows 系统,虽然可以通过其他方法安装,但是终究不是原生的,而且安装过程繁琐易错。好消息是,Google官方在11月29号的开发者博客中宣布新的版本(0.12)将 增加对Windows的支持,我11月30号知道的,立马就安装试了试,安装过程非常简单,不过也有一些需要手动调整。

这里写图片描述


更新

这里我会列出对本文的更新。

  • 2017年3月1日:cuDNN 版本从 5.0 升级到 5.1 版本,更新 cuda 和 cudnn 下载地址。

安装前准备

TensorFlow 有两个版本:CPU 版本和 GPU 版本。GPU 版本需要 CUDA 和 cuDNN 的支持,CPU 版本不需要。如果你要安装 GPU 版本,请先确认你的显卡支持 CUDA。我安装的是 GPU 版本,采用 pip 安装方式,所以就以 GPU 安装为例,CPU 版本只不过不需要安装 CUDA 和 cuDNN。

  1. 在 这里 确认你的显卡支持 CUDA。
  2. 确保你的Python版本是3.5 64位。
  3. 确保你有稳定的网络连接。
  4. 确保你的pip版本 >= 8.1。用 pip -V 查看当前 pip 版本,用 python -m pip install -U pip 升级pip 。
  5. 确保你安装了 VS2015 或者 2013 或者 2010。

此外,建议安装Anaconda,因为这个集成了很多科学计算所必需的库,能够避免很多依赖问题,安装教程可以参考 这里

以上条件符合,那么恭喜你可以开始下载 CUDA 和 cuDNN 的安装包了,注意版本号分别是 CUDA 8.0 和 cuDNN 5.1,这是 Google 官方推荐的。可以去各自官网下载,我已经下载好打成一个压缩包放到了百度云,大家可以从 这里 下载,密码 5aoc。


安装TensorFlow

由于Google那帮人已经把 TensorFlow 打成了一个 pip 安装包,所以现在可以用正常安装包的方式安装 TensorFlow 了,就是进入命令行执行下面这一条简单的语句:

# GPU版本
pip install tensorflow-gpu

# CPU版本
pip install tensorflow
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

然后就开始安装了,速度视网速而定。

安装网之后你试着在 Python 中import tensorflow 会告诉你没有找到 CUDA 和 cuDNN,所以下一步就是安装这两个东西。


安装CUDA 8.0

这个也是很简单的,下载完我上面给的压缩包之后,解压,得到两个文件,那个 exe 文件就是 CUDA8 的安装程序,直接双击执行就可以了,就像安装正常的其他软件一样,安装过程屏幕可能会闪烁,不要紧,而且安装时间有点长。

安装完之后系统变量会自动为你添加上,这个不用管。

测试一下是否安装成功,命令行输入 nvcc -V ,看到版本信息就表示安装成功了。

这里写图片描述


安装cuDNN 5.1

其实这个是一个压缩包,解压放到任何一个目录下就行,然后把你放的那个目录添加到Path 环境变量里。

比如说我的是:

这里写图片描述

Path环境变量:

这里写图片描述

按照官方的安装步骤实际上这里已经完成了,但是经过我的安装发现,这样如果你 import tensorflow 的话它还是找不到cuDNN的文件,也就是说下面紫色框中那一行是失败的:

这里写图片描述

然后发现 GitHub 上果然有人提交了一个一样的 issue,大家可以在这里看下,然后是这么解决这个问题的:将下面这些文件复制到相应位置,

  1. C:\cuda\bin\cudnn64_5.dll —> C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin
  2. C:\cuda\include\cudnn.h —> C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include
  3. C:\cuda\lib\x64\cudnn.lib —> C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64

除此之外,还有一个办法就是将C:\cuda\bin 也加进Path 环境变量里,经过测试这样也是可行的。

如果你已经安装了 cuDNN 5.0 ,那么升级 cuDNN 的方法可以参考 这里 。

然后再次import tensorflow 应该就成功了。


测试

用一个简单的矩阵乘法测试一下,

import tensorflow as tf

a = tf.random_normal((100, 100))
b = tf.random_normal((100, 500))
c = tf.matmul(a, b)
sess = tf.InteractiveSession()
sess.run(c)
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

这里写图片描述 
看不清的话可以右键在新标签页打开图片查看大图

可以看到已经识别出我的显卡了(不要吐槽我的渣显卡,穷屌丝一个)。

终于可以在Windows上和TensorFlow愉快的玩耍了~~~



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值