前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【阿星的学习笔记(1)】如何在windows安裝Theano +Keras +Tensorflow並使用GPU加速訓練神經網路

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

作者头像
GPUS Lady
发布2018-04-02 14:09:34
1.4K0
发布2018-04-02 14:09:34
举报
文章被收录于专栏:GPUS开发者GPUS开发者GPUS开发者

今天开始,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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GPUS开发者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档