Package
装 R2018a,[4] 有下载链:https://pan.baidu.com/s/1W6jWkaXEMpMUEmIl8qmRwg#list/path=%2F,提取码:igx6
。
解压到 Linux-matlab2018a/:
- R2018a_glnxa64_dvd1.iso
- R2018a_glnxa64_dvd2.iso
- Matlab2018aLinux64Crack.tar.gz。解压到 crack/,里面有两个 .lic 文件、R2018a/、readme.txt。
MatConvNet 在 [5] 下载,本文用的是 1.0-beta25 版。解压到 matconvnet-1.0-beta25/。(为了在 commit 制成 docker 镜像时 matconvnet 能保存到容器内,后续需将此文件夹复制到容器内的 /usr/local/
下,见下文)
两个都下载到 /home/tom/downloads/。
Docker
由图可见,对应 cuda 版本是 9.0,用 pytorch/pytorch:0.4.1-cuda9-cudnn7-devel,可以白嫖里面的 cuda 9。
- 注意是 devel 版,而不是 runtime 版,因为后面装 matconvnet 需要用 cuda 目录。
docker pull pytorch/pytorch:0.4.1-cuda9-cudnn7-devel
启动时加 --privileged=true
:
NAME="Matlab-R2018a"
docker run --gpus all --name=$NAME -dit --ipc=host --privileged=true \
-v /home/tom:/home/tom \
-v /home/tom/dataset:/home/dataset \
pytorch/pytorch:0.4.1-cuda9-cudnn7-devel /bin/bash \
> ~/log/docker/$NAME.$(date +%Y-%m-%d-%H-%M).log 2>&1
此处将 home 目录 /home/tom 映射去 docker 内同样位置,包含了前述下载路径(后面要在 docker 里用这些文件安装)。
Matlab
主要参考 [6]。
unpack .iso
在 Linux-matlab2018a/,分别解压两个 .iso 文件到 R2018a_glnxa64_dvd1/ 和 R2018a_glnxa64_dvd2/。好像其中有些操作需要权限。
- 有教程的做法是挂载 .iso 文件,然后在挂载目录操作的。但我挂载之后会报
/dev/loop0 is write-protected, mounting read-only
,而后面又要改里面两个文件,所以考虑解压 .iso 文件,而不是挂载。 - 但直接用 7z 解压,会莫名少几个文件,所以我解压的做法是:先挂载,再复制出来…
cd Linux-matlab2018a
# pwd # /home/tom/downloads/Linux-matlab2018a
mkdir R2018a_glnxa64_dvd1
mkdir R2018a_glnxa64_dvd2
mkdir /mnt/matlab
# 解压 dvd1
mount -t auto -o loop R2018a_glnxa64_dvd1.iso /mnt/matlab
cp -r /mnt/matlab/* R2018a_glnxa64_dvd1/
umount /mnt/matlab
# 解压 dvd2
mount -t auto -o loop R2018a_glnxa64_dvd2.iso /mnt/matlab
cp -r /mnt/matlab/* R2018a_glnxa64_dvd2/
umount /mnt/matlab
rmdir /mnt/matlab
dvd2 -> dvd1
将 dvd2 里的内容复制去 dvd1 里,这一步对应教程的「将 dvd1 切换为 dvd2」,但我装的时候这样会报找不到 xx 文件,所以提前复制。
cp -r R2018a_glnxa64_dvd2/* R2018a_glnxa64_dvd1/
configuration
改 R2018a_glnxa64_dvd1/ 下两个配置文件。找到对应行,照住改。(这一步,如果是用挂载而不是解压,发现 read-only 而没法改,就换成解压的方法)
- installer_input.txt
destinationFolder=/usr/local/R2018a # 安装目录
fileInstallationKey=09806-07443-53955-64350-21751-41297 # crack/readme.txt 有写
agreeToLicense=yes
outputFile=/tmp/mathworks_install.log
mode=silent
- activate.ini
isSilent=true
activateCommand=activateOffline
licenseFile=/home/tom/downloads/Linux-matlab2018a/crack/license_standalone.lic
其中 licenseFile
一项的路径按实际修改。
installation
进入 docker,执行:
cd Linux-matlab2018a
./R2018a_glnxa64_dvd1/install -inputFile /home/tom/downloads/Linux-matlab2018a/R2018a_glnxa64_dvd1/installer_input.txt
其中 -inputFile
用绝对路径,我用相对路径报错了。
activation
激活,docker 内:
cd /usr/local/R2018a/bin
./activate_matlab.sh -propertiesFile /home/tom/downloads/Linux-matlab2018a/R2018a_glnxa64_dvd1/activate.ini
# 将 crack/R2018a 的文件拷去安装目录 /usr/local/R2018a 里
cd /home/tom/downloads/Linux-matlab2018a/crack
cp -r R2018a /usr/local
environment variable
添加环境变量,在 docker 内的 .bashrc 末尾追加:
export PATH=/usr/local/R2018a/bin:$PATH
alias mrun='matlab -nodesktop -nosplash -r' # 用 `mrun` 运行 .m 文件
不过这个 docker 镜像本身没装 vim,可以在外面改好再拷进去。然后:
source .bashrc
testing
docker 内执行:matlab -nodisplay
。
- 报错:
libXt.so.6: cannot open shared object file: No such file or directory
,见 [7, 8],ubuntu 执行apt install x11-xserver-utils
。要换 apt 源,见 [9]。
装完就可以了,在 matlab 环境下执行 gpuDevice
测试 gpu,会打印 gpu 信息。
MatConvNet
- 在宿主机下改一下 vl_simplenn.m 先,见 [11]。
- 下面
vl_compilenn
一行会报错:'/home/tom/Download/matconvnet-1.0-beta25/matlab/mex/vl_nnconv.mexa64' compiled with '-R2018a' and linked with '-R2017b'.
。参考 [12],将 matconvnet-1.0-beta25/matlab/ 下的 vl_compilenn.m 换成评论里的内容先。
然后进入 docker,在 matlab 环境下执行:
% 进入 matconvnet 的 matlab 目录
% cd /home/tom/downloads/matconvnet-1.0-beta25/matlab
% 2021.4.21 更新:先将 `matconvnet-1.0-beta25` 复制去 `/usr/local/`,再:
cd /usr/local/matconvnet-1.0-beta25/matlab
mex -setup
mex -setup C++
vl_compilenn('enableGpu', true, 'cudaRoot', '/usr/local/cuda', 'cudaMethod', 'nvcc', 'enableCudnn', true, 'cudnnRoot', '/usr/local/cuda')
vl_setupnn
vl_testnn('gpu', true) % 测试 gpu 是否可用,可以中途 Ctrl-C 停止
- 2021.4.21 notes:由于这里
/home/tom/
是挂载目录,在这里配置 matconvnet 的话,之后 commit 成镜像时 matconvmet 并不会保存到生成的镜像内(但上面的 matlab 会,因为是装在/usr/local/R2018a/
,不是挂载路径,是容器内的路径)。为了保存 matconvnet,先将 matconvnet 复制(而不是软链接)去/usr/local/matconvnet-1.0-beta25/
,再进行操作。 - 2021.5.1 notes:因 [13] 的环境「tf 1.4 + matlab」,考虑用 tensorflow/tensorflow:1.12.0-gpu-py3 做一个(cuda 版本对应),发现在
vl_compilenn
一步会报没有cublas_v2.h
和cudnn.h
,而所缺文件在 pytorch/pytorch:0.4.1-cuda9-cudnn7-devel 的这个镜像里是有的,直接从后者把相应文件复制去前者的就可以了。可以用命令find /usr -name cublas_v2.h
找位置。
References
- jiangqy/DCMH-CVPR2017
- NUS-WIDE数据集预处理
- NUS-WIDE数据集划分
- linux安装MATLAB R2018a步骤
- MatConvNet: CNNs for MATLAB
- Linux server中 Matlab R2018a安装
- Ubuntu 16.04安装MATLAB R2018a
- CentOS7安装MatlabR2018b
- 【Ubuntu】Ubuntu 18.04 LTS 更换国内源——解决终端下载速度慢的问题
- Ubuntu16.04+Matlab2015b+Matconvnet+cuda+cudnn 的GPU环境配置
- matconvnet-1.0-beta25报错:Reference to non-existent field ‘dilate‘.
- MATCONVNET: compiled with ‘-R2018a’ and linked with ‘-R2017b’. #1200
- PKU-ICST-MIPL/DADN_TCSVT2019