【阿星的学习笔记(1)】如何在windows安裝Theano +Keras +Tensorflow並使用GPU加速訓練神經網路

今天开始,Lady向各位介绍一个朋友阿星(Ashing)以及他的机器学习读书笔记!

阿星也是我们手撕深度学习算法微信群的热心群友!接下来,Lady我也会陆续分享这个微信群里大家讨论的话题。

本篇文章介绍如何安装Theano 及Keras, Tensorflow深度学习的框架在windows环境上,并快速的使用Keras的内建范例来执行人工神经网络的训练。

之前也有实作Tensorflow 及caffe在VM+ubuntu16.04环境安装的经验,甚至安装在NVIDIA的Jetson TX1 的惨痛经验XD(虽然后来也是有安装成功)。各深度学习的框架各有它的优缺点,有许多文章已做过类似的分析,在此我不会对这部分着墨太多,只会叙述自己之前安装的一些经验来提供大家参考,特别如果是要在windows环境上使用,并且具有NVIDIA CUDA支援GPU加速运算的功能。

虽然也很多人认为应该直接使用Linux环境会比较适合做深度学习框架的使用及学习,原因是使用Linux的人或网络资源比较多,而且Linux对于计算机硬件效能有优化。但对于Linux环境不熟的人,使用windows环境仍然有它方便性存在,而对于Python程序语言来说,其程序码在Linux环境或windows环境做切换是很容易的,当然Theano ,Keras,Tensorflow也可以安装在Linux环境上使用。接下来开始正式介绍如何在一般常见的笔电上建构这个环境,在一般的笔电上也可以使用GPU加速训练人工神经网络的快感。

<图一>为Keras 的lstm_benchmark.py 范例输出结果

首先我使用的笔电硬件是:

Intel CPU i7-6700HQ 存储器DDR3 8GB. NVIDIA 950M 另一台笔电硬件是: Intel CPU i5 5200U 存储器DDR3 8GB. NVIDIA 940M 使用GPU加速及CUDA ,NVIDIA 的显卡仍然是必备,但是实际上测试最一般般常见 的940M ,950M显卡也可以使用,并且实测上其执行效能仍然快过单单使用CPU快很多 ,底下安装好后我们会使用Theano提供的程序来做测试及比较。 接下来是软件环境的建构,大部分步骤其实是没有先后顺序之分的,例如先安装python 或是VS2015 ,只有少数步骤有先后顺序上的建议。底下是我的安装步骤。 1.安装Python 环境: 选择Anaconda或是Winpython都可以,实际上我都试过,而最后我是在Winpython上安装成功,这并不代表Anacona不行,只是刚好在Winpython上装成功就没再花心思在Anaconda上做Debug。重点是要使用x64 python 勿使用x86版本,原因是CUDA 的CUBLAS.lib只适用于x64版本,如果使用x86版本会遇到CUBLAS.lib 的相关error. Winpython下载路径:https://winpython.github.io/ 在此我是选择安装:WinPython-64bit-3.5.2.3Qt5.exe 3.5.2版带有Qt5的,因为平时也有用到Qt5,所以就一起安装这并不影响后续安装。 2.安装VS2015 update 3: 现在VS2015已有免费的社群版,然而我安装的另外从网络上下载的VS2015 pro update3 英文版。这边建议要安装英文版勿安装中文版,原因是先前遇过vs2015在编译CUDA时候遇到Unicode编码的问题,所以就干脆安装英文版。而如果直接安装社群版,MS会根据你的OS 环境语系自动选择则中文版。在windows环境里,VS2015会是用来编译CUDA的工具。 我安装的Windows环境是Windows 10,并且它自己已经明目张胆,大摇大摆,无视你的存在的更新到10.0.14393.0了(XD)。 安装后须将底下路径加入系统的环境变量path ,这样在命令视窗才找得到cl.exe。 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin 3.安装GCC: 在windows 要安装GCC 可以使用MSYS2,有关MSYS2的安装请看底下连结: 写得非常清楚了,也不难安装,在此选择x86_x64版本可以安装的指定的D:\或预设C:\下。 https://shaochien.gitbooks.io/how-to-use-gcc-to-develop-c-cpp-on-windows/content/shell-select-and-install-gcc.html 安装后须将底下路径加入系统的环境变量path ,这样在命令视窗才找得到gcc或g++。 D:\msys64\mingw64\bin D:\msys64\mingw64\lib 4.安装CUDA 及CuDNN: CUDA 下载网址:https://developer.nvidia.com/cuda-downloads 选择CUDA 8.0 for Win 10 x64版本 CuDNN 下载网址:https://developer.nvidia.com/cudnn

