SLURM每个节点提交多个任务?

Shi*_*ari 5 hpc job-scheduling slurm sbatch

我发现了一些非常相似的问题,这些问题帮助我找到了一个似乎有用的脚本但是我仍然不确定我是否完全理解为什么,因此这个问题......

我的问题(例子):在3个节点上,我想在每个节点上运行12个任务(总共36个任务).此外,每个任务都使用OpenMP,并且应该使用2个CPU.在我的例子中,一个节点有24个CPU和64GB内存.我的脚本是:

#SBATCH --nodes=3
#SBATCH --ntasks=36
#SBATCH --cpus-per-task=2
#SBATCH --mem-per-cpu=2000

export OMP_NUM_THREADS=2

for i in {1..36}; do
    srun -N 1 -n 1 ./program input${i} >& out${i} &
done

wait
Run Code Online (Sandbox Code Playgroud)

这似乎按照我的要求工作,在节点上连续运行任务,直到该节点上的所有CPU都在使用,然后继续在下一个节点上运行更多任务,直到再次使用所有CPU等.

我的问题..我不确定这是否真的是它(?),因为我没有完全理解关于-n的srun的手册页,我之前没有使用srun.主要是我的混淆来自"-n":在-n的手册页中说"默认是每个节点一个任务,",所以我预计如果我使用"srun -n 1"只有一个任务将是在每个节点上运行,但似乎并非如此.此外,当我尝试例如"srun -n 2 ./program"时,似乎只运行完全相同的程序两次作为两个不同的任务,无法使用不同的输入文件..我无法想到为什么会这样有用?

dam*_*ois 5

您的设置正确,只是必须使用--exclusive srun选项(在这种情况下,它的含义与的含义不同sbatch)。

至于您对的有用性的评论srun,可以根据环境变量$SLURM_TASK_ID或MPI程序的等级来更改程序的行为。造成混淆的原因是,您的程序并非是并行编写的(来自2个OMP线程),而srun实际上大多数情况下都是基于MPI来启动并行程序的。