Lasagne on win7 with GPU Environment & VizDoom compilation

Theano与Lasagne


1. Anaconda安装

2. copy theano 目录到 path/to/Anaconda/Lib/site-package 目录下

3. 进入Conda prompt:

1
2
3
4
5
6
7
8
conda create -n python34 python=3.4.4
activate python34
cd C:/Program Files/Anaconda2/envs/python34/Scripts
conda install mingw
conda install libpython -n python34
conda install scipy
conda install nose
conda install theano

4. 检查下mingw的目录是否在环境变量中:

path:
C:\Program Files\Anaconda2\envs\python34\MinGW\bin
C:\Program Files\Anaconda2\envs\python34\MinGW\x86_64-w64-mingw32\lib
这个目录与攻略中略有不同,因为我们通过anaconda安装的mingw在python34目录下
PYTHONPATH:
C:\Program Files\Anaconda2\Lib\site-packages\theano

5. 安装VS2015

在VizDoom的编译中是必须的,而且CUDA安装时同样需要VS2015.

6. 安装CUDA

在安装cuda之前最好先安装DirectX,而在安装DirectX的过程中可能会遇到S1023错误,这是因为和之前安装的旧版本冲突了,所以先在控制面板中卸载Microsoft Visual C++ 2010 x86/x64 Redistributable,再重新安装就好了。
cuda-8.0 for windows 64bit + visual studio 2015,实际上最终安装的版本是cuda 7.5+vs2010,下面将看到这个折腾的过程。
基本上按照here的顺序就可以,但是在测试cuda是否安装成功和设置cuda目录的时候,都发现sdk目录下好像缺失了些什么,比如没有bandwidthtest和queryDevice两个测试程序。
这里的两个测试程序是需要使用vs自己去编译的,而不是cuda在安装过程中生成的。在上面的安装执行结束后,sdk的安装目录(也就是上面CUDA samples的安装目录)下,会生成vs的sln文件,打开并编译。如果和我一样忘记安装DirectX,在这里编译时就会遇到simpleD3D10工程中有找不到d3dx9.h的错误,此时安装DirectX后设置好include和lib目录就可以了。而笔者是安装DirectX后重新安装CUDA toolkit的,在重新安装的时候还遇到一次黑屏,还好虚惊一场。
测试过程中,bandwidthTest和deviceQuery都得到“设备无法被弹出或拔出”的错误提示,所以重新查找并安装了显卡驱动。

1
2
3
4
5
6
7
8
9
10
353.30 fail 35 cuda version is insufficient for cuda runtime version
365.10 fail 30 unknown error
365.19 fail 30 unknown error
368.22 fail 30 unknown error
368.39 fail 38 弹出
368.69 安装失败黑屏
368.81 安装失败黑屏
369.30 fail 38 弹出
372.70 fail 38 弹出
373.06 安装失败黑屏

后来重装系统并安装驱动353.90后cuda 7.5版本可用,而使用相同的驱动如果是cuda 8.0则会被提示驱动版本insufficient的问题,至此可以说,8.0+vs2015的搭配在我的笔记本上是失败的,所以最终只能选择7.5了。最后不死心地在另一名同事的机器上尝试了8.0+vs2015 community的搭配,成功了,这很让我费解。他的机器是GeForce GT 720M显卡,我的是GeForce 940M显卡,所以如果你是720就大胆地去用8.0吧,否则7.5的成功概率高多了。如果有人知道根本原因或者解决方案,请务必赐教于我。

7. 配置theano路径

进入C盘下当前用户的路径,我的是在C:\Users\Administrator
新建文件.theanorc.txt:

1
2
3
4
5
6
[global]
floatX = float32
device = gpu
[nvcc]
--flags=-LC:\Program Files\Anaconda2\envs\python27\libs
--compiler_bindir=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin

8. 使用test.py与using_gpu.py测试theano安装情况

出现的第一个错误:
undefined reference to __imp_pyexc_typeerror
这个PyExc_TypeError出现在mod.cpp中。经过查找居然是没有安装libpython的原因,检查安装了哪些可以通过conda list查询。虽然上面我明明执行过conda install libpython的操作,但是的确重新执行一次就不会有这个错误了,所以遇到类似错误可以查看conda list 是不是安装了libpython。在安装后一定要重新安装theano,并且在path中添加下cuda toolkit的bin目录,否则又会进入到下面的错误中。
出现的第二个错误:
importerror the following error happened while compiling node
出现的第三个错误:
找不到cl.exe
需要把C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin目录添加到path目录,cl就在这个目录下。
之后就可以看到正常的测试情况了。

9. 安装OpenBlas

如果用check_blas.py测试可以看到现在的theano并没有使用blas,而是numpy。这里使用的是win7 64bit下编译好的OpenBlas,直接添加在相关路径下。
把mingw64_dll.zip 下的三个dll和OpenBLAS-v0.2.15-Win64-int32.zip下的libopenblas.dll copy到C:\Program Files\Anaconda2\envs\python27\MinGW\bin目录下,当然只要在path目录中就可以,我觉得这里比较合适。
然后在.theanorc.txt中添加如下配置项:
[blas] ldflags=-lopenblas [gcc] cxxflags=-IC:\openblas\include -LC:\openblas\lib
这里openblas就是解压后的OpenBLAS-v0.2.15-Win64-int32.zip路径。
再次执行check_blas.py的时候可以看到最后,这表明blas安装成功了,而之前是without direct Theano binding to blas …… to numpy……

10. 安装Lasagne

在anaconda prompt中进入envs/python27/Scripts目录,

1
pip install --upgrade --no-deps --user https://github.com/Lasagne/Lasagne/archive/master.zip

之后可以尝试

1
python mnist.py mlp 5

将会下载数据并执行mnist任务,返回5次epoch的训练结果。
如果需要cuCNN,请参见here
至此,theano和lasagne的安装已经完成了。接下来是要编译VizDoom了。

VizDoom


VizDoom的编译惨遭Doom的编译过程,请严格执行如下tutorial

有几个点尤其要注意:

  1. 一定用vs2015,虽然说是支持vs2012
  2. cmake配置工程项的时候,如果不需要JAVA支持(我使用python binding)尽量就不要选了;而其中有些zlib等要选择inner编译
    我直接copy了在另一个机器上(同样为win7 64bit)的编译结果,如果真的懒得安装那么多东西,可以直接copy我编译的结果。

Comments: