编译环境:
windows8.1
Anaconda python2.7
Visual studio 2012
CUDA6.0
Pthread for windows
Intel Math Kernel Library
cuda-convnet 原始文件下载地址:
https://github.com/dnouri/cuda-convnet/
其中用到的一些库:
PThread 下载链接:
ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip
Intel® Math Kernel Library 下载链接:(下载windows版本)
https://software.intel.com/en-us/intel-math-kernel-library-evaluation-options
cuda-convnet 工程文件下载链接:
http://code.google.com/p/cuda-convnet/downloads/detail?name=cuda-convnet-vs-proj.zip
其他一些有用的工具:(下载x64的版本,调试的时候可能用到)
http://www.dependencywalker.com/
因为cuda-convnet需要python27,所以必须下载python27的库安装上. 我用的是Anaconda自带的python库.
第一步:
把下载下来的cuda工程文件解压至trunk目录下,然后用记事本打开pyconvnet.vcxproj文件
然后把版本号修改为正确的版本号,我的是把cuda4.0 修改为cuda6.0
第二步:
编译时会遇到以下问题,那是头文件没包含对的缘故,不用担心
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\BuildCustomizations\CUDA 6.0.targets(597,9): error MSB3721: The command ""C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.0\bin\nvcc.exe" -gencode=arch=compute_10,code=\"sm_10,compute_10\" -gencode=arch=compute_20,code=\"sm_20,compute_20\" --use-local-env --cl-version 2012 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin" -I./ -I../../../common/inc -I../../../../shared/inc -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.0\include" -I./ -I../../common/inc -I../../../shared/inc -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.0\include" -G --keep-dir Debug -maxrregcount=0 --machine 32 --compile -cudart static -g -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MTd " -o Win32/Debug/convnet.cu.obj "E:\synchronize folder\Koder Quelle\deep learning\cuda-convnet\trunk\src\convnet.cu"" exited with code 2.
针对这些错误只要设置好相应的依赖库就可以了.
第三步:
最后编译生成的是dll,后缀名为pyd, 这样方便python调用.
第四步:
从下面的地址下载cifar-10图片数据
http://www.cs.toronto.edu/~kriz/cifar.html
第五步:
在VS环境中设置环境变量
第六步:
在命令行中输入如下命令:
python convnet.py --data-path=./storage2/tiny/cifar-10-batches-py-colmajor/ --save-path=./storage2/tmp --test-range=6 --train-range=1-5 --layer-def=./example-layers/layers-19pct.cfg --layer-params=./example-layers/layer-params-19pct.cfg --data-provider=cifar --test-freq=13 --epoch=200
训练的时候发现一个比较坑的问题就是这两个错误:
1.raise UnpickleError("Path ‘%s‘ does not exist." % filename)
util.UnpickleError: Path ‘D:/cuda-convnet/storage2/tiny/cifar-10-batches-py-colmajor/data_batch_6‘ does not exist.
2.self.data_mean = self.batch_meta[‘data_mean‘]
KeyError: ‘data_mean‘
原因是batches_meta文件格式不对,这个必须去下载对应的cifar-10的数据,而且带有合乎要求格式的文件,下面给上链接:
http://www.cs.toronto.edu/~kriz/cifar-10-py-colmajor.tar.gz
即使找到合适的数据,还可能出现以下的错误:
self.libmodel = __import__(lib_name)
ImportError: No module named convnet_
解决方案就是在convnet.py的46行把‘convnet_‘库改成对应的‘pyconvnet‘
解决了以上的问题以后差不多应该能够顺利的运行程序了.
编译时遇到的错误及解决方案:
fatal error C1083: Cannot open include file: ‘cblas.h‘: No such file or directory
解决方案:
属性页/C++/Preprocessor/Preprocessor definitions/加入USE_MKL;
neuron.cuh(104): error : identifier "PyObject" is undefined
解决方案:
属性页/C++/Preprocessor/Preprocessor definitions/加入NUMPY_INTERFACE;
编译的时候提示找不到pthread.h文件:
解决方案:
在trunk中加入下载好的pthread文件夹,并正确的包含头文件和库文件
编译的时候报error : identifier "pthread_mutex_t" is undefined错误:
解决方案:
在nvmatrix.cuh文件里加上<pthread.h>
LINK : fatal error LNK1104: cannot open file ‘cutil64D.lib‘
解决方案:
去掉cutil64D.lib
LINK : fatal error LNK1104: cannot open file ‘shrUtils64D.lib‘
解决方案:
去掉shrUtils64D.lib
cuda-convnet windows8下编译