Theano + Keras + CUDA7.5 + VS2013 in Windows10x64 配置

Visual Studio 2013

正常安装,这里只要C++打勾就可以。

ANACONDA

ANACONDA是封装了Python的科学计算工具,装这个就可以不用额外装Python了。在安装之前建议先卸载电脑里已装的Python。这里建议用对应Python 2.7的Anaconda2-2.4.0。 Anaconda3对应的Python3.x,之前用这个的时候,example遇到各种语法问题。

官网下载

MinGW

装了ANACONDA之后,在CMD控制台:

conda install mingw libpython

下载有点慢,不过文件本身也不大。 之后就在Anaconda的安装目录下看到MinGW了。

安装Theano

从github上Theano/Theano下载最新源码,用git或者svn拉代码速度更快些。 到源码的trunk里:

python setup.py install

就装好了。

安装Keras

和Theano一样方法,github上的fchollet/keras下载源码。

python setup.py install

安装CUDA

下载地址,选自己系统对应的版本。这里是windows->x86_64->10->exe(local)。 直接安装

CuDNN

从官网下载需要注册账号申请,两三天批准。网盘搜索一般也能找到最新版。 Windows目前就是cudnn-7.0-win-x64-v3.0-prod.zip。

解压出来是名为cuda的文件夹,里面有bin、include、lib,复制到安装CUDA的地方覆盖对应文件夹。 我的在C:FilesGPU Computing Toolkit 系统环境变量Path里添加:

D:\IDE\Microsoft Visual Studio 12.0\VC\bin;
%CUDA_PATH%\lib\x64;
%CUDA_PATH%\bin;

第一个是Visual Studio 的VC目录,CUDA_PATH是安装CUDA后自动增加的环境变量,当作前缀。

配置GPU加速

在用户目录,也就是C:\Users\当前用户名\,新建.theanorc.txt。 这个路径可以通过修改Theano的configparser.py来改变。Theano装在Anaconda\Lib\site-packages里。 .theanorc.txt的内容:

[global]
openmp=False
device = gpu
optimizer_including=cudnn #不用cudnn的话就不要这句
floatX = float32
allow_input_downcast=True
[blas]
ldflags=
[gcc]
cxxflags=-ID:\Tools\Anaconda\MinGW #改成自己装的目录
[nvcc]
fastmath = True
--flags=-LD:\Tools\Anaconda\libs #改成自己装的目录
--compiler_bindir=D:\IDE\Microsoft Visual Studio 12.0\VC\bin  #改成自己装的目录
flags=-arch=sm_30

测试

在控制台

python
>>> import theano

如果执行后能看到使用了GPU,就是配好了。 Keras源码的example里随便挑一个,一般就用mnist_cnn.py。

python mnist_cnn.py

测试数据可能需要下载一些时间。 如果GPU配置成功的话,会看到GPU信息的。我的i5 4690平均每组1000+s,TitanX跑就15秒了,加了CuDNN之后13秒。


问题排查

flags= -arch=sm_30

.theanorc.txt最后这行flags= -arch=sm_30有时会导致报错,暂时不懂是干什么的,可以注释掉或者换数字试试。

stack-overflow上有个解释:

http://stackoverflow.com/questions/10330527/what-is-difference-between-arch-sm-13-and-arch-sm-20

CNMeM is disabled

参考这里:

https://github.com/fchollet/keras/issues/987.theanorc.txt结尾加上

[lib]
cnmem=.75

具体数值多少可以不出错,可能与设置与配置有关。加上这个之后速度有显著提升。我的GTX850M的笔记本跑mnist每组从25秒提升到了12秒。