应用介绍
MATLAB(矩阵实验室)是MATrix LABoratory的缩写,是一款由美国 MathWorks 公司出品的商业数学软件。MATLAB是一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。MATLAB主要用于数值运算,但利用为数众多的附加工具箱(Toolbox)它也适合不同领域的应用,例如控制系统设计与分析、图像处理、信号处理与通讯、金融建模和分析等。
使用指南
可以采用两种方式使用Matlab,通过创建实例运行MATLAB或是在集群中提交作业。
在实例下,可以采用命令行或者图形化桌面提交计算,只能单机运行。
在集群中,通过用命令行或页面方式提交作业,可以并行计算。
通过实例运行
控制台
创建并运行实例后,点击控制台 terminal_icon 按钮,进入终端界面。在命令行输入如下命令:
/opt/app/MATLAB/bin/matlab
输出类似如下信息,即可正常用命令行使用Matlab。
MATLAB is selecting SOFTWARE OPENGL rendering.
< M A T L A B (R) >
Copyright 1984-2016 The MathWorks, Inc.
R2016b (9.1.0.441655) 64-bit (glnxa64)
September 7, 2016
To get started, type one of these: helpwin, helpdesk, or demo.
For product information, visit www.mathworks.com.
远程桌面
创建并运行实例后,在”工作台”中,找到Matlab实例,点击实例数据图标
点击上传,将本机的文件传输到实例中。
点击“远程桌面”进入实例,MATLAB会自动启动。
在左边”Current Folder“中可以看到刚刚上传的文件,此处以abcd.m为例 ,打开文件进行计算。计算输出的结果存储在同一个目录下,可以进一步进行处理。
在集群中并行计算
命令行方式
工作台中找到”public_cluster”集群,点击实例数据图标,将文件和数据上传到该集群的目录下。
点击进入控制台界面。
在命令行输入vi matlab_demo.sh创建matlab_demo.sh脚本,示例内容如下:
#!/bin/bash
### 设置该作业的作业名
#SBATCH --job-name=test-matlab
## 指定该作业需要2个节点数
#SBATCH --nodes=2
### 每个节点所运行的进程数为20
#SBATCH --ntasks-per-node=20
### 作业最大的运行时间,超过时间后作业资源会被SLURM回收
#SBATCH --time=2:00:00
### 程序的执行命令
/opt/app/matlab-2022a/bin/matlab -nodesktop -nosplash -nodisplay -sd $HOME -r abcd -logfile LogFile.txt
echo "Matlab job ${SLURM_JOB_ID} done."
注意 : 上述MATLAB执行程序的路径以实际情况为准,通常安装在/opt/app/目录下。
或是参考数据上传 ,在本机创建好运行脚本后,通过WEB页面上传到集群的个人目录下。
Slurm作业脚本准备好后,在终端执行sbatch matlab_demo.sh命令来提交作业。作业完成后将在目录下生成testR.mat文件,可以将此文件下载后再参考上文,上传到 MATLAB 单机的图形界面中进行处理。
或是通过控制台,直接从集群目录将文件复制到MATLAB实例目录下。
打开实例的终端,输入如下命令复制文件:
cp /groups/public_cluster/home/demo_user/file ~/
注意,其中public_cluster修改为公共集群名称,demo_user更改为自己的用户名,file为文件名称。
也可以参考集群登录通过客户端创建并运行脚本。
WEB页面方式
除了命令行方式,可以通过WEB页面建立和提交作业。
进入到“集群”的“提交作业”页面,选择集群,选择模板,设定脚本名称,参照命令行模式中matlab_demo.sh脚本内容,将MATLAB执行命令粘贴到下面的“脚本”框中,并点击“提交作业”。
作业完成后,会在集群目录下生成testR.mat文件。
参考上文将文件拷贝到带图形的MATLAB单机实例中进行阅览。
更多资料
- 测试用例abcd.m的内容
% The user's MATLAB codes
A = zeros(100,1);
parfor i = 1:100
pause(10);
A(i) = i;
%A(i) = sin(i*2*pi/20);
end
save testR.mat A; %save result