请选择对应到CUDA 8.0的版本。 需注册(免费)才能下载CuDNN,非必要但是CuDNN并不难安装,只需要解压缩CuDNN档案 然后将里面bin/lib/include/的档案都copy到CUDA安装后对应的bin/lib/include/资料夹即可。 CUDA 0 安装成功预设路径应如同底下(请勿自行更改路径) C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0 安装好后将底下路径也加入系统的环境变量path ,这样在命令视窗才找得到nvcc。 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\libnvvp 5.安装Theano 及Keras: 实际上当安装好Winpython时已经同时包含Theano 及Keras了。可以不用再安装。 预设Theano 版本是0.8.2,Keras 是1.1.1。 如果需update theano,或 keras到最新版1.2.0 可以执行以下指令 pip install --upgrade Theano pip install --upgrade keras 注意:一但你执行上述指令它会自动 Uninstalling numpy-1.11.2+mkl: 原因是pip自动搜寻到更新的 numpy-1.11.3-cp35-none-win_amd64.whl版本 但是这numpy版本并不带mkl涵式库,但这对Theano ,keras是必要的。 所以可以到底下连结重新下载新的numpy-1.12.0rc2+mkl-cp35-cp35m-win_amd64.whl

http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy

然后在你的winpython的环境下执行底下重新安装即可 pip install numpy-1.12.0rc2+mkl-cp35-cp35m-win_amd64.whl 请注意选择你所需要的版本。numpy-1.12.0rc2是目前最新的。 cp35 for python 3.5.2版 win_amd64 for x64 6.更改.theanorc.txt 及keras.json: A.更改keras.json: 以上安装好之后,你可以先试着在winpython环境里打上python >>import keras 应该会出现以下error, { File "D:\WinPython-64bit-3.5.2.3Qt5\python-3.5.2.amd64\lib\site-packages\keras\backend\tensorflow_backend.py", line 1, in <module> import tensorflow as tf ImportError: No module named 'tensorflow' ... } 原因是Keras可以用tensorflow 或theano 当backend,预设是tensorflow 这时我需将它改成使用theano 当backend。请到你winpython安装目录下的setting里 经过上述的执行应该会产生一个keras.json档在 D:\WinPython-64bit-3.5.2.3Qt5\settings\.keras 请将底下原本tensorflow改成theano,即可完成转换backend到theano。 ##=======keras.json档 { "epsilon": 1e-07, "image_dim_ordering": "tf", "floatx": "float32", - "backend": "Tensorflow" + "backend": "theano" } P.S *.1 -号为移除该行,+号为增加该行,-,+号都不该出现在实际档案里。 *.2 我的winpython 预设安装路径为D:\WinPython-64bit-3.5.2.3Qt5 *.3 对于winpython 环境而言的/Home目录是预设在 D:\WinPython-64bit-3.5.2.3Qt5\settings 并非C:\Users\使用者名称xxxx 这点请注意,所以接下来对于theano的设定档.theanorc.txt 也应放置于D:\WinPython-64bit-3.5.2.3Qt5\settings 目录下 B.更改.theanorc.txt: 请参考底下.theanorc.txt更改 device = gpu #指的是预设切换到使用GPU floatX = float32 #for GPU 都是float32 ,for CPU 可以有float64 ##===.theanorc.txt档for GPU [global] openmp=False device = gpu optimizer_including=cudnn floatX = float32 allow_input_downcast=True [lib] cnmem = 0.8 [blas] ldflags= [gcc] cxxflags = -D_hypot=hypot [nvcc] fastmath = True --flags=-LD:\WinPython-64bit-3.5.2.3Qt5\python-3.5.2.amd64\libs --compiler_bindir=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin 可能Error 1: 接着试着在winpython环境里打上python >>import theano 如果有跑出一大串行号及C++ code 就表示有error发生,如果发生底下error { C:\Users\shing\AppData\Local\Theano\compiledir_Windows-10-10.0.10586-SP0-Intel64_Family_6_Model_94_Stepping_3_GenuineIntel-3.5.2-64\lazylinker_ext\mod.cpp:1:0: sorry, unimplemented: 64-bit mode not compiled in #include <Python.h> ^ ... } 可以试着下面解法: 开启在你winpython 目录下的D:\WinPython-64bit-3.5.2.3Qt5\scripts\env.bat 修改底下path 设定红色部分,也就是加入G++ x64的环境设定 实际上Vs2015/Nvcc 的路径也都可以直接改在如下 这样你的winpython环境也都是认得到。 #=====env.bat============= if %ERRORLEVEL% NEQ 0 set PATH=D:\msys64\mingw64\lib;D:\msys64\mingw64\bin;%WINPYDIR%\Lib\site-packages\PyQt5;%WINPYDIR%\Lib\site-packages\PyQt4;%WINPYDIR%\;%WINPYDIR%\DLLs;%WINPYDIR%\Scripts;%WINPYDIR%\..\tools;%WINPYDIR%\..\tools\mingw32\bin;%WINPYDIR%\..\tools\R\bin\x64;%WINPYDIR%\..\tools\Julia\bin;%PATH%;

