Matlab编译安装MatConvnet流程及问题记录

参考:MATLAB安装MatConvNet笔记 - 知乎

安装过程:

1. 安装依赖项

确保一下软件和依赖已经被安装并设置为最新版本:

- MATLAB

- CUDA toolkit(如果您要使用GPU加速)

- cuDNN(如果您要使用GPU加速)

- Microsoft Visual Studio(我的是2015)

2.配置编译器

在Matlab中输入mex -setup,绑定C++编译器

mex -setup

9e9d297f85874779bc29eb3161a77e10.png

3. 下载并配置MatConvNet

在MatConvNet的GitHub页面上下载最新的稳定版本, matconvnet下载地址:Home - MatConvNet 。 下载的matconvnet深度学习工具包,我这里用的是最新版本matconvnet-1.0-beta25,下载后解压放到“E:\XYL\matlab2014b”路径下。

4.编译CPU版

matlab中切换到matconvnet-1.0-beta25的路径下:

(1)编译CPU版:

addpath matlab
vl_compilenn
vl_testnn

(2)编译GPU版-第一种方法,我没试过

这种方法应该不用把cudnn的文件夹拷贝到matconvnet文件夹中:

vl_compilenn('enableGpu',true,'cudaRoot','C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2','cudaMethod' ,'nvcc','enableCudnn','true','cudnnRoot','C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA')

参考:https://zhuanlan.zhihu.com/p/138587666

(2)编译GPU版-第二种方法

在matconvnet的安装目录下新建一个文件夹local/cudnn,将下载的cudnn放进去:

注:因为我之前就配好了CUDA环境,所以cudnn文件放在C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.2路径下,因此我将bin、include和lib三个文件夹拷进去即可

ea10ad7b3d284657a6f9c1f30ab883a1.png

cudnn文件夹位置

ccdd72e5087649b9b0067bd5534e613f.png

将cudnn文件放入matconvnet-1.0-beta25local/cudnn下

执行以下命令:

addpath matlab # 添加到路径中
vl_compilenn('enableGpu', true);
vl_testnn('gpu', true); # 测试

显示编译成功了:

1cdaa05627044362abc31dd2871297a0.png

E:\XYL\matlab2014b\matconvnet-1.0-beta25\matlab中还会多出一个mex文件夹

68cd4e7fffc54191adf7e34473963c6e.png

参考:MATLAB安装MatConvNet笔记 - 知乎

问题记录:

1.Matlab 未找到支持的编译器或 SDK 

使用

mex -setup

配置编译器时,报错:Matlab 未找到支持的编译器或 SDK 

这是因为我的是matlab2014和VS2015,win10的64位系统。matlab2014的bin/win64/mexopts文件夹中最高支持的VS编译器是2013,不想重新安装VS的同学,就只能找高版本中的mexopts文件夹对应的VS版本支持.xml文件

第一种解决办法:

这是因为:

VS版本不要高于matlab能支持的最高VS版本(这个可以在R2019a/bin/win64/mexopts文件夹下可以看到),否则要在mexopts中补充相应版本的几个VS的xml文件。文件下载链接见:GitHub - tzslg/mexopts: mexopts,matlab,visual studio(最高仅支持VS2019 xml文件,所以VS版本不要下载太高)

第二种解决办法:

我也是用的matlab2014和VS2015,win7的64位系统。方法如下:
1.下载附件mexopts.rar(从10楼下载的,见下方的附件)
2.找到你电脑matlab的安装路径:D:\Program Files\MATLAB\R2015b\bin\win64\mexopts (你的安装路径可能会不同,找到bin文件夹就好)
2.解压以后,msvcpp2015.xml和msvc2015.xml两个文件,拷到第2步里的mexopts文件夹下就完成了。
    (你会看到mexopts文件夹下已经有很多类似的文件,只是版本是2015之前的:   
      msvcpp2008.xml和msvc2008.xml——支持vs2008
      msvcpp2010.xml   msvc2010.xml——支持vs2010
      msvcpp2012.xml和msvc2012.xml——支持vs2012
      msvcpp2013.xml和msvc2013.xml——支持vs2013
    )

参考:

ae38102746c1495991c6300250d8d880.png附件链接icon-default.png?t=N7T8https://www.ilovematlab.cn/forum.php?mod=redirect&goto=findpost&ptid=298097&pid=3062307

附件在CSDN上也有:

https://download.csdn.net/download/wangheng16/12270372?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169365873116800180617162%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fdownload.%2522%257D&request_id=169365873116800180617162&biz_id=1&utm_medium=distribute.pc_search_result.none-task-download-2~download~first_rank_ecpm_v1~rank_v31_ecpm-1-12270372-null-null.269^v2^control&utm_term=mexopts&spm=1018.2226.3001.4451.2

参考:

2.编译cuda不存在

在使用命令

vl_compilenn('enableGpu',true)

编译的时候

报错:

>> vl_compilenn('enableGpu',true)
错误使用 vl_compilenn>search_cuda_devkit (第 636 行)
Could not find a valid NVCC executable\n

出错 vl_compilenn (第 256 行)
if isempty(opts.cudaRoot), opts.cudaRoot = search_cuda_devkit(opts) ; end

解决办法:

vl_compilenn.m 的 第699行

for v = {'5.5', '6.0', '6.5', '7.0', '7.5'}

加上自己cuda版本号可后续执行,我的cuda版本是10.2

for v = {'5.5', '6.0', '6.5', '7.0', '7.5', '10.2'}

参考:red-lesion-detection编译matconvnet问题记录 | 码农家园

3.nvcc fatal : '-DNDEBUG': expected a number

nvcc fatal   : '-DNDEBUG': expected a number 
错误使用 vl_compilenn>nvcc_compile (line 615)
Command "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\nvcc" -c -o
"E:\matconvnet\matlab\mex\.build\bits\data.obj"
"E:\matconvnet\matlab\src\bits\data.cu" -DENABLE_GPU
-DENABLE_DOUBLE -O -DNDEBUG -D_FORCE_INLINES --std=c++11 -I"D:\Softwares\MATLAB\extern\include"
-I"D:\Softwares\MATLAB\toolbox\distcomp\gpu\extern\include" -gencode=arch=compute_75,code=\"sm_75,compute_75\"  --compiler-options=/MD
--compiler-bindir="D:\Softwares\VisualStudio\VC\Tools\MSVC\14.16.27023\bin\Hostx64"  failed.
 
出错 vl_compilenn (line 487)
      nvcc_compile(opts, srcs{i}, objfile, flags) ;

将vl_compilenn.m,将606行的nvcc_compile函数改为:

% --------------------------------------------------------------------
function nvcc_compile(opts, src, tgt, flags)
% --------------------------------------------------------------------
mybase=flags.base;
mybase(3)={'-O3'};
if check_deps(opts, tgt, src), return ; end
nvcc_path = fullfile(opts.cudaRoot, 'bin', 'nvcc');
nvcc_cmd = sprintf('"%s" -c -o "%s" "%s" %s ', ...
                   nvcc_path, tgt, src, ...
                   strjoin(horzcat(mybase,flags.nvcc)));
opts.verbose && fprintf('%s: NVCC CC: %s\n', mfilename, nvcc_cmd) ;
status = system(nvcc_cmd);
if status, error('Command %s failed.', nvcc_cmd); end;

主要修改为mybase=flags.base; 、mybase(3)={'-O3'}; 和 strjoin(horzcat(mybase,flags.nvcc))); 这三行。

参考:MATLAB安装MatConvNet笔记 - 知乎

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值