win7(低版本显卡GeForce 610M)配置MatConvNet

本文详细介绍CUDA7.5环境搭建步骤及MatConvNet安装配置流程,包括VS2013、MATLAB R2014a安装,环境变量设置,MatConvNet CPU与GPU版本编译,以及CUDNN安装与验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、环境搭建

1.1 下载安装vs2013

1.2 下载安装matlabR2014a

1.3 下载安装cuda7.5

1.3.1 CUDA 7.5 安装

1.运行cuda_ 7.5.18_windows.exe,程序会检测系统的兼容性如下图: 

2.选择“同意并继续”,进入下图安装过程 (备注:安装cuda时,要关闭所有的vs程序,关闭360等管家软件) 

3.等待大概半个小时后,安装程序终于完成了。

1.3.2  添加环境变量

CUDA_PATH = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5
CUDA_PATH_V7_5 = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5
CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\CUDA Samples\v7.5
CUDA_LIB_PATH = %CUDA_PATH%\lib\x64
CUDA_BIN_PATH = %CUDA_PATH%\bin
CUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%\bin\win64
CUDA_SDK_LIB_PATH = %CUDA_SDK_PATH%\common\lib\x64

      然后,在系统变量path的末尾添加: %CUDA_LIB_PATH%;%CUDA_BIN_PATH%;%CUDA_SDK_BIN_PATH%;%CUDA_SDK_LIB_PATH%;

1.3.3 重启计算机使得环境变量生效

1.3.4 验证cuda7.5已正确安装:

      打开cmd,输入$ nvcc  -V,结果如下图:



2、安装配置MatConvNet 

MatConvNet: CNNs for MATLAB

下载 ----- http://www.vlfeat.org/matconvnet/  可以下载最新版

 

2.1.安装MatConvNet 

   

    1、untar('http://www.vlfeat.org/matconvnet/download/matconvnet-1.0-beta20.tar.gz') 是下载安装包的过程,建议单独下载其ZIP包,解压后放在任意位置,运行程序的时候会通过vl_setupnn()自动添加路径到Matlab中。下载时最好使用浏览器内置的下载器,因为迅雷下载下来的是一个txt文件,还需要转换。

       下载压缩包matconvnet-1.0-beta20.tar.gz解压后,在examples文件夹下,可以找到相应数据集的卷积网络进行训练、或者使用。 经典模型都有,主要有Lenet、Alex、NiN、Vgg-face、VGG-F/S/M/VD、GoogleNet等CNN模型。而且,在训练之前,程序会自动下载数据集,CIFA-10,MNIST。但ImageNet数据太大需要手动下载。

在MATLAB中,打开文件夹matconvnet里的MATLAB文件夹,如下图所示,找到vl_compilenn.m文件。

       

2.2.编译MatConvNet的CPU版本

        设置matlab的C++编译器,运行mex -setup,  再提示信息中选择VS C++;

       在安装根目录下找到 函数function vl_compilenn(varargin),直接运行,默认为即CPU模式下编译。

       最后显示“ MEX  成功!!”; 此时可以看到根目录下的mex文件夹下出现编译后的xxx.mex64文件。

       若不配置GPU,则配置就此结束!!!!! 可以到examples下进行试验~~~~~~~~

      这里,run matlab/vl_compilenn是编译的过程,前提是要求matlab与编译器(VSc++)实现连接,如果没有可以使用mex -setup命令,设置matlab的C++编译器,提示MEX成功,才可以运行example中的示例。这个实际上就是配置Matconvnet的过程,只需要两句话:mex -setup;run matlab/vl_compilenn


