我正在尝试在我的单节点服务器上使用 Slurm 设置 GANG 调度,以便实验室的人员可以在不互相阻塞的情况下运行实验(因此,如果说有人必须运行一些需要几天才能完成的代码,那么其他工作采取更少的方式有机会与它交替运行,因此他们不必等待数天才能运行)
我按照 slurm 站点上的 GANG 调度 slurm.conf 设置教程进行操作,为了检查它是否正常工作,我启动了一堆打印当前时间然后休眠一段时间的作业。但是当我检查 squeue 时,这些作业永远不会交替,它们一个接一个地按顺序运行。为什么会出现这种情况?
这是我的
slurm.conf
文件:
# See the slurm.conf man page for more information.
ClusterName=localcluster
SlurmctldHost=localhost
ProctrackType=proctrack/linuxproc
ReturnToService=1
SlurmctldPidFile=/var/run/slurmctld.pid
SlurmctldPort=6817
SlurmdPidFile=/var/run/slurmd.pid
SlurmdPort=6818
SlurmdSpoolDir=/var/lib/slurm/slurmd
SlurmUser=slurm
StateSaveLocation=/var/lib/slurm/slurmctld
TaskPlugin=task/none
# TIMERS
InactiveLimit=0
KillWait=30
MinJobAge=300
SlurmctldTimeout=120
SlurmdTimeout=300
Waittime=0
# SCHEDULING
#Seteado para que cada laburo alterne cada 15 segundos
SchedulerTimeSlice=15
SchedulerType=sched/builtin
SelectType=select/linear
SelectTypeParameters=CR_Memory
PreemptMode=GANG
# LOGGING AND ACCOUNTING
JobCompType=jobcomp/none
JobAcctGatherFrequency=30
SlurmctldDebug=info
SlurmctldLogFile=/var/log/slurm/slurmctld.log
SlurmdDebug=info
SlurmdLogFile=/var/log/slurm/slurmd.log
# COMPUTE NODES
NodeName=lab04 CPUs=48 CoresPerSocket=12 ThreadsPerCore=2
State=UNKNOWN RealMemory=257249
PartitionName=LocalQ Nodes=ALL Default=YES MaxTime=INFINITE State=UP OverSubscribe=FORCE:6 DefMemPerNode=257249 MaxMemPerNode=257249
据我了解,
SchedulerTimeSlice=15
意味着作业应该每 15 秒交替运行一次。
这是我要启动的工作
sbatch
(一个接一个地启动该工作的许多副本):
#!/bin/bash #SBATCH -J test # Job name
#SBATCH -o job.%j.out # Name of stdout output file (%j expands to %jobId)
#SBATCH -N 1 # Total number of nodes requested
echo "Test output from Slurm Testjob"
date
sleep 10
date
sleep 10
date
sleep 10
date
sleep 10
我希望作业打印一两个日期,然后 Slurm 调度程序来让另一个作业同时运行,然后最终打印的延迟大于 10 秒
然而,在启动了该工作的许多副本之后,这就是我在
squeue
上看到的:
在第一个作业启动完成之前:
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
18 LocalQ test eiarussi PD 0:00 1 (Resources)
19 LocalQ test eiarussi PD 0:00 1 (Priority)
20 LocalQ test eiarussi PD 0:00 1 (Priority)
21 LocalQ test eiarussi PD 0:00 1 (Priority)
17 LocalQ test eiarussi R 0:31 1 lab04
工作结束后:
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
19 LocalQ test eiarussi PD 0:00 1 (Resources)
20 LocalQ test eiarussi PD 0:00 1 (Priority)
21 LocalQ test eiarussi PD 0:00 1 (Priority)
18 LocalQ test eiarussi R 0:02 1 lab04
为什么第一个作业不间断地运行了 30 秒以上,而不是另一个作业在 15 秒后才允许运行?我是否误解了 GANG 调度的工作原理,或者是我的 conf 文件有问题?
请注意,默认情况下,组调度通过暂停链接到作业的进程来工作,这意味着这些进程仍然驻留在内存中。因此,Slurm 不会超额订阅内存以避免交换和崩溃。
鉴于您的提交脚本未指定内存,默认
DefMemPerNode=257249
等于节点的整个内存(RealMemory=257249
),每个作业都分配整个内存,防止作业在同一节点上并置.
尝试为每个作业请求少于一半的内存。