1

Проблема, с которой я сталкиваюсь с SLURM, может быть кратко изложена следующим образом. Рассмотрим сценарий bash test.sh который запрашивает 8 процессоров, но фактически запускает работу с использованием 10 процессоров:

#!/bin/sh
#SBATCH --ntasks=8
stress -c 10

На сервере с 32 процессорами, если я запускаю этот скрипт 5 раз с sbatch test.sh , 4 из них запускаются сразу, а последний отображается как ожидающий, как показано командой squeue :

JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
    5      main  test.sh     jack PD       0:00      1 (Resources)
    1      main  test.sh     jack  R       0:08      1 server
    2      main  test.sh     jack  R       0:08      1 server
    3      main  test.sh     jack  R       0:05      1 server
    4      main  test.sh     jack  R       0:05      1 server

Проблема в том, что эти 4 задания фактически используют 40 процессоров и перегружают систему. Напротив, я бы ожидал, что SLURM либо не запустит задания, которые на самом деле используют больше ресурсов, чем запрашивается пользователем, либо отложит их до тех пор, пока не будет достаточно ресурсов для их запуска.

Некоторые полезные сведения о моем файле slurm.conf :

# SCHEDULING                                                                       
#DefMemPerCPU=0                                                                    
FastSchedule=1                                                                     
#MaxMemPerCPU=0                                                                    
SchedulerType=sched/backfill                                                       
SchedulerPort=7321                                                                 
SelectType=select/cons_res                                                         
SelectTypeParameters=CR_CPU
# COMPUTE NODES                                                                 
NodeName=server CPUs=32 RealMemory=10000 State=UNKNOWN                   
# PARTITIONS                                                                    
PartitionName=main Nodes=server Default=YES Shared=YES MaxTime=INFINITE State=UP

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

Заранее большое спасибо за вашу помощь!

2 ответа2

1

Slurm не может знать, сколько процессов / потоков собирается создать скрипт. Он может полагаться только на запрашиваемые ресурсы и, следовательно, именно это он использует для планирования заданий.

Наилучшим подходом здесь будет использование любого из подключаемых плагинов в Slurm, чтобы запретить заданиям использовать больше ресурсов, чем запрошено. Эти плагины связывают работу с запрошенным процессором. (Документация по сходству)

Очевидно, что вы не можете контролировать, сколько процессов / потоков запускает пользователь в своем сценарии, но ограничивая количество ядер, которые может использовать задание, вы уменьшите влияние, которое неконтролируемый пользователь может оказать на задания других пользователей.

Это не помешает вашей системе выглядеть перегруженной, но "плохие" пользователи будут влиять только на себя.

0

После нашего обсуждения в SO я пытался использовать аргумент --exclusive для достижения этой цели. Моя архитектура отличается от вашей (у меня есть 7 процессоров, доступных для slurm), но вот что я сделал:

#!/bin/sh
#SBATCH --ntasks=2    
srun -n 2 --exclusive stress -c 1

а затем работает

sbatch test.sh ; sbatch test.sh ; sbatch test.sh ; sbatch test.sh

дает мне 6 stress процессов:

15050 tom       20   0    7308    212    108 R 100.0  0.0   1:47.46 stress                                                                                                              
15054 tom       20   0    7308    208    108 R 100.0  0.0   1:47.47 stress                                                                                                              
15063 tom       20   0    7308    208    108 R 100.0  0.0   1:47.47 stress                                                                                                              
15064 tom       20   0    7308    212    108 R 100.0  0.0   1:47.47 stress                                                                                                              
15080 tom       20   0    7308    208    108 R 100.0  0.0   1:47.46 stress                                                                                                            
15076 tom       20   0    7308    212    108 R  99.7  0.0   1:47.45 stress      

с последним, ожидающим в очереди:

     JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
      2368       Tom  test.sh      tom PD       0:00      1 (Resources)
      2365       Tom  test.sh      tom  R       5:03      1 Tom
      2366       Tom  test.sh      tom  R       5:03      1 Tom
      2367       Tom  test.sh      tom  R       5:03      1 Tom

Так что в этом случае использование srun -n 2 приводит к тому, что один и тот же процесс запускается дважды. То же самое происходит, если я использую

#!/bin/sh
#SBATCH --ntasks=2
srun -n 1 --exclusive stress -c 1 &
srun -n 1 --exclusive stress -c 1 &
srun -n 1 --exclusive stress -c 1 &
wait

то есть SLURM знает, что у этого пакетного сценария есть две задачи, поэтому он позволяет двум запускаться одновременно; третий должен «ждать своей очереди».

С другой стороны

#!/bin/sh
#SBATCH --ntasks=1
srun -n 1 --exclusive stress -c 2

дает мне поведение, которое вы описываете в своем вопросе.

Не уверен, что это отвечает на 100%, но, возможно, это немного помогает.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .