matconvnet +Matlab2019+vs2017+cudav10.0+cudnnv7.6.1

本文提供了一种在MATLAB2019、VS2017、CUDA10.0及CuDNN7.6.1环境下配置MatConvNet的详细步骤。解决了因版本不匹配导致的常见问题,如size重定义、找不到cl文件等,特别适用于使用较高版本软件的用户。

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

Matconvnet +Matlab2019+vs2017+cudav10.0+cudnnv7.6.1

介于看了2天都没有发现国内博客给出高版本软件使用matconvnet的合适的解决方法,在自己成功解决后记录一下,希望拯救绝望中的你。

要求(本文不对CPU编译做具体的解析)

足够新的MATLAB版本(R2015b或更高版本)和一个支持C ++ 11的编译器(Visual Studio 2015,GCC 4.8,Xcode 7.3.1或更高版本)。 对于GPU计算,至少需要CUDA 7.5以及CuDNN v4(可选)或更新版本。你可能看了太多这样的话语,所以出错的时候总有一种感觉,我的版本是不是有问题,特别是别人的版本和你不一样并且你的版本比较高的时候,这里特别强调一下,时代总是在进步,不存在版本高编译不了版本低的问题,只有低版本的代码不适应高版本的编译器,或者高版本的编译器做出比较大的改变特别是路径发生改变时找不到文件各种 错!错!错!

使用的各软件包版本(几乎这个时间最新)

  1. MatlabR2019a
  2. vs2017(community)
  3. cudav10.0
  4. cudnnv7.6.1
  5. matconvnet-1.0-beta25(我发现如果你的cuda版本比较高的话只能用这个了,24都不行,会有size重定义的问题)

(再次强调不同版本的matlab支持的VS版本是不同的,cuda要适应matlab,这些都可以在对应的官网找得到的,也可以直接通过matlab的命令行查询)
关于cuda环境,大家可以参考下这个
这个版本配置用这个工具包基本上是让你进入重雷区了。

CPU编译

编译

CPU编译

1)打开MATLAB,在命令行输入
mex -setup 
mex -setup C++
MEX 配置为使用 ‘Microsoft Visual C++ 2017’ 以进行 C++ 语言编译。 
警告: MATLAB C 和 Fortran API 已更改,现可支持 
包含 2^32-1 个以上元素的 MATLAB 变量。您需要 
更新代码以利用新的 API。 
您可以在以下网址找到更多的相关信息: 
https://www.mathworks.com/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html。

如果没有出现提示可用的编译器,请检查你的编译器是否被支持,()比如Mingw就是不被支持的,但是matlab一直推荐你用这个)。

2 )继续按要求操作

command+cd到你解压的那个matconvnet目录,输入下面3行

cd F:\hiudawn\matlab\matconvnet-1.0-beta25
addpath matlab
vl_compilenn

使用 ‘Microsoft Visual C++ 2017 (C)’ 编译。 
MEX 已成功完成。

以上步骤基本上是一气呵成
当然,只要你的版本匹配得上的话,有人可能会有什么cl文件找不到的情况(不好意思,环境问题,请把VS、SDK的那些include和bin的路径都添加上,网上很多博主都有写过,具体我看了哪个才解决的已经找不到了,不过添加的记得是 x86的)

3) 编译后的结果

在这里插入图片描述

反正肯定会出现mex后的文件,很多博主在这里都说有个.ll文件在这里,之后GPU编译需要用cunn里的.ll文件替换这个地方

***事实上~~***我根本就没看到所以我才一直以为是版本问题

在这里插入图片描述

GPU编译

前面都是非常容易解决的,这里真的是重灾区中的重灾区了!!!
还是再强调一下版本对应的重要性

在CPU编译成功后

输入以下代码

cd matconvnet/;
>> addpath matlab/; 
>> vl_compilenn('enableImreadJpeg', true, 'enableGpu', true, 'cudaRoot', [这里填你的cuda路径到版本v],...
                'cudaMethod', 'nvcc', 'enableCudnn', true, 'cudnnRoot', [这里填你的cudnn路径,其他博主都填的local的那个路径]);
