slurm忽略了我的sbatch文件中的--distribution = cyclic标志,而是使用了“块”分发方法

时间:2019-06-28 19:59:04

标签: slurm

我想在多个节点上平均分配作业,并在我的sbatch文件中指定了--distribution = cyclic,但是slurm忽略了这一点,而是使用了块分配。

之前,任务在节点之间平均分配。通过阅读文档,这是我期望的默认行为,除非在slurm.conf中另行指定。

从今天开始,任务将聚集在第一个节点上,而每个其他节点上只有一个任务。我显然已经更改了配置中的某些内容,但不知道要在哪里修复它。我确实对计算节点的映像进行了更改,并在今天重新启动了它们。

当我尝试在头节点上停止slurmctld时,它由Bright Cluster Manager监视器立即重新启动。不知道这是否阻止配置更新。

我已经研究了slurm.conf文件,但是看起来还可以。我已经尝试了SelectTypeParameters = CR_Core和CR_CPU,但是得到了相同的结果。

要尝试解决此问题,我在自己的sbatch文件中添加了--distribution = cyclic,但仍使用'block'方法分配slurm。但是根据我对文档的理解,至少不必将此添加到sbatch中。

这是slurm.conf和我的sbatch脚本中的相关行:

# RESOURCES
SelectType=select/cons_res
SelectTypeParameters=CR_Core
# Node Description
NodeName=DEFAULT Sockets=2 CoresPerSocket=20 ThreadsPerCore=1
# Scheduler
SchedulerType=sched/backfill
#SBATCH --ntasks=12
#SBATCH --nodes=3
#SBATCH --distribution=cyclic:cyclic

我希望任务在节点之间平均分配,三个节点中的每个节点上都有四个任务。

这是任务实际分配的方式:

   NODELIST       STATE  CPUS(A/I/O/T)  MEMORY TMP_DISK REASON
 compute001       mixed     10/30/0/40  192006     2038 none
 compute002       mixed      1/39/0/40  192006     2038 none
 compute003       mixed      1/39/0/40  192006     2038 none
 compute004        idle      0/40/0/40  192006     2038 none

2 个答案:

答案 0 :(得分:0)

根据https://slurm.schedmd.com/sbatch.html,分发标志仅对srun有用:

  

指定远程进程的替代分发方法。在sbatch中,这仅设置环境变量,这些变量将被后续的srun请求使用。

(关于为什么是这样的……我不知道。但是看来确实是设计使然。)

根据您的配置,通过设置SelectType = cons_res或cons_tres和SelectTypeParameters = CR_LLN,您可能能够近似所需的内容。如果这些参数中的任何一个最近改变了,那也可能是行为改变的原因。

答案 1 :(得分:0)

通过修改sbatch文件以限制分配给每个节点的任务数,我设法在节点之间手动分配了进程:

#SBATCH --ntasks=12
#SBATCH --nodes=3
#SBATCH --tasks-per-node=4

这将导致任务在节点之间的预期分布:

   NODELIST       STATE  CPUS(A/I/O/T)  MEMORY TMP_DISK REASON
 compute001       mixed      4/36/0/40  192027     2038 none
 compute002       mixed      4/36/0/40  192027     2038 none
 compute003       mixed      4/36/0/40  192027     2038 none
 compute004        idle      0/40/0/40  192027     2038 none