SLURM慢的阵列作业(SLURM slow for array job)

2019-10-28 09:03发布

我有一小簇用节点A,B,C和D中的每个节点有80GB的RAM和32个CPU。 我使用SLURM 17.11.7。

我进行了以下基准测试:

  • 如果我直接在节点的终端上运行特定的Java命令,我得到了一个2分钟结果。
  • 如果我运行与“单”阵列作业(#SBATCH --array = 1-1)相同的命令,我在2分钟再次得到一个结果。
  • 如果我跑了相同的参数相同的命令,只有在节点A上SLURM阵列作业,我得到8mininutes输出,也就是说,它是慢四倍。 在同一时间不同的参数,在这里,我,当然,运行31其他Java命令。

我已经尝试过SelectTypeParameters = CR_CPU_Memory和SelectTypeParameters = CR_Core具有相同的结果。

为什么我的阵列作业4次慢? 谢谢你的帮助!

我的阵列作业,我提交的头,看起来是这样的:

#!/bin/bash -l
#SBATCH --array=1-42
#SBATCH --job-name exp
#SBATCH --output logs/output_%A_%a.txt
#SBATCH --error logs/error_%A_%a.txt
#SBATCH --time=20:00
#SBATCH --mem=2048
#SBATCH --cpus-per-task=1
#SBATCH -w <NodeA>

该slurm.conf文件看起来像:

ControlMachine=<NodeA>
ControlAddr=<IPNodeA>
MpiDefault=none
ProctrackType=proctrack/cgroup
ReturnToService=1
SlurmctldPidFile=/var/run/slurmctld.pid
SlurmdPidFile=/var/run/slurmd.pid
SlurmdSpoolDir=/var/spool/slurmd
SlurmUser=<test_user_123>
StateSaveLocation=/var/spool/slurmctld
SwitchType=switch/none
TaskPlugin=task/affinity

MaxJobCount=100000
MaxArraySize=15000

MinJobAge=300
# SCHEDULING
FastSchedule=1
SchedulerType=sched/backfill
SelectType=select/cons_res
SelectTypeParameters=CR_CPU_Memory

# LOGGING AND ACCOUNTING
AccountingStorageType=accounting_storage/none
ClusterName=Cluster
JobAcctGatherType=jobacct_gather/none
SlurmctldLogFile=/var/log/slurmctld.log
SlurmdLogFile=/var/log/slurmd.log

# COMPUTE NODES
#NodeName=NameA-D> State=UNKNOWN
NodeName=<NameA> NodeAddr=<IPNodeA> State=UNKNOWN CPUs=32 RealMemory=70363
NodeName=<NameB> NodeAddr=<IPNodeB> State=UNKNOWN CPUs=32 RealMemory=70363
NodeName=<NameC> NodeAddr=<IPNodeC> State=UNKNOWN CPUs=32 RealMemory=70363
NodeName=<NameD> NodeAddr=<IPNodeD> State=UNKNOWN CPUs=32 RealMemory=70363

PartitionName=debug Nodes=<NodeA-D> Default=YES MaxTime=INFINITE State=UP

Answer 1:

如果运行时间不依赖于Java应用程序的参数值,有两种可能的解释:

无论您cgroup配置不限制你的工作和你的Java代码是多线程的。 在这种情况下,如果你只运行一个作业,或者如果你直接在节点上运行,你的单任务并联使用多个CPU。 如果您运行浸透节点的工作阵列,每个任务只能使用一个CPU。

或者,你的节点配置超线程。 在这种情况下,如果你只运行一个作业,或者如果你直接在节点上运行,你的单个任务可以使用完整的CPU。 如果您运行浸透节点的工作阵列,每个任务必须共享与另一个物理CPU。



文章来源: SLURM slow for array job