%%不过我的这两个路径都填了cuda的因为dunn放到cuda里了

建立local文件夹的方法具体如下
matconvnet-1.0-beta25(建议重命名文件夹改为matconvnet)中建一个local文件夹(与example和matlab等同一”级别”),然后把下载的cudnn放进去,如下图所示:
在这里插入图片描述

GPU编译问题

  • 如果你能成功编译
    • 恭喜你
      • 天选之人

要是在这都能直接过那我都不知道说什么了
我主要写几个让人奔溃的问题的解决方法

1)问题一

在这里插入图片描述
无比熟悉的错误
各大博客上都有写这个错误
比如这个博主的这篇就有写过这个问题,我还看了无数遍那句翻译成人话就是。。。。。。

基本每个博主都说这个解决方法是:将自己下载的local文件夹下的cudnn文件夹下的\cuda\include下的cudnn.h复制粘贴到你所装的CUDA根目录下的\include下 你一打开就可以看到是CUDA专门放h头文件的文件夹对吧 所以放这里就好了 就可以解决这个问题了。
或者把cudnn里面的那个.ll文件替换mex目录下的那个。

事实上,如同我们之前编译的那样用vs2017编译出来都没有这个.ll文件,而且之前有人说是因为这个工具包寻找cudnn的能力不好,把这个.ll文件放到目录下让他容易找些。这样的话我们直接把cudnn的位置给那个输入的地方也没问题呀,我按他说的做过不过没有什么用处。

解决方法:仔细看一下错误在哪 \..\VC\bin" failed.,是出在VS里面这个VC文件夹下的bin里面,有没发现一个问题,我们添加的关于bin的文件的环境地址根本就没有这个地方。那我们添加环境变量就好了,NONONO,因为这里根本就没有这个文件,那怎么办。

compiler-bindir passing the wrong folder for the vc++ compiler. On my system it should be C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64, not sure where the script was getting the idea that it should be “C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\bin” but that was the problem.

虽然不知道matlab为什么非要认定这个地方,但是就是这样才产生错误的。所以加一个bin文件在相应的目录下好了。(加bin文件夹到C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\)。

如果这样操作的话,确实可以让他成功编译,但是它编译的时间很长,我觉得这就是很不合理的地方(时间长的原因command行里面显示出来就是很多东西没成功),到时候test的时候又是一堆错误,这就是·论坛里找不到合理解释的地方
其实你打开那个代码你会发现

647  cl_path = fullfile(cc.Location, 'VC', 'bin','amd64');

这是2017版本以前例如2015版本的路径,如果你的2017按刚刚的方法,在这个路径下是没有东西的。就算显示成功编译自然也是很多东西没有成功。所以找到2017相应的位置,把路径改成2017的。

当然最简单的方法还是,直接用2015的版本。

问题二

MATCONVNET: compiled with '-R2018a' and linked with '-R2017b'
在这里插入图片描述
然后修改下359行左右

flags.mexlink = {’-lmwblas’};

这个问题的原因好像就是,matlab到2018后它的library变了,所以我们强行关联到2018版,这个当然也适应2019.
按道理环境不错基本可以直接通过,并且编译成功了。

附加一个可能有用的表

MATLAB versionReleaseCUDA Devkit
9.62019a10.0
9.22017a8.0
9.12016b7.5
9.02016a7.5
8.62015b7.0
MATLAB versionReleasevisual studio
9.62019avs2015(profession)
102019avs2017(community)

因为许多版本差异的问题,所以这个工具包在使用的时候可能代码有很多地方需要修改。
多上论坛更新比国内快得多。地址
祝你好运

reference

https://blog.youkuaiyun.com/qq_33782064/article/details/80003520
https://blog.youkuaiyun.com/u014292102/article/details/80331481

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值