2.3.配置CUDA 7.5

       

       1. 之前已经安装好了,现在打开 cuda samples 文件夹下 Samples_vs2013.sln 分别在DEBUG 和Release X64下进行完整编译。编译过程如提示找不到”d3dx9.h”、”d3dx10.h”、”d3dx11.h”头文件,则百度下载   DXSDK_Jun10.exe并安装。之后再重新编译。  (可参考 http://blog.sina.com.cn/s/blog_534497fd0102vbu3.html)

       2. 编译cuda7.5自带的samples:在C:\ProgramData\NVIDIA Corporation\CUDA Samples\v7.5目录下,用vs2013,打开Samples_vs2013.sln,在Release下,选中解决方案Samples_vs2013,重新生成解决方案,第一次编译会提示找不到”d3dx9.h”、”d3dx10.h”、”d3dx11.h”头文件,可从这里下载DXSDK_Jun10.exe,按照默认安装即可;然后重新打开Samples_vs2013,再编译即可,结果如下图:


       编译成功 C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0\bin\win64\Release和Debug目录下会生成很多文件(编译过程时间较长)
      3. 执行C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0\bin\win64\Release目录下的deviceQuery.exe和bandwidthTest.exe: 如下图。运行其中的小程序,即可  查看GPU CUDA信息。PASS 为通过。



       4. 安装cudnn-win64-v4.0/or-v3.0 

(1)解压缩:会生成cuda/include、cuda/lib、cuda/bin三个目录;分别将cuda/include、cuda/lib、cuda/bin三个目录中的内容拷贝到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5对应的include、lib、bin目录下即可。

(2)将cudnn64_4.dll 文件拷贝到 ./matconvnet/Matlab/mex文件夹下即可。

       

2.4.编译MatConvNet的GPU版本

     在CUDA安装完成之后,即可调用 nvcc编译器 编译MatConvNet的GPU版本。

     找到 function vl_compilenn(varargin) ,这是编译函数。

     设置GPU编译器: opts.enableGPU =true ,opts.cudaMethod  = 'nvcc' ; %意思就是调用NVIDIA compiler→ nvcc 

     注意:需要 将新的CUDA版本号‘7.5’添加到程序(即编译函数vl_complienn)中、供其查找CUDA路径。

      

       编译完成后,运行cnn_cifa.m文件,运行前修改为GPU,不同版本修改为GPU的方式不同。在matconvnet-1.0-beta20中,修改cnn_cifa.m文件如下: opts.train.gpus = [1];指明使用GPU运行程序。


       看到如下输出信息,说明成功。(这并不是我电脑的运行结果,这个显卡版本很不错了)



运行结果如下:


蓝色是训练错误率  绿色是测试错误率。

其中top1是前1命中错误率,top1是只让你猜一次;

top5 是前5命中错误率 ,top5是让你猜5次,只要这5次里面有一次正确,就算正确。


在这里运行cnn_cifa.m文件时,出现如下错误:

[plain] view plain copy
 print?
  1. nvcc fatal   : Unsupported gpu architecture 'compute_21'   

       然而,因为某种原因,它对NVIDIA系列早期型号的显卡支持并不好。以现在Amazon上白菜价都能买到的GeForce GT 610为例,在打开GPU支持进行编译后,可能会出现如下的编译错误:      

       经过网上查资料了解,这其实是因为MatConvNet的GPU编译代码中的一个Bug所导致。对于早期的显卡型号,它仅支持十的整数倍的GPU体系代码。在上面的例子中,如果将'compute_21'置换成‘compute_20’,便可以正常的编译了。为此,我们需要将vl_compilenn.m文件中的一个函数进行如下的修改:

[plain]  view plain  copy
 print ?
  1. % --------------------------------------------------------------------  
  2. function cudaArch = get_cuda_arch(opts)  
  3. % --------------------------------------------------------------------  
  4. opts.verbose && fprintf('%s:\tCUDA: determining GPU compute capability (use the ''CudaArch'' option to override)\n', mfilename);  
  5. try  
  6.     gpu_device = gpuDevice();  
  7.     arch_code = strrep(gpu_device.ComputeCapability, '.', '');  
  8.     % To fix the bug  
  9.     arch_code_temp = str2double(arch_code);  
  10.     arch_code_temp = floor(arch_code_temp/10)*10;  
  11.     arch_code = num2str(arch_code_temp);  
  12.     %  
  13.     cudaArch = ...  
  14.         sprintf('-gencode=arch=compute_%s,code=\\\"sm_%s,compute_%s\\\" ', ...  
  15.         arch_code, arch_code, arch_code) ;  
  16. catch  
  17.     opts.verbose && fprintf(['%s:\tCUDA: cannot determine the capabilities of the installed GPU; ' ...  
  18.         'falling back to default\n'], mfilename);  
  19.     cudaArch = opts.defCudaArch;  
  20. end  

       如此一来,与GPU相关的代码就能正常编译了。不过需要注意的是,在编译时不要打开cuDNN的支持,否则在运行时,会因为编译和运行时GPU体系代码不一致,而导致程序异常结束。

      所以,如果身边有闲置的机器但又苦于没有高端的GPU时,可以考虑购置一些低端的显卡。然后,用此方法编译、运行一些对GPU速度、内存需求不高的程序,以提高机器的利用率。



参考资料:

http://www.linuxidc.com/Linux/2016-12/138862.htm 64位Windows 7 安装配置CUDA7.5/8.0+cuDNN5.0图文详解

http://blog.youkuaiyun.com/zhjm07054115/article/details/49964597 Windows7 下编译 MatConvNet 和 CUDA7.5 
http://blog.youkuaiyun.com/raodotcong/article/details/58596841如何使用白菜价GPU运行基于MatConvNet的CNN程序


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值