我有几千个工作要在一个有16个节点的slurm集群上运行 . 这些作业应仅在大小为7的可用节点的子集上运行 . 某些任务是并行化的,因此使用单个节点的所有CPU功率,而其他任务是单线程的 . 因此,多个作业应该在单个节点上同时运行 . 任何任务都不应该在多个节点上产生 .
目前我提交的每个职位都包括:
sbatch --nodelist=myCluster[10-16] myScript.sh
但是这个参数让slurm等到提交的作业终止,因此完全不使用3个节点,并且根据任务(多线程或单线程),当前活动节点在CPU能力方面也可能处于低负载状态 .
sbatch
的最佳参数是什么迫使slurm在指定节点上同时运行多个作业?
3 回答
你可以反过来工作;而不是指定要使用哪些节点,并且每个作业都分配了所有7个节点,指定不使用哪些节点:
和Slurm永远不会为您的工作分配超过7个节点 . 确保群集配置允许节点共享,并且
myScript.sh
包含#SBATCH --ntasks=1 --cpu-per-task=n
,其中n
是每个作业的线程数 .我知道您希望单线程作业共享一个节点,而并行应该只为整个节点分配一个节点?
就我对SLURM的理解而言,这意味着您必须将CPU核心定义为可消耗资源(即,
slurm.conf
中的SelectType=select/cons_res
和SelectTypeParameters=CR_Core
)然后,要约束并行作业以获取整个节点,您可以使用--exclusive选项(但请注意,分区配置优先:如果分区配置为独占访问,则不能拥有共享节点),或使用
-N 1 --tasks-per-node="number_of_cores_in_a_node"
(例如,-N 1 --ntasks-per-node=8
) .请注意,后者仅在所有节点具有相同数量的核心时才起作用 .
这应该由
-N 1
保证 .实际上我认为要走的路是先设置' reservation ' . 根据这个演讲http://slurm.schedmd.com/slurm_ug_2011/Advanced_Usage_Tutorial.pdf(最后一张幻灯片) .
场景:从中午开始,默认SLURM分区中保留10个节点,每天持续60分钟 . 预订仅适用于alan和brenda用户 .
不幸的是,由于缺乏特权,我无法测试此程序 .