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>.outmatlab_<作业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

并行程序没有加速

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

使用建议

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

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