XYU

Engineering Cybernetics.                    

Windows/Linux平台下编译安装MatConvNet

17 Nov 2017 » PRML

Windows平台

一、下载

官网下载最新版的压缩包并解压。

二、 编译CPU版本

在此步骤开始之前需要额外安装C/C++编译器,Windows环境下推荐安装Visual Studio,目前Community Edition可以免费使用。

进入MatConvNet根目录。
1、 打开MATLAB,输入mex -setup命令确认MATLAB的C/C++编译器为“Microsoft Visual C++ 2017 (C)”,其实安装好VS后,MATLAB就已经将VS作为默认的C/C++编译器了。
2、 进入matlab目录,运行vl_compilenn.m

run vl_compilenn.m

提示如下内容,则说明编译成功:

Building with 'Microsoft Visual C++ 2017'.
MEX completed successfully.

此时mex目录下出现许多*.mexw64文件。可以直接跳至第三步。
3、 如遇到“Unable to find cl.exe”这个错误,则需要设置cl.exe的环境变量:
以我使用的平台(Windows 10 Pro 1709, Microsoft Visual Studio 2017Community Editon)和安装位置为例:
右键此电脑 - 属性 - 高级系统设置 - 环境变量,编辑“系统变量”中的Path变量,新建如下两个位置:

D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\Hostx64\x64
D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE

添加完成后点击确认。
至于是选择x86目录还是x64目录,根据你使用的操作系统的位数选择,32位和64位操作系统均可选择x86,64位建议选择x64。
在“系统变量”中新建LIB变量,并添加以下三个路径:

D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\lib\x64
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.16299.0\ucrt\x64
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.16299.0\um\x64

在“系统变量”中新建INCLUDE变量,并添加以下两个路径:

D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\include
C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt

在“环境变量”窗口点击确认,完成环境变量设置。
D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build这个路径中打开批处理程序vcvarall.bat。运行完毕后重新启动计算机,重新运行vl_compilenn.m

三、 编译GPU版本

在此步骤开始前需要安装CUDA以及cuDNN,并将cuDNN压缩包下的include bin lib目录复制到CUDA的安装目录(C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0)。
1、 在MatConvNet根目录下建立./local/cudnn目录,并将cuDNN压缩包下的include lib目录复制进其中。
2、 将cuDNN压缩包下bin目录里的cudnn64_7.dll复制到MatConvNet\matlab\mex目录中。
3、 在MATLAB中执行:

vl_compilenn('enableGPU', true, ...
'cudaRoot', 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0', ...
'cudaMethod', 'nvcc', ...
'enableCudnn', true, ...
'cudnnRoot', 'local/cudnn');

等待编译完成即可。
我在编译的过程中遇到了一个错误(line 615),将D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503下的bin目录复制到D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\即可解决。

四、 测试例程

进入MatConvNet\examples\mnist目录,打开cnn_mnist.m
CPU方式运行
无需任何更改直接运行即可。
GPU方式运行
将第21行改为:

if ~isfield(opts.train, 'gpus'), opts.train.gpus = [1]; end;

运行。
看输出状态的频率部分可以发现GPU极大地提升了训练速度。
CPU Mode:
CPU_Mode

GPU Mode:
GPU_Mode

Linux平台

一、下载

官网下载最新版的压缩包并解压。

二、 编译CPU版本

开始编译之前需要输入mex -setup命令检查MATLAB所使用的C/C++编译器的版本,MatConvNet(版本1.0-beta25)建议使用[gcc/g++ 4.9]进行编译,亲测使用较高的gcc/g++版本会出现一些莫名其妙的错误。如果MATLAB返回结果不是[gcc/g++ 4.9]的话,我们需要以如下方式替换[gcc/g++ 4.9]与当前编译器的优先级:

#确保[gcc/g++ 4.9]已经安装:
~$ sudo apt-get install gcc-4.9 g++-4.9

#将gcc-4.9设置为"priority=100",gcc-5.0设置为"priority=50":
~$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 100
~$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50

#将g++ 4.9设置为"priority=100",g++ 5.0设置为"priority=50":
~$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 100
~$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 50

#验证优先级设定是否完成:
~$ update-alternatives --query gcc
~$ update-alternatives --query g++

确认无误后,运行vl_compilenn.m进行CPU编译即可。

三、编译GPU版本

在此步骤开始前需要安装CUDA以及cuDNN。其中CuDNN只需将压缩包解压至MatConvNet目录下即可。关于Linux下CUDA的安装,可以参考:
输入以下命令进行编译:

vl_compilenn('enableGpu', true, ...
'cudaMethod', 'nvcc', ...
'cudaRoot', '/usr/local/cuda-9.0', ...
'enableCudnn', true, 'cudnnRoot', '/home/xyu/Documents/MATLAB/matconvnet-1.0-beta25/local/cudnn');

'cudaRoot'为CUDA的安装路径,'cudnnRoot'为cuDNN的安装路径。

如果在编译过程出现“Warning: Setting the ‘MW_NVCC_PATH’ environment variable to ‘/usr/local/cuda-9.0/bin/nvcc’”,需要在环境变量中加入MW_NVCC_PATH项:

sudo /etc/profile
在最后一行加入:
export MW_NVCC_PATH=/usr/local/cuda-9.0/bin/nvcc:$MW_NVCC_PATH
保存后:
sudo source /etc/profile

如果在编译过程出现”build with ImreadJpeg error”,需要打开vl_compilenn.m,进行如下更改

set opts.enableImreadJpeg = false;

重新编译即可。

Related Posts

© 2019 XYU.