Slurm 作业数组提交严重未充分利用可用资源
Posted
技术标签:
【中文标题】Slurm 作业数组提交严重未充分利用可用资源【英文标题】:Slurm job array submission severely underutilizing available resources 【发布时间】:2019-11-04 18:50:15 【问题描述】:SLURM 作业数组提交未按预期工作。当我运行我的 sbatch 脚本来创建阵列并运行程序时,我希望它能够充分利用所有可用的内核,但是,它一次只允许阵列中的一个作业在给定节点上运行。当我为进程指定 4 个核心时,SCONTROL 显示使用节点上所有 36 个核心的作业。此外,我想将作业限制在一个特定节点上运行,但是如果其他节点未使用,它也会使用该节点上可用的每个核心向它们提交作业。
我尝试通过更改 --nodes、--ntasks、--nodelist、--ntasks-per-node、--cpus-per-task 的参数,设置 OMP_NUM_THREADS
并指定mpirun
的核心数。这些选项似乎都没有改变任何东西。
#!/bin/bash
#SBATCH --time=2:00:00 # walltime
#SBATCH --ntasks=1 # number of processor cores (i.e. tasks)
#SBATCH --nodes=1 # number of nodes
#SBATCH --nodelist node001
#SBATCH --ntasks-per-node=9
#SBATCH --cpus-per-task=4
#SBATCH --mem-per-cpu=500MB # memory per CPU core
#SBATCH --array=0-23%8
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
mpirun -n 4 MYPROGRAM
我希望能够运行八个MYPROGRAM
实例,每个实例使用四个内核进行并行操作。总的来说,我预计MYPROGRAM
一次使用 32 个内核,但是运行作业提交程序需要许多内核。
相反,我的squeue
输出看起来像这样
JOBID PARTITION NAME USER ST TIME NODES CPUS
num_[1-23%6] any MYPROGRAM user PD 0:00 1 4
num_0 any MYPROGRAM user R 0:14 1 36
它表示我正在为此进程使用节点上的所有可用内核,并且不允许开始其他阵列作业。虽然MYPROGRAM
完全按预期运行,但在任何给定时间只有一次运行它的实例。
我的SCONTROL
输出如下所示:
UserId=user(225589) GroupId=domain users(200513) MCS_label=N/A
Priority=4294900562 Nice=0 Account=(null) QOS=normal
JobState=PENDING Reason=Resources Dependency=(null)
Requeue=1 Restarts=0 BatchFlag=1 Reboot=0 ExitCode=0:0
RunTime=00:00:00 TimeLimit=02:00:00 TimeMin=N/A
SubmitTime=2019-06-21T18:46:25 EligibleTime=2019-06-21T18:46:26
StartTime=Unknown EndTime=Unknown Deadline=N/A
PreemptTime=None SuspendTime=None SecsPreSuspend=0
LastSchedEval=2019-06-21T18:46:28
Partition=any AllocNode:Sid=w***:45277
ReqNodeList=node001 ExcNodeList=(null)
NodeList=(null) SchedNodeList=node001
NumNodes=1-1 NumCPUs=4 NumTasks=1 CPUs/Task=4 ReqB:S:C:T=0:0:*:*
TRES=cpu=4,mem=2000M,node=1
Socks/Node=* NtasksPerN:B:S:C=9:0:*:* CoreSpec=*
MinCPUsNode=36 MinMemoryCPU=500M MinTmpDiskNode=0
Features=(null) DelayBoot=00:00:00
Gres=(null) Reservation=(null)
OverSubscribe=NO Contiguous=0 Licenses=(null) Network=(null)
Power=
JobId=1694 ArrayJobId=1693 ArrayTaskId=0 JobName=launch_vasp.sh
UserId=user(225589) GroupId=domain users(200513) MCS_label=N/A
Priority=4294900562 Nice=0 Account=(null) QOS=normal
JobState=RUNNING Reason=None Dependency=(null)
Requeue=1 Restarts=0 BatchFlag=1 Reboot=0 ExitCode=0:0
RunTime=00:00:10 TimeLimit=02:00:00 TimeMin=N/A
SubmitTime=2019-06-21T18:46:25 EligibleTime=2019-06-21T18:46:26
StartTime=2019-06-21T18:46:26 EndTime=2019-06-21T20:46:26 Deadline=N/A
PreemptTime=None SuspendTime=None SecsPreSuspend=0
LastSchedEval=2019-06-21T18:46:26
Partition=any AllocNode:Sid=w***:45277
ReqNodeList=node001 ExcNodeList=(null)
NodeList=node001
BatchHost=node001
NumNodes=1 NumCPUs=36 NumTasks=1 CPUs/Task=4 ReqB:S:C:T=0:0:*:*
TRES=cpu=36,mem=18000M,node=1,billing=36
Socks/Node=* NtasksPerN:B:S:C=9:0:*:* CoreSpec=*
MinCPUsNode=36 MinMemoryCPU=500M MinTmpDiskNode=0
Features=(null) DelayBoot=00:00:00
Gres=(null) Reservation=(null)
OverSubscribe=NO Contiguous=0 Licenses=(null) Network=(null)
Power=
SLURM 将核心分配给任务的方式出了点问题,但我尝试过的没有任何改变。如果您能提供任何帮助,我将不胜感激。
【问题讨论】:
--ntasks=1
似乎与 --ntasks-per-node=9
冲突。此外,运行mpirun -np 4 ...
的脚本增加了混乱(看起来应该是1
或9
)。您还应该在 SLURM 配置中仔细检查分区是否处于 Exclusive
模式(例如,在给定节点上只能运行一个作业)
【参考方案1】:
检查slurm.conf 文件是否允许消耗性资源。默认是独占分配节点。我必须添加以下行以允许按分数安排
SelectType=select/cons_res
SelectTypeParameters=CR_Core
【讨论】:
以上是关于Slurm 作业数组提交严重未充分利用可用资源的主要内容,如果未能解决你的问题,请参考以下文章
解决 SLURM “sbatch:错误:批处理作业提交失败:请求的节点配置不可用”错误
如何从 SLURM 中的节点列表向任何 [子集] 节点提交作业?