如何使用白菜价GPU运行基于MatConvNet的CNN程序
2017-02-28 15:19
429 查看
MatConvNet是一个基于MATLAB的工具箱。针对计算机视觉相关的应用,它实现了卷积神经网络(CNN)的各种基本功能。相对于Caffe或Tensor Flow等基于C/C++底层实现的CNN函数库来说,它具有便于学习、易于修改以及适合跨平台编程等特点,适合CNN的初学者来学习。
然而,因为某种原因,它对NVIDIA系列早期型号的显卡支持并不好。以现在Amazon上白菜价都能买到的GeForce GT 610为例,在打开GPU支持进行编译后,可能会出现如下的编译错误:
经过网上查资料了解,这其实是因为MatConvNet的GPU编译代码中的一个Bug所导致。对于早期的显卡型号,它仅支持十的整数倍的GPU体系代码。在上面的例子中,如果将'compute_21'置换成‘compute_20’,便可以正常的编译了。为此,我们需要将vl_compilenn.m文件中的一个函数进行如下的修改:
如此一来,与GPU相关的代码就能正常编译了。不过需要注意的是,在编译时不要打开cuDNN的支持,否则在运行时,会因为编译和运行时GPU体系代码不一致,而导致程序异常结束。
所以,如果身边有闲置的机器但又苦于没有高端的GPU时,可以考虑购置一些低端的显卡。然后,用此方法编译、运行一些对GPU速度、内存需求不高的程序,以提高机器的利用率。
然而,因为某种原因,它对NVIDIA系列早期型号的显卡支持并不好。以现在Amazon上白菜价都能买到的GeForce GT 610为例,在打开GPU支持进行编译后,可能会出现如下的编译错误:
nvcc fatal : Unsupported gpu architecture 'compute_21'
经过网上查资料了解,这其实是因为MatConvNet的GPU编译代码中的一个Bug所导致。对于早期的显卡型号,它仅支持十的整数倍的GPU体系代码。在上面的例子中,如果将'compute_21'置换成‘compute_20’,便可以正常的编译了。为此,我们需要将vl_compilenn.m文件中的一个函数进行如下的修改:
% -------------------------------------------------------------------- function cudaArch = get_cuda_arch(opts) % -------------------------------------------------------------------- opts.verbose && fprintf('%s:\tCUDA: determining GPU compute capability (use the ''CudaArch'' option to override)\n', mfilename); try gpu_device = gpuDevice(); arch_code = strrep(gpu_device.ComputeCapability, '.', ''); % To fix the bug arch_code_temp = str2double(arch_code); arch_code_temp = floor(arch_code_temp/10)*10; arch_code = num2str(arch_code_temp); % cudaArch = ... sprintf('-gencode=arch=compute_%s,code=\\\"sm_%s,compute_%s\\\" ', ... arch_code, arch_code, arch_code) ; catch opts.verbose && fprintf(['%s:\tCUDA: cannot determine the capabilities of the installed GPU; ' ... 'falling back to default\n'], mfilename); cudaArch = opts.defCudaArch; end
如此一来,与GPU相关的代码就能正常编译了。不过需要注意的是,在编译时不要打开cuDNN的支持,否则在运行时,会因为编译和运行时GPU体系代码不一致,而导致程序异常结束。
所以,如果身边有闲置的机器但又苦于没有高端的GPU时,可以考虑购置一些低端的显卡。然后,用此方法编译、运行一些对GPU速度、内存需求不高的程序,以提高机器的利用率。
相关文章推荐
- 如何使用Administrators组用户运行ASP程序
- 如何使PC上运行的程序不能退出,并且用户只能使用当前正在运行的程序。不能使用PC上的其他程序
- 如何使用命令行来运行程序
- 如何使用sublime编辑器运行python程序
- 如何查看Linux系统下程序运行时使用的库?
- Visual Studio 中使用Word、Excel等COM控件时如何配置服务器让程序正常运行?
- 如何使用ssh来运行linux的GUI程序
- 《HBase in Action》 第三章节的学习总结 ---- 如何编写和运行基于HBase的MapReduce程序
- 如何使用sublime编辑器运行python程序
- 如何使用sublime编辑器运行python程序
- 如何使用互斥量禁止程序运行两个实例
- 如何在运行时切换WinForm程序使用的语言?
- C#使用_如何在没有装VS(Visual Studio)的机器上编译运行C#程序
- 如何利用windosAPI计算程序运行时间 不使用VC的库,也就是说不跨系统,跨编译器
- 如何使用进程名禁止程序运行两个实例
- Vista、Win7上.net程序如何自动使用管理员权限运行
- 用vs2008开发基于wince的程序如何直接运行在wince上
- windows 下使用GNUstep 运行xcode 的基于foundation的程序
- 如何使用sublime编辑器运行python程序
- 如何查看程序的运行栈 之 __builtin_return_address的使用