Win7 64位系统,VS2010环境下编译cuda-convnet指南

来源:互联网 发布:知识树软件下载 编辑:程序博客网 时间:2024/05/16 12:31


注意:

1. 本文给出的方法的最低要求为win7 64位系统和vs2010,其他需要装的软件/第三方库都在

    正文中给出了链接。当然,这些软件/函数库都是正版的和免费的。

2. 对于已经装有Intel(R) C++ Studio XE 2013的系统,推荐basaltZhang的帖子。

3. 本文采用的cuda-convnet为含有dropout功能的改进版,应该与原版兼容。

            原版cuda-convnet:https://code.google.com/p/cuda-convnet/ 

            改进版cuda-convnet:https://github.com/dnouri/cuda-convnet

4. 本文所述的方法在两种型号的GPU上都通过了测试:GeForce 610M和GTX 690。

    由此结果可知,计算性能高于GeForce 610M的GPU都可用本方法。


编译过程:(编译过程在Wyvernbai的帖子所述的方法的基础上进行了少许改动)

0.  准备工作

     安装Visual Studio2010, Python2.7, CUDA5.5 SDK,后两个可以从官网下载安装文件。 

     安装numpy,可以从官网上下载源码自己编译,也可以从这里上下载别人编译好的版本。

     下载cuda-convnet的VS2010工程:cuda-convnet-vs-proj.zip。

     下载已经编译好了的openBLAS and pthread-x64库:LIBS.zip。

     感谢一个叫Oriol Vinyals的同学提供cuda-convnet的VS2010工程。

     感谢一个叫Wyvernbai的网友提供LIBS库。

     感谢伟大的GFW没有把以上这些网址给墙掉。

1.  解压cuda-convnet-vs-proj.zip,用记事本/写字板打开pyconvnet.vcxproj.

     将其中的CUDA 4.0.targets 改成CUDA 5.5.targets,总共有两处地方要修改。

     当然,如果您的CUDA SDK版本为5.0,那就把这里的数字改成5.0就行了。

2.  解压cuda-convnet的源码:cuda-convnet-master.zip,将其中的include和src文件夹拷贝到工程文件夹中。

3.  双击convnet.sln打开工程,将工程设置为x64 release模式。

4.  对于所有c++文件,将cutil_inline.h替换成helper_cuda.h;将cutilCheckMsg替换成getLastCudaError。

5.  在include/cudaconv2/conv_util.cuh和include/nvmatrix/nvmatrix.cuh中加入#include <helper_image.h>。

     在include/neuron.cuh中加入#include <Python.h>。

     在src/convnet.cu中加入 #define cutGetMaxGflopsDeviceId() gpuGetMaxGflopsDeviceId()。

     在include/nvmatrix/nvmatrix.cuh中加入#include <pthread.h>。

6.  解压LIBS.zip,将解压后的文件拷贝到工程文件夹中。

7.  Property -> Configuration Properties -> C/C++ -> General -> Additional Include Directories

     加入包含目录路径。保留以下部分,其他的删掉: 

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. ./include/common  
  2. ./include/nvmatrix  
  3. ./include/cudaconv2  
  4. ./include  
  5. $(CudaToolkitIncludeDir)  
  6. ./   

     然后加入如下部分:

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. C:\Python27\Lib\site-packages\numpy\core\include\numpy  
  2. C:\Python27\include  
  3. .\LIBS\Pre-built.2\include  
  4. .\LIBS\include  
  5. C:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.5\common\inc  

8.  Property -> Configuration Properties ->Linker -> General -> Additional Library Directories

     加入库目录。最终如下所示:

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. 最终如下所示:  
  2. C:\Python27\libs  
  3. C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\lib\x64  
  4. .\LIBS  
  5. .\LIBS\Pre-built.2\lib  
  6. $(CudaToolkitLibDir)  

9.  Property -> Configuration Properties ->Linker -> Input-> Additional Dependencies

     加入附加依赖项。保持原有的不变,在其中加入python27.lib  libopenblas.lib。

10. Property -> Configuration Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions

      中删除USE_MKL

      Property -> Configuration Properties -> CUDA C/C++ -> Host -> Preprocessor Definitions 

      中删除USE_MKL

11.  build整个工程。如果编译成功,就OK了。


测试过程(测试过程遵循cuda-convnet官方主页的说明文档步骤)

0.  下载数据集:cifar-10-py-colmajor.tar.gz 。

1.  在工程文件夹中新建一个data文件夹,将cifar-10-py-colmajor.tar.gz 解压后拷贝到data中。

2.  在工程文件夹中新建一个tmp文件夹。

3.  将cuda-convnet-master中除了include和scr之外的所有文件都拷贝到工程文件夹中。

4.  下载 Dependency Walker,将工程文件夹中的pyconvnet.pyd在Dependency Walker中打开,检查缺少

     的dll文件。实际上,按照上面的步骤几乎肯定缺少两个dll文件:libopenblas.dll 和pthreadVC2_x64.dll, 

   这两个文件都在LIBS文件夹中。将它们拷贝到工程文件夹即可。可能还会缺少其他的dll,比如,我的机器

     就缺少 libgfortran-3.dll,需要从网上下载。

5.  在cmd中运行命令:

     python convnet.py --data-path=.\data\cifar-10-py-colmajor --save-path=.\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

     运行成功会出现如下信息:

     


常见错误:

1. 测试阶段,错误提示为:

          import pyconvnet 

          ImportError: DLL load failed: 找不到指定的模块。

    解决方法:这种错误是缺少dll引起的,用Dependency Walker进行全面检查。

2. 测试阶段,错误提示为:

         Error at C:/cuda-convnet-vs-proj/src/nvmatrix.cu:276

    解决方法:这种错误是由于系统无法调用GPU,请运行CUDA SDK的例程,确认GPU是否可用。

    注:如果用户是通过远程桌面连接到Window 7,那么他是无法调用GPU的,

    这时,可以通过VNC或者向日葵远程控制软件来远程登录Win 7系统。


0 0
原创粉丝点击