最近使用Theano写了MLP和CNN的程序,由于训练样本大,单靠CPU运算速度so slow;于是乎找到了一台有NVIDIA显卡的电脑进行了GPU的配置使用,期间遇到很多问题,记录如下。
平台说明:
Python:2.7, 建议直接使用 Python(x,y),包含了Theano需要的Numpy等库,省去自己配置
Theano: 0.6
CUDA:3.0
下载
1 下载安装Theano: easy_install theano
2 下载CUDA:传送门
3 下载驱动、工具包、软件开发包,按顺序安装
注:同学们最好直接下载3.0版的,我最早下的2.3版本,但发现Theano的CUDA模块对2.3的支持很差很差,改了..\theano\sandbox\cuda\下.cu里面的很多代码,比如cudaMemGetInfor(为3.0版本的接口,2.3为cuMemGetInfor,详细见这里),最终编译没错了,但出现了很难处理的link bug。最终改用3.0后,只改了小部分的代码就成功运行(怎么改后面有说明)。
配置
打开theano的配置文件(一般在用户文件夹的根目录,例如C:\Documents and Settings\Administrator\,名为.theanorc.txt)添加以下配置:
[nvcc]
flags=-LC:\python27\libs
compiler_bindir=C:\program Files\Microsoft Visual Studio 9.0\VC\bin
注:2.3版本的只支持MSVC8.0和MSVC9.0
添加后import theano.sandbox.cuda进行初测,成功后进行下面的配置:
[global]
device = gpu
floatX = float32
最后run theano/misc/check_blas.py来进行测试,或者直接import theano ; theano.test()。
遇到的问题
1 class “cudaDeviceProp” have no conponent of named "concurrentKernels" 跟进cuda_ndarray.cu,在2796行附近有:
#if CUDART_VERSION >= 3000
put_in_dict(dict, "concurrentKernels", deviceProp.concurrentKernels);
#endif
在C:\CUDA下找到cudaDeviceProp的类,看到里面并没有concurrentKernels,虽然vision是3.0的。
解决方案:注释掉上面的部分即可。
2 fatel error C1083:无法打开包括文件:stdint.h: No such file or directory
解决方法:
去googlecode下载http://msinttypes.googlecode.com/files/msinttypes-r26.zip,解压后会得到三个文件,把inttypes.h和stdint.h放到vc的include目录就可以了。
我安装的是VS2008,安装到的默认位置,因此include的路径就是: C:\Program Files\Microsoft Visual Studio 9.0\VC\include。
3 如何查看GPU状态
下载GPUZ即可。
结语
最后成功运行,虽然这台带有NVIDIA的机器很老很老了,但有了GPU的加速,比在我Y470上跑速度快N倍。
GPU,很好很强大。