Задания slurm ожидают выполнения, но ресурсы доступны

У меня проблемы с распределением ресурсов в том смысле, что в соответствии с тем, как я понял документацию и применил ее к файлу конфигурации, я ожидаю некоторого поведения, которого не происходит.

Вот соответствующий отрывок из конфигурационного файла:

 60 SchedulerType=sched/backfill                                                                                            
 61 SchedulerParameters=bf_continue,bf_interval=45,bf_resolution=90,max_array_tasks=1000                                    
 62 #SchedulerAuth=                                                                                                         
 63 #SchedulerPort=                                                                                                         
 64 #SchedulerRootFilter=                                                                                                   
 65 SelectType=select/cons_res                                                                                              
 66 SelectTypeParameters=CR_CPU_Memory                                                                                      
 67 FastSchedule=1
...     
 102 NodeName=cn_burebista Sockets=2 CoresPerSocket=14 ThreadsPerCore=2 RealMemory=256000  State=UNKNOWN                      
 103 PartitionName=main_compute Nodes=cn_burebista Shared=YES Default=YES MaxTime=76:00:00 State=UP

В соответствии с вышеизложенным у меня включен планировщик обратной засыпки с центральными процессорами и памятью, настроенными как ресурсы. В моем пуле ресурсов 56 процессоров и 256 ГБ оперативной памяти. Я ожидал, что планировщик обратного заполнения попытается выделить ресурсы, чтобы заполнить как можно больше ядер, если несколько процессов запрашивают больше ресурсов, чем доступно. В моем случае очередь такая:

 JOBID PARTITION     NAME     USER      ST       TIME  NODES NODELIST(REASON)
 2361 main_comp     training   mc       PD       0:00      1           (Resources)
 2356 main_comp     skrf_ori   jh       R        58:41      1          cn_burebista
 2357 main_comp     skrf_ori   jh       R        44:13      1          cn_burebista

Задания 2356 и 2357 запрашивают 16 ЦП каждое, задание 2361 запрашивает 20 ЦП, что означает в общей сложности 52 ЦП. доступно много процессоров и памяти. "scontrol show nodes cn_burebista" дает мне следующее:

NodeName=cn_burebista Arch=x86_64 CoresPerSocket=14
   CPUAlloc=32 CPUErr=0 CPUTot=56 CPULoad=21.65
   AvailableFeatures=(null)
   ActiveFeatures=(null)
   Gres=(null)
   NodeAddr=cn_burebista NodeHostName=cn_burebista Version=16.05
   OS=Linux RealMemory=256000 AllocMem=64000 FreeMem=178166 Sockets=2 Boards=1
   State=MIXED ThreadsPerCore=2 TmpDisk=0 Weight=1 Owner=N/A MCS_label=N/A
   BootTime=2018-03-09T12:04:52 SlurmdStartTime=2018-03-20T10:35:50
   CapWatts=n/a
   CurrentWatts=0 LowestJoules=0 ConsumedJoules=0
   ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s

Я просматриваю документацию снова и снова, но не могу понять, что делаю не так ... Почему у меня такая ситуация? Что мне нужно изменить в моей конфигурации, чтобы это работало?

Аналогичный (не в той же ситуации) вопрос задан здесь но нет ответа

РЕДАКТИРОВАТЬ:

Это часть моего сценария для задачи:

  3 # job parameters                                                                                                         
  4 #SBATCH --job-name=training_carlib                                                                                       
  5 #SBATCH --output=training_job_%j.out                                                                                     
  6                                                                                                                          
  7 # needed resources                                                                                                       
  8 #SBATCH --ntasks=1                                                                                                       
  9 #SBATCH --cpus-per-task=20                                                                                               
 10 #SBATCH --export=ALL       

 17 export OMP_NUM_THREADS=20                                                                                                
 18 srun ./super_awesome_app

Как видно, запрос выполняется для 1 задачи на узел и 20 процессоров на задачу. Поскольку планировщик настроен на рассмотрение ЦП как ресурсов, а не ядер, и я прямо спрашиваю ЦП в сценарии, почему задание запрашивает ядра? Это мой справочный документ.

ИЗМЕНИТЬ 2:

Вот результат предлагаемой команды:

