error_reporting(0); error_reporting(E_ALL ^ E_WARNING);

登录后台

页面导航

本文编写于 567 天前,最后修改于 460 天前,其中某些信息可能已经过时。

也可以参考这个
https://blog.csdn.net/qq_38522168/article/details/111461856

1.安装CUDA

首先安装visual studio(看CUDA版本选)。本篇文章使用的环境是CUDA11.3、Matlab2021b、VS2019.

安装显卡驱动更新:可以进入NVIDIA官网,输入显卡型号选择最新驱动下载安装,爱好游戏的同学建议直接GeForce Experience更新。

安装CUDA toolkit,各种型号版本都可从NVIDIA官网上查找到。此处需要注意:到底该下载哪一种版本。主要考虑两个因素。第一:你的GPU算力(compute capability)支持哪一种版本,如下图1。第二:你现在的Matlab版本,如图二。ps:30系卡是安培(ampere)架构,20b可能会有问题。


图一

图二

比如3070显卡,使用的matlab版本号是2021b,安装CUDA时版本选择10.2(你猜我为什么知道)
根据第三步骤可进一步明确你应该安装哪一版本的matlab了,直接下载安装就行了。matlab安装后,它应该自动就可以与cuda搭建起交流渠道,命令窗口输入“gpuDevice”检测是否调用GPU成功。成功标志如下图:

至此Matlab与CUDA就握上手了,接下来配置cuDNN

2.安装cnDNN

!!!注意:cuDNN与CUDA版本严格匹配,不要装错版本
来到cuDNN下载界面,如图下载:


点击下载cuDNN Library for Windows (x86),注意不要下成Linux(要是用Linux当我没说)
将以下几个文件夹复制到CUDA安装目录中

验证cuDNN安装成功:

打开 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\版本号\include 文件夹,找到

cudnn_version.h

用记事本打开,如下所示,成功安装cuDNN,版本号为824

3.安装MatConvNet

3.1 介绍

MatConvNet是一个实现卷积神经网络(CNN)的MATLAB工具箱,用于计算机视觉应用。 用这个工具箱,能很方便地在MATLAB中用GPU来进行训练
安装matconvnet
下载地址:https://www.vlfeat.org/matconvnet/

3.2 安装

1.(本人)安装matlab2021b、Visual Studio 2019

2.官网Home - MatConvNet下载matconvnet工具包,我的名字是matconvnet-1.0-beta25,然后解压文件到 matconvnet-1.0-beta25中

3.CUDA + cudnn(这两个也可以没有,CPU only)

4.编译安装

编译前,Matlab应该已经绑定C++编译器了。否则,会出错。Windows下安装Visual Studio即可,Linux下有自带的GCC

先进行CPU版本的编译。在Matlab中打开Matconvnet工具包,使得当前目录窗口显示Matconvnet文件夹里面的子目录。

在Matlab中用mex -setup指令绑定C++编译器

输入mex -setup C++

会得到下面的命令:

打开Matlab,将工作路径切换到…/matconvnet-1.0-beta25

在Matlab中执行命令: addpath matlab。添加搜索路径。

在Matlab中执行命令:vl_compilenn。编译工具箱。

在Matlab中执行命令:vl_setupnn。设置工具箱。

至此,工具箱已经安装完毕。

5.测试

在matlab中执行命令:vl_testnn

由此完成CPU 下matconvnet的编译。

编译完之后会多了一个mex文件夹,在matlab文件夹下面。

编译完之后应该有除了cudnn64_4.dll`外的mexw64文件,这些文件主要是vl_convvl_imreadjpeg等。这些文件是由cuda C写的,并不是由MATLAB语言写的,格式是 xx.cu`。

3.3 在matconvnet中配置GPU

第一步:我们在上文中安装cuda、VS2019,cuda默认路径,注意cuda版本和GPU要匹配

第二步:下载cudnn,在matconvnet文件夹下建一个local文件夹,然后把cudnn放进去

第三步: 建一个local文件夹,然后把cudnn放进去,再复制到matconvnet目录下。

第四步:把bin下的cudnn64_4.dll再复制到mex的文件夹下。这一点很重要,否则vl_compilenn即使编译成功,运行时却会出现Invalid 的vl_nnconv.mexw64,可是你一看明明有这个文件啊,并且cpu编译时这个文件也是可以用的,为啥现在就不能了,就是你没有做第二步。

第五步:先看看vl_compilenn写了啥,打开vl_compilenn.m,运行,等待编译结束

如上图所示在vl_compilenn中已经对optsenableGpu等属性进行了初始化。
这是稍微修改后的,与我不一样也没关系,因为下面有vl_argparse(opts,varargin),这个就是把外面的传入的参数再对opts进行赋值。

第六步:复制以下code到matlab命令窗,更改相应路径和文件夹名称,运行,等待编译结束。

vl_compilenn('enableGpu',true,'cudaRoot','C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/(你的cuda版本)','cudaMethod' ,'nvcc','enableCudnn','true','cudnnRoot','local/cudnn')

第七步:找到cnn_cifar后,然后修改opts.gpus。更改选项,opts.train.gpus= [1]; 表示用GPU,[ ] 表示用CPU,记得填上1.

最后的最后,报错信息等建议自行Google(一般是GPU报错,CPU一遍过)

原文作者:Hernandez
原文地址:https://hernandez-hkp.github.io/2022/10/01/matlab-matconvnet/

歌曲封面
0:00