Отправка массива заданий SLURM работает не так, как я ожидал. Когда я запускаю свой скрипт sbatch для создания массива и запускаю программы, я ожидаю, что он полностью использует все доступные ядра, однако он позволяет одновременно выполнять только одно задание из массива на данном узле. SCONTROL показывает работу, используя все 36 ядер на узле, когда я указал 4 ядра для процесса. Кроме того, я хочу ограничить выполнение заданий на одном конкретном узле, однако, если другие узлы не используются, он также будет отправлять задания на них, используя каждое ядро, доступное на этом узле.
Я попытался отправить задания, изменив параметры для --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
, каждый из которых будет использовать четыре ядра для параллельной работы. В целом, я ожидал использовать 32 ядра за один раз для MYPROGRAM
, плюс, тем не менее, для запуска программы отправки заданий требуется много ядер.
Вместо этого мой вывод 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 назначает ядра задачам, но ничего из того, что я пробовал, ничего не меняет. Буду признателен за любую помощь, которую вы можете оказать.