JobId=2383 JobName=training_carlib
   UserId=mcetateanu(1000) GroupId=mcetateanu(1001) MCS_label=N/A
   Priority=4294901726 Nice=0 Account=(null) QOS=(null)
   JobState=PENDING Reason=Resources Dependency=(null)
   Requeue=1 Restarts=0 BatchFlag=1 Reboot=0 ExitCode=0:0
   RunTime=00:00:00 TimeLimit=3-04:00:00 TimeMin=N/A
   SubmitTime=2018-03-27T10:30:38 EligibleTime=2018-03-27T10:30:38
   StartTime=2018-03-28T10:27:36 EndTime=2018-03-31T14:27:36 Deadline=N/A
   PreemptTime=None SuspendTime=None SecsPreSuspend=0
   Partition=main_compute AllocNode:Sid=zalmoxis:23690
   ReqNodeList=(null) ExcNodeList=(null)
   NodeList=(null) SchedNodeList=cn_burebista
   NumNodes=1 NumCPUs=20 NumTasks=1 CPUs/Task=20 ReqB:S:C:T=0:0:*:*
   TRES=cpu=20,node=1
   Socks/Node=* NtasksPerN:B:S:C=0:0:*:* CoreSpec=*
   MinCPUsNode=20 MinMemoryNode=0 MinTmpDiskNode=0
   Features=(null) Gres=(null) Reservation=(null)
   OverSubscribe=OK Contiguous=0 Licenses=(null) Network=(null)
   Command=/home/mcetateanu/workspace/CarLib/src/_outputs/linux-xeon_e5v4-icc17.0/bin/classifier/train_classifier.sh
   WorkDir=/home/mcetateanu/workspace/CarLib/src/_outputs/linux-xeon_e5v4-icc17.0/bin/classifier
   StdErr=/home/mcetateanu/workspace/CarLib/src/_outputs/linux-xeon_e5v4-icc17.0/bin/classifier/training_job_2383.out
   StdIn=/dev/null
   StdOut=/home/mcetateanu/workspace/CarLib/src/_outputs/linux-xeon_e5v4-icc17.0/bin/classifier/training_job_2383.out
   Power=

person celavek    schedule 26.03.2018    source источник
comment
Вы можете поделиться выводом scontrol show job 2361?   -  person damienfrancois    schedule 26.03.2018
comment
К сожалению, у меня его нет.   -  person celavek    schedule 26.03.2018
comment
Тогда мы можем только предполагать, но это могло быть потому, что задание запрашивает физические ядра, а не аппаратные потоки.   -  person damienfrancois    schedule 26.03.2018
comment
@damienfrancois Учитывая ваш последний комментарий, я добавил контекст mote, но я добавлю вывод предложенной команды, поскольку, как мне кажется, я могу его воспроизвести.   -  person celavek    schedule 27.03.2018


Ответы (1)


В вашей конфигурации Slurm не может распределить два задания на двух аппаратных потоках одного и того же ядра. Таким образом, в вашем примере Slurm потребуется как минимум 10 полностью свободных ядер, чтобы начать работу. Кроме того, если используется конфигурация соответствия задач block:cyclic по умолчанию, Slurm циклически переключает сокеты для распределения задач в узле.

Я считаю, что происходит следующее:

  • Задание 2356 отправлено, ему выделено 16 физических ядер из-за распределения задач по умолчанию.
  • Задание 2357 отправлено, ему выделяются 2 аппаратных потока на 8 физических ядер, переопределение распределения задач по умолчанию для запуска задания
  • Задание 2361 отправлено, ожидается, что станут доступны по крайней мере 10 физических ядер.

Вы можете получить точные номера ЦП, выделенные для задания, используя

scontrol show -dd job <jobid>

Чтобы настроить Slurm таким образом, чтобы он рассматривал аппаратные потоки точно так же, как если бы они были ядром, вам действительно нужно определить

SelectTypeParameters=CR_CPU_Memory 

но вам также необходимо указать CPUs непосредственно в определении узла

NodeName=cn_burebista CPUs=56 RealMemory=256000  State=UNKNOWN  

и не позволять Slurm вычислять CPUs из Sockets, CoresPerSocket и ThreadsPerCore.

См. Раздел о ThreadsPerCore на странице slurm.conf, посвященной определению узла.

person damienfrancois    schedule 27.03.2018
comment
Я попробовал, изменил свою конфигурацию и повторил сценарий, но он не работает ... Две запущенные задачи имеют следующий результат: NumNodes = 1 NumCPUs = 16 NumTasks = 1 CPUs / Task = 16 ReqB: S : C: T = 0: 0: *: * TRES = cpu = 16, mem = 32000M, node = 1 Socks / Node = * NtasksPerN: B: S: C = 0: 0: *: * CoreSpec = * Nodes = cn_burebista CPU_IDs = 0-15 Mem = 32000 MinCPUsNode = 16 MinMemoryCPU = 2000M MinTmpDiskNode = 0 ----- другие --------- NumNodes = 1 NumCPUs = 20 NumTasks = 1 CPU / Task = 20 ReqB: S: C: T = 0: 0: *: * TRES = cpu = 20, node = 1 Socks / Node = * NtasksPerN: B: S: C = 0: 0: *: * CoreSpec = * - person celavek; 28.03.2018