Skip to content

MATLAB 集群使用方法 ​

MATLAB 可用于数值计算、数据分析、算法开发和可视化。在智算平台上,可通过以下两种方式使用 MATLAB:

  • 图形界面方式:适合交互式分析、绘图和程序调试,建议从智算平台门户启动。
  • Slurm 批处理方式:适合运行时间较长、可重复执行的正式计算任务。

使用前须知

MATLAB 及其工具箱受许可证限制,请使用平台已授权的软件版本。正式计算任务不要在登录节点直接运行,应通过门户申请资源或使用 Slurm 提交。

通过门户使用图形界面 ​

登录智算平台门户后,在应用列表中找到 MATLAB。如果桌面中没有 MATLAB 图标,可先从“应用中心”添加。

打开已有作业 ​

如果已有正在运行的 MATLAB 作业,可在作业列表中点击“查看”图标进入浏览器图形界面。

MATLAB 作业列表

进入图形桌面后即可启动 MATLAB,进行代码调试、数据分析和结果绘图。

MATLAB 浏览器图形界面

创建新的 MATLAB 作业 ​

  1. 在门户中进入 MATLAB 应用的提交页面。
  2. 填写作业名称,并选择合适的队列和计费项目。
  3. 选择平台提供的 MATLAB 版本。
  4. 需要图形界面时,将图形化选项设为“是”,并选择合适的分辨率。
  5. 设置工作目录。建议使用个人或项目目录,不要将重要文件只保存在临时目录中。
  6. 提交作业,等待状态变为“运行”后进入图形界面。

MATLAB 作业提交参数

提交后可在作业列表查看运行状态,并通过“查看”图标进入 MATLAB。

正在运行的 MATLAB 作业

完整操作示例如下:

MATLAB 门户提交演示

及时释放资源

使用结束后,请先保存程序和计算结果,再正常退出 MATLAB,并在门户中确认作业已结束。仅关闭浏览器标签页不一定会终止后台作业。

通过 Slurm 运行批处理任务 ​

批处理方式不依赖图形桌面,适合长时间计算和自动化流程。

查看和加载 MATLAB ​

先查看平台当前提供的 MATLAB 模块:

bash
module avail matlab

根据查询结果加载实际可用的版本,例如:

bash
module load matlab/2022b
matlab -batch "disp(version); disp(2+2)"

模块名称和版本可能随平台软件环境调整,请以 module avail matlab 的输出为准。

准备计算程序 ​

创建工作目录:

bash
mkdir -p ~/matlab-work
cd ~/matlab-work

新建 analysis.m:

matlab
rng(1);
A = rand(2000);
b = rand(2000, 1);
x = A \ b;

save('result.mat', 'x', '-v7.3');
fprintf('Completed at %s\n', datetime('now'));

编写 Slurm 脚本 ​

新建 matlab_job.sh:

bash
#!/bin/bash
#SBATCH --job-name=matlab-batch
#SBATCH --partition=qcpu_18i
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=8
#SBATCH --mem=16G
#SBATCH --time=02:00:00
#SBATCH --output=matlab_%j.out
#SBATCH --error=matlab_%j.err

set -euo pipefail

module purge
module load matlab/2022b

cd "$HOME/matlab-work"
export OMP_NUM_THREADS="${SLURM_CPUS_PER_TASK}"

matlab -batch "run('analysis.m')"

队列名称和模块版本应根据平台当前配置调整。提交并查看作业:

bash
sbatch matlab_job.sh
squeue -u "$USER"
sacct -j <作业ID> --format=JobID,State,Elapsed,AllocCPUS,MaxRSS

运行完成后,当前目录中应生成 result.mat,标准输出和错误信息分别记录在 matlab_<作业ID>.out 与 matlab_<作业ID>.err 中。

单节点并行计算 ​

使用 Parallel Computing Toolbox 时,可以在单个计算节点内启动与申请核心数一致的 worker。示例:

matlab
workers = str2double(getenv('SLURM_CPUS_PER_TASK'));
if isnan(workers) || workers < 1
    workers = 1;
end

pool = parpool('local', workers);
results = zeros(1, workers);

parfor i = 1:workers
    results(i) = sum(rand(1, 1e6));
end

save('parallel_result.mat', 'results');
delete(pool);

并行核心数

worker 数量不得超过作业申请的 --cpus-per-task。多节点 MATLAB 并行还需要 MATLAB Parallel Server、许可证和集群配置支持,不能直接套用上述单节点示例;如有需求请联系管理员。

常见问题 ​

提示许可证不可用 ​

可能是许可证已被占满,或当前账号没有对应工具箱权限。可稍后重试;持续失败时,请将报错信息、MATLAB 版本和所需工具箱名称提交给管理员。

图形界面空白或连接中断 ​

先确认门户中的 MATLAB 作业仍为运行状态,再重新进入图形界面。网络中断通常不会立即终止后台作业,但未保存的界面操作可能丢失。

作业提交后立即失败 ​

优先查看 matlab_<作业ID>.err,并检查模块版本、工作目录、脚本路径和文件权限:

bash
cat matlab_<作业ID>.err
ls -ld "$HOME/matlab-work"
module avail matlab

并行程序没有加速 ​

确认程序确实使用了 parfor、parfeval 等并行功能,并检查 worker 数量是否与申请的 CPU 核心数一致。对于规模较小的任务,并行启动开销可能高于计算收益。

使用建议 ​

  • 调试程序时可使用门户图形界面,正式运行时优先使用 Slurm 批处理。
  • 将输入、脚本、日志和结果放在固定的项目目录中,便于复现和排错。
  • 先使用小规模数据验证流程,再申请更长时间或更多核心。
  • 根据实际内存峰值调整 --mem,避免申请明显超过任务需求的资源。

Copyright 2021 All Rights Reserved 生物设计中心 版权所有