#}

可能Error 2: 如果出现以下error { 64_Family_6_Model_94_Stepping_3_GenuineIntel-3.5.2-64\lazylinker_ext\mod.cpp:1: D:/msys64/mingw64/include/c++/6.2.0/cmath:1133:11: error: '::hypot' has not been declared using ::hypot; } ^~~~~ 请检查.theanorc.txt里有无底下宣告 [gcc] cxxflags = -D_hypot=hypot 可能Error 3: 接着试着在winpython环境里再打上python >>import theano 如果出现以下error { C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\crtdefs.h(10): fatal error C1083: Cannot open include file: 'corecrt.h': No such file or directory } 必须新增底下到系统的环境变量里,原因是他会用到Windows Kits里的函式,不只VS2015 所也必须宣告进去。 INCLUDE=C:\Program Files (x86)\Windows Kits\10\Include\10.0.14393.0\ucrt LIB=C:\Program Files (x86)\Windows Kits\10\Lib\10.0.14393.0\um\x64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\ucrt\x64 可能Error 4: 接着如果出现以下error { mod.cu(803): warning C4311: 'type cast': pointer truncation from 'CudaNdarray *' to 'long' mod.cu(3374): warning C4312: 'type cast': conversion from 'long' to 'float *' of greater size LINK : fatal error LNK1104: cannot open file 'uuid.lib' } 增加底下到系统的环境变量path里。 C:\Program Files (x86)\Windows Kits\10\Lib\10.0.14393.0\um\x64 C:\Program Files (x86)\Windows Kits\10\Lib\10.0.14393.0\ucrt\x64 注意:有更改到系统环境变量都须重新登入或是重开机才会生效 最后再执行一次 在winpython环境里再打上python >>import theano 如果最后出现底下DEBUG字符串,恭喜!代表安装Theano run with GPU成功了 { DEBUG: nvcc STDOUT mod.cu Creating library C:/Users/shing/AppData/Local/Theano/compiledir_Windows-10-10.0.10586-SP0-Intel64_Family_6_Model_94_Stepping_3_GenuineIntel-3.5.2-64/tmp1qux40n6/md9b7b5ef5d727b2e8e3d2cc34bb9d0eb.lib and object C:/Users/shing/AppData/Local/Theano/compiledir_Windows-10-10.0.10586-SP0-Intel64_Family_6_Model_94_Stepping_3_GenuineIntel-3.5.2-64/tmp1qux40n6/md9b7b5ef5d727b2e8e3d2cc34bb9d0eb.exp

}

接着再打上python >>> import keras Using Theano backend. 以上也代表Keras也可以正常的工作,并且可以Base on Theano run with GPU。 接下来我们可以跑一些sample code来实际测试效能。 Theano实际测试: 首先我们在Theano的官网上可以发现有两个测试GPU的sample code:

http://deeplearning.net/software/theano/tutorial/using_gpu.html 我们就来实际跑看看使用CPU及GPU的差别。 如果在winpython想切回使用CPU跑,可以将.theanorc.txt 换成底下 ##===.theanorc.txt for CPU [global] openmp=True device = cpu floatX = float64 allow_input_downcast=True [gcc] cxxflags = -D_hypot=hypot

第一个程序theano1.py a.使用Intel CPU i7-6700HQ ,约2.488sec

b.使用GPU 950M 约0.4176 sec ,快了大约6倍。使用940M约0.9秒

第二个程序theano_gpu.py a.使用Intel CPU i7-6700HQ ,约3.019 sec

b.使用GPU 950M 只需0.012 sec ,快了大约250倍。使用940M约0.015秒。

