Передача массива заданий Slurm приводит к недостаточному использованию доступных ресурсов - PullRequest
0 голосов
/ 22 июня 2019

Отправка массива заданий 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 назначает ядра задачам, но ничего из того, что я пробовал, ничего не меняет. Буду признателен за любую помощь, которую вы можете оказать.

1 Ответ

0 голосов
/ 01 июля 2019

Проверьте, разрешает ли файл slurm.conf расходные ресурсы. По умолчанию узлы назначаются исключительно. Мне нужно было добавить следующие строки, чтобы разрешить планирование по баллам

SelectType=select/cons_res
SelectTypeParameters=CR_Core
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...