北极星集群使用

MATLAB 并行:跨节点运行

2021-12-17 12:06:10 admin 2106

跨节点运行概括:

首先: 使用北极星的matlab就全部使用,学校的就全部使用学校的。两个版本的matlab不能混着跑 !,否则认证服务器会死掉!

1、并行任务文件名为 bjxabc.m

2、去除里面 parpool('local',20);%cn_nl改为parpool('local',28);

3、提交任务:

任务提交,这里以demo为例(可以自己运行测试下)

a、cn_nl运行:pkurunmatlabbjx-cnnl 2 28 bjxabc 

其中2 为两个节点,28为每个节点跑的核心数,bjxabc为demo,可以替换成你自己的文件名称(不含.m)

b、cn-short运行:pkurunmatlabbjx-cns 2 20 bjxabc

c、cn-long运行:pkurunmatlabbjx-cnlong 2 20 bjxabc

详细内容:

++++++++++++++++++++++++++++++++++++++++

一、MATLAB,节点内并行:

1、下面是一个节点内并行运行的程序,文件名为abc.m运行20核:

parpool('local',20);%cn_nl改为parpool('local',28);

A = zeros(100,1);

parfor i = 1:100

  pause(10);

  %A(i) = i;

  A(i) = sin(i*2*pi/20);

end

save('/lustre3/yourname/matlab/testR.mat', 'A'); 

2、任务提交:

先执行:

source /appsnew/source/matlab2021b-bjxserver.sh 

在执行,可以在cn_nl,cn-short,cn-long上跑:

cnnl执行:pkurun-cnnl  1 28  "matlab -nodesktop -nosplash   -r abc"

cn-short执行:pkurun-cns  1 20  "matlab -nodesktop -nosplash   -r abc"

cn-long执行: pkurun-cnlong  1 20  "matlab -nodesktop -nosplash   -r abc"

执行后会生成提交脚本(cn_nl分区),并自动提交,也可以改生成的脚本添加参数和命令:

[chen@login07 matlab]$ cat job.srp232233 

#!/bin/bash

#SBATCH -J mat232233

#SBATCH -p cn_nl

#SBATCH -N 1 

#SBATCH -o mat232233_%j.out

#SBATCH -e mat232233_%j.err

#SBATCH --no-requeue

#SBATCH -A chen_g1

#SBATCH --qos=chencnnl

#SBATCH -c 28

pkurun  matlab -nodesktop -nosplash   -r abc

二、MATLAB,跨节点并行(如果选择一个节点就是节点内运行)

1、运行文件,这里以demo为例(文件在/appsnew/usr/Matlab/bjxabc.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('/lustre3/yourname/matlab/testR.mat', 'A'); 

可以看出没有这行了:parpool('local',20);

这里让系统去分配cpu核心了

2、任务提交,这里以demo为例

a、cn_nl运行:pkurunmatlabbjx-cnnl 2 28 bjxabc

其中2 为两个节点,28为每个节点跑的核心数,bjxabc为demo,可以替换成你自己的文件名称(不含.m

b、cn-short运行:pkurunmatlabbjx-cns 2 20 bjxabc

c、cn-long运行:pkurunmatlabbjx-cnlong 2 20 bjxabc

和cnnl类似

3、生成的脚本为:

1)提交脚本以job.srb加时间为开头如:job.srp234653,不需要改这个脚本

#!/bin/bash

#SBATCH -J bjx234653

#SBATCH -p cn_nl

#SBATCH -N 1 

#SBATCH -o bjx234653_%j.out

#SBATCH -e bjx234653_%j.err

#SBATCH --no-requeue

#SBATCH -A chen_g1

#SBATCH --qos=chencnnl

#SBATCH -c 1

source /appsnew/source/matlab2021a-server.sh

hosts=`scontrol show hostname $SLURM_JOB_NODELIST` ;echo $hosts

matlab -nodesktop -nosplash   -r "matlabslurm234653;quit"  -logfile LogFile234653.txt

2)matlab队列提交文件,matlabslurm234653.m 

slCharacterEncoding('UTF-8')

%% The path of your job

JobPath = '/lustre3/chen/test/matlab/matlab';%%工作路径,系统生成,也可以更改

cd(JobPath);

Matpwd= '/appsnew/usr/Matlab/';

%% Import Cluster Profile

allName = parallel.clusterProfiles();

if ~ismember('bjx-matlab_slurm_exclusive',allName)

parallel.importProfile([Matpwd,'/bjx-matlab_slurm_exclusive']);

end

%% Culster Settings

b = parcluster('bjx-matlab_slurm_exclusive');

b.ClusterMatlabRoot = '/appsnew/usr/Matlab/MATLAB2021a-pkuserver';

% Slurm job parameters

b.AdditionalProperties.JobName = 'matlab_bjx234653';

b.AdditionalProperties.Partition = 'cn_nl';

b.AdditionalProperties.NodeNum = '2';  %%这些改提交的节点数

b.AdditionalProperties.account = 'chen_g1';

b.AdditionalProperties.ntasks = '28';

b.AdditionalProperties.qos = 'chencnnl';

b.AdditionalProperties.exclusive = '   ';

b.AdditionalProperties.norequeue = '   ';

j = batch(b,'bjxabc','Pool',55) % Run a job for 63 works which is (64-1) %%将bjxabc替换为你的函数,还有更改55为你的核心数

这些只是生成的文件,如果没有复杂的计算不用更改。

如果想改脚本提交,可以改1),2)中红色部分

然后sbatch 所改的job.srb+时间的脚本:sbatch job.srp234653

4、提交过程:会有两个任务,一个是slurm提交matlab的脚本(第一个),后一个是由matlab提交的slurm脚本

图片关键词

5、结果:

1) cat Job1/Job1.log (或者类似的Job1,Job2...文件夹)

The scheduler has allocated the following nodes to this job:

s11b07n[02-03]

"/appsnew/usr/Matlab/MATLAB2021a-pkuserver/bin/mw_mpiexec" -l -n 56 "/appsnew/usr/Matlab/MATLAB2021a-pkuserver/bin/worker" -parallel

[0] Sending a stop signal to all the labs...

[0] Parallel pool is shutting down.[0] 

Exiting with code: 0

输出为0就是成功了

2)cat Job1/tpde931c96_1f7e_40f6_a37e_99ecfb1b13e9 (输入tp补全就是matlab提交slurm脚本)

sbatch --job-name=Job1 --output='/lustre3/chen/test/matlab/matlab/Job1/Job1.log' --ntasks=56 --cpus-per-task=1 --job-name=matlab_bjx234653 --partition=cn_nl -N 2 -A chen_g1 --exclusive --ntasks-per-node=28 --qos=chencnnl --no-requeue '/appsnew/usr/Matlab.....communicatingJobWrapper.sh'

3)几个输出:

cat *.err *.out  LogFile234653.txt 

还有 testR.mat

可以在shell 或者matlab里查看

首页
资源&收费
集群
成果
问答