slurm:使用nodelist中的任何节点

时间:2014-10-06 12:57:42

标签: cluster-computing batch-processing slurm sbatch

我在拥有16个节点的slurm集群上运行了几千个作业。这些作业应仅在大小为7的可用节点的子集上运行。某些任务是并行化的,因此使用单个节点的所有CPU功率,而其他任务是单线程的。因此,多个作业应该在单个节点上同时运行。任何任务都不应该在多个节点上产生。

目前我提交的每个职位都是:

sbatch --nodelist=myCluster[10-16] myScript.sh

然而,这个参数让slurm等到提交的作业终止,因此完全不使用3个节点,并且根据任务(多线程或单线程),当前活动节点也可能处于低负载状态CPU能力。

迫使slurm在指定节点上同时运行多个作业的sbatch的最佳参数是什么?

3 个答案:

答案 0 :(得分:26)

你可以反过来工作;而不是指定使用哪些节点,并且每个作业都分配了所有7个节点,指定不使用哪些节点:

sbatch --exclude=myCluster[01-09] myScript.sh

并且Slurm永远不会为您的作业分配超过7个节点。确保群集配置允许节点共享,并且myScript.sh包含#SBATCH --ntasks=1 --cpu-per-task=n n每个作业的线程数。

答案 1 :(得分:2)

  

某些任务是并行化的,因此使用单个节点的所有CPU功率,而其他任务是单线程的。

据我所知,您希望单线程作业共享一个节点,而并行应该为整个节点分配一个节点?

  

多个作业应该在一个节点上同时运行。

就我对SLURM的理解而言,这意味着您必须将CPU核心定义为可消耗资源(即SelectType=select/cons_res中的SelectTypeParameters=CR_Coreslurm.conf

然后,要约束并行作业以获取整个节点,您可以使用--exclusive选项(但请注意,分区配置优先:如果分区配置为独占访问,则不能拥有共享节点),或使用-N 1 --tasks-per-node="number_of_cores_in_a_node"(例如-N 1 --ntasks-per-node=8)。

请注意,后者仅在所有节点具有相同数量的核心时才有效。

  

任何任务都不应该在多个节点上产生。

这应该由-N 1保证。

答案 2 :(得分:1)

实际上我认为要走的路是先设置'预订'。根据此演示文稿http://slurm.schedmd.com/slurm_ug_2011/Advanced_Usage_Tutorial.pdf(上一张幻灯片)。

场景:从中午开始,默认SLURM分区中保留十个节点,每天持续60分钟。预订仅适用于alan和brenda用户。

scontrol create reservation user=alan,brenda starttime=noon duration=60 flags=daily nodecnt=10
Reservation created: alan_6

scontrol show res
ReservationName=alan_6 StartTime=2009-02-05T12:00:00
    EndTime=2009-02-05T13:00:00 Duration=60 Nodes=sun[000-003,007,010-013,017] NodeCnt=10 Features=(null) PartitionName=pdebug Flags=DAILY Licenses=(null)
    Users=alan,brenda Accounts=(null)

# submit job with:
sbatch --reservation=alan_6 myScript.sh

不幸的是,由于缺乏特权,我无法测试此程序。