使用slurm在集群上使用matlab

Apr 1, 2019 00:00 · 771 words · 2 minute read cluster matlab Author: unkcpz

以任务的方式提交matlab任务(recommoned)

  • 切记在要运行的 .m 文件的结尾加入 quit, 否则在任务结束后无法释放节点。

  • 切记提交的任务在要使用并行(parfor),否则会出现不满核占据单节点的情况,造成资源的浪费。并行详情咨询长春。

slurm脚本模板为matlab_job.sh

#!/bin/bash -l
# NOTE the -l flag!
#SBATCH -o test.std_%j.out
#SBATCH -J test
#SBATCH -e test.error.out
# Default in slurm
# Request 5 hours run time
#SBATCH -t 5:0:0
# Requiest 1 node and 4 cores in partition normal
#SBATCH -p inter_q -N 1 -n 4
# NOTE Each node has 12 cores

module load matlab/R2016b

matlab -nodisplay -nosplash -nojvm -r script

其中前三个参数-nodisplay, -nosplash, -nojvm保证了在命令行中而不是用图形界面执行matlab。 程序中使用并行时,-singleCompThread参数为程序中有并行代码时使用,确保了每个核不会多线程运行。由于matlab的 多维度编程的性能提升很大,在大的矩阵操作时可将此参数关闭(如上脚本所示),来实现多线程。

参数-r后面紧跟所要运行的.m文件的文件名!!!注意不要写后缀,否则会出错!!!

将脚本与要执行的.m文件放在相同文件夹下,运行sbatch ./matlab_job.sh即可。

注意这里#SBATCH -o#SBATCH -e 后面跟的是标准输出和错误输出, %j代表的是你提交任务的id号, 以防止找不到提交任务的文件夹.

交互式的申请节点并进行matlab运算(not recommoned)

两次<ctrl+D>: 切记在运行完交互式任务后手动退出计算节点,退出计算节点后还要退出子命令行,否则节点持续被占用。

Step 1

首先使用salloc -p jpmid -N 1 -n 4申请jpmid分区下1个节点4个核。 此时,会打开一个新的shell窗口。

squeue查看申请到的是哪个节点,记住节点名称比如cn97103,使用ssh cn97103进入该计算节点。

Step 2

module load matlab/R2016b 加载mablab可执行模块的到路径。

Step 3

运行matlab -nodisplay -nosplash -nojvm打开命令行模式的matlab。