确保始终有 N 个作业在使用 SLURM 的 M 批次中运行/分配

问题描述 投票:0回答:1

我需要使用 SLURM 来执行集群计算,我希望达到以下结果:在包含

M
任务的批处理文件中,任何时候只有
N
正在执行/保留。

我有一个包含

M
任务的批处理文件,每个任务都包含以下内容:

cd $my_specific_directory
srun [OPTIONS] $(cat my_sim_command)&
cd ..

问题是批处理文件可能有数百个条目,但我不希望它们同时请求所有条目的资源,因为这些资源是共享的。

我希望能够在当时声明

N
作业(但是可能需要许多节点),确保当其中一个
N
结束时,批处理文件中的下一个作业就会启动。

这就是

--ntasks
选项的目的吗?会喜欢吗

#SBATCH --ntasks=5

cd $dir1
srun [OPTIONS] --ntasks=1 $(cat my_sim_command)&
cd $dir2
srun [OPTIONS] --ntasks=1 $(cat my_sim_command)&
...
cd $dir20
srun [OPTIONS] --ntasks=1 $(cat my_sim_command)&
cd ..

工作?我所说的“工作”是指,确保批处理中始终有 5 个作业正在运行,直到完成批处理文件中的列表。

我在 linux.stackexchange 上打开了另一个问题,我试图“自己”做到这一点,但是没有取得太多成功,所以我决定 SLURM 本身应该已经具有此功能,尽管我不知道。

slurm
1个回答
0
投票

理想的方法是将 Job Array

%
一起使用。
%
确保仅并行执行指定数量的任务。

例如,

#SBATCH --array=1-100:4%5

这里,可以使用单个作业脚本执行 100 个任务,但

%
确保只有
5
任务同时执行。

我认为这就是您正在寻找的场景。

有关作业数组的示例用例,请访问此 URL

© www.soinside.com 2019 - 2024. All rights reserved.