SLURM是否每个节点提交多个任务? [英] SLURM Submit multiple tasks per node?

查看:1132
本文介绍了SLURM是否每个节点提交多个任务?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

我的问题(示例):在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

这似乎按我的要求工作,依次在一个节点上运行任务,直到该节点上的所有CPU被使用,然后继续在下一个节点上运行其他任务,直到再次使用所有CPU,依此类推. >

我的问题..我不确定这是否是它真正的功能(?),因为我不完全了解srun关于-n的手册页,并且我以前没有使用过srun. 我的困惑主要来自"-n":在-n的手册页中,它说默认为每个节点一个任务,..",因此我希望如果我使用"srun -n 1",则只会有一个任务在每个节点上运行,似乎并非如此. 此外,当我尝试例如"srun -n 2 ./program"似乎只是在两个相同的任务上运行完全相同的程序两次,而无法使用不同的输入文件..我想不出为什么这会有用吗?

解决方案

您的设置正确,除了必须使用srun的--exclusive选项(在这种情况下,其含义与sbatch的含义不同).

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

Your setup is correct except that you must use the --exclusive option of srun (which has a different meaning in this case than for sbatch).

As for your remark regarding the usefulness of srun, the behaviour of the program can be changed based on the environment variable $SLURM_TASK_ID, or the rank in case of an MPI program. Your confusion arises from the fact that your program is not written to be parallel (appart from the 2 OMP threads) while srun is meant to start parallel programs, most of the time based on MPI.

这篇关于SLURM是否每个节点提交多个任务?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