第二支程序与第一支程序的差异在于,第一个程序是函数将直接其结果作为NumPy ndarray返回,为了方便,该函数已从设备复制到主机。而第二个程序是将输入从主机复制到GPU,并且优化exp()function的执行。 f = function([], sandbox.cuda.basic_ops.gpu_from_host(T.exp(x))) Keras实际测试: 首先我们先download keras 的examples. 直接使用git clone 的方式在命令视窗下执行,前提是已经有安装了git tool. git clone https://github.com/fchollet/keras.git 切到keras的examples 目录 cd keras/examples/ 该目录下有很多已建好的范例可以直接使用,并且都是python 的程序 Keras优点是其模块本身都可以使用Python程序语法自由组建,与caffe不同 使用caffe必须使用它定义类似Json的文档去建构网络架构。这会让你感觉不象是在写 python的程序。 首先直接先执行底下MLP网络范例试看看 python mnist_mlp.py 执行后一开始会出现很多底下DEBUG信息,这并不是错误,暂时可以不用管它,他会继续跑。 [2017/01/14更新] 用以下指令更新Theano 就不会出现DEBUG 信息了 pip install --upgrade --no-deps git+git://github.com/Theano/Theano.git

执行过程及结果如下:60000笔训练资料及10000笔测试资料,Epoch 20,得到accuracy 0.9843 这个使用950M跑的过程不到10分钟,之前用纯CPU跑约1个多小时应该有。

接下来再来跑一个大一点的范例试看看

python lstm_benchmark.py 一开始都会自动先下载data,这范例的data量很明显比刚刚大多了,到此可以先去喝杯咖啡~

经过多久没仔细计算,底下是跑出来的结果

如果有兴趣安装Pycuda ,也只要执行以下指令即可安装成功及使用,因为 CUDA在之前都已经安装成功了 pip install pycuda

本文分享自微信公众号 - 吉浦迅科技(gpusolution)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-03-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏量子位

不再需要词典了,现在,AI通过无监督学习学会了双语翻译

维金 编译 Science 量子位 出品 | 公众号 QbitAI ? 由于神经网络技术的发展,翻译自动化已经取得了长足的进步。然而传统上,训练这样的神经网络...

23330
来自专栏量子位

干货分享 | 自然语言处理及词向量模型介绍(附PPT)

云脑科技机器学习训练营第二期,对自然语言处理及词向量模型进行了详细介绍,量子位作为合作媒体为大家带来本期干货分享~ 本期讲师简介 ? 樊向军 云脑科技核心算法工...

53470
来自专栏量子位

我在Google用AI研究基因,入门从吴恩达的课程开始

允中 编译 Google博客 量子位 出品 | 公众号 QbitAI ? Google AI入驻计划,是一项为期12个月的研究培训项目,希望帮助不同领域的科学...

382100
来自专栏量子位

用机器学习拯救“智障”聊天机器人,谷歌开放分析平台Chatbase

李杉 李林 编译整理 量子位 出品 | 公众号 QbitAI 当你做了一个网站、App、游戏,肯定会马上想到要加上统计分析功能,这早就成了互联网产品的标配组件,...

451100
来自专栏新智元

【干货】关于机器学习你需要知道的一切(附中英论文下载)

【新智元导读】《主算法》作者、华盛顿大学教授 Pedro Domingos 写了文章“A Few Useful Things to Know about Mac...

425100
来自专栏人称T客

报告 | 机器学习:竞争优势的新探索

T客汇官网:tikehui 撰文 |卿云 最近,MIT技术评论定制和Google Cloud完成了一项名为《机器学习:竞争优势的新探索》调查,发现: ●201...

37270
来自专栏新智元

【干货】机器学习常用 35 大算法盘点(附思维导图)

【新智元导读】本文将带你遍历机器学习领域最受欢迎的算法。系统地了解这些算法有助于进一步掌握机器学习。当然,本文收录的算法并不完全,分类的方式也不唯一。不过,看完...

54870
来自专栏量子位

亚马逊全面发力AI,推机器学习托管服务、四项新工具,还有AI硬件

Root 假装发自 拉斯维加斯 量子位 出品 | 公众号 QbitAI 机器学习现在已经在多个领域爆发出惊人的能量,企业通过获取有效的用户数据,可以高效锁定用户...

32870
来自专栏新智元

【干货】机器学习工程师必须知道的十个算法

【新智元导读】机器学习算法可以分为三个大类:监督学习、无监督学习、强化学习。监督学习对于有属性(标记)的特定数据集(训练集)是非常有效的。无监督学习对于在给定未...

32160
来自专栏量子位

“每天AI资讯这么多!该看哪些?”推荐一份优质资料清单

原作 BAILOOL & meetshah1995 Root 编译自 GitHub 量子位 出品 | 公众号 QbitAI 人工智能最近火到炸裂,不看吧担心和时...

33960

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励