我使用 SLURM 作为作业调度程序,并为小型集群(具有 64 个核心的单个节点)排队。要提交批处理作业,我使用:
> sbatch run.sh
其中 run.sh 如下所示:
#! /bin/bash
#SBATCH --ntasks=4
export OMP_THREAD_LIMIT=4
/home/Benchmarks/Graph500/omp-csr/omp-csr -s 23
但是,当我一个接一个地提交两个批处理作业时,我得到:
> squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
29 debug run.sh anonymou PD 0:00 1 (Resources)
28 debug run.sh anonymou R 1:13 1 localhost
每个作业只需要 4 个核心,因此两个作业都应该运行。也许我错误配置了 slurm 控制器,/etc/slurm.conf 中的相关行是:
# COMPUTE NODES
NodeName=localhost CPUs=64 Sockets=4 CoresPerSocket=8 ThreadsPerCore=2 State=UNKNOWN
PartitionName=debug Nodes=localhost Default=YES MaxTime=INFINITE State=UP
如有任何帮助/提示我将不胜感激。
答案1
SLURM 默认不允许资源共享,因此当一个作业在 1 个节点上运行时,其余作业会等待它完成后才能在同一节点上执行任何其他作业。
SLURM 需要进行配置以实现资源共享,这应该相当简单且有据可查。
以下是要添加到您的 slurm.conf 文件(通常位于 /etc/slurm 下)的内容的示例:
SelectType=select/cons_res
SelectTypeParameters=
DefMemPerCPU=
这将允许使用插件共享节点的资源con_res
。
该select/con_res
插件允许使用多种参数(SelectTypeParameters)。最突出的参数如下(有关参数的完整列表,请参阅 slurm.conf 的手册页):
CR_CPU:CPU 是可消耗资源。
CR_CPU_内存:将内存作为消耗品添加到CR_CPU。
CR_Core 核心:核心是可消耗资源。
CR_核心_内存:将内存作为消耗品添加到 CR_CPU_Memory。
完成后,您已经选择了要在 SLURM 中用作消耗品的资源类型,您需要做的就是将选项添加到默认队列并在用作控制器的节点中shared=yes
发出命令。scontrol reconfigure