SLURM медленный для работы с массивами - PullRequest
0 голосов
/ 03 сентября 2018

У меня небольшой кластер с узлами A, B, C и D. Каждый узел имеет 80 ГБ ОЗУ и 32 ЦП. Я использую Slurm 17.11.7.

Я выполнил следующие тесты:

  • Если я запускаю определенную команду Java непосредственно на терминале на узле A, я получаю результат через 2 минуты.
  • Если я запускаю ту же команду с «одиночным» заданием массива (#SBATCH --array = 1-1), я получаю результат снова через 2 минуты.
  • Если я выполнил ту же команду с теми же параметрами и заданием массива для slurm только на узле A, я получаю вывод за 8 минут, то есть он в четыре раза медленнее. Здесь я, конечно, одновременно запускаю 31 другую команду Java с другими параметрами.

Я уже пробовал SelectTypeParameters = CR_CPU_Memory и SelectTypeParameters = CR_Core с тем же результатом.

Почему моя работа с массивами в 4 раза медленнее? Спасибо за вашу помощь!

Заголовок моего массива, который я отправляю, выглядит следующим образом:

#!/bin/bash -l
#SBATCH --array=1-42
#SBATCH --job-name exp
#SBATCH --output logs/output_%A_%a.txt
#SBATCH --error logs/error_%A_%a.txt
#SBATCH --time=20:00
#SBATCH --mem=2048
#SBATCH --cpus-per-task=1
#SBATCH -w <NodeA>

Файл slurm.conf выглядит так:

ControlMachine=<NodeA>
ControlAddr=<IPNodeA>
MpiDefault=none
ProctrackType=proctrack/cgroup
ReturnToService=1
SlurmctldPidFile=/var/run/slurmctld.pid
SlurmdPidFile=/var/run/slurmd.pid
SlurmdSpoolDir=/var/spool/slurmd
SlurmUser=<test_user_123>
StateSaveLocation=/var/spool/slurmctld
SwitchType=switch/none
TaskPlugin=task/affinity

MaxJobCount=100000
MaxArraySize=15000

MinJobAge=300
# SCHEDULING
FastSchedule=1
SchedulerType=sched/backfill
SelectType=select/cons_res
SelectTypeParameters=CR_CPU_Memory

# LOGGING AND ACCOUNTING
AccountingStorageType=accounting_storage/none
ClusterName=Cluster
JobAcctGatherType=jobacct_gather/none
SlurmctldLogFile=/var/log/slurmctld.log
SlurmdLogFile=/var/log/slurmd.log

# COMPUTE NODES
#NodeName=NameA-D> State=UNKNOWN
NodeName=<NameA> NodeAddr=<IPNodeA> State=UNKNOWN CPUs=32 RealMemory=70363
NodeName=<NameB> NodeAddr=<IPNodeB> State=UNKNOWN CPUs=32 RealMemory=70363
NodeName=<NameC> NodeAddr=<IPNodeC> State=UNKNOWN CPUs=32 RealMemory=70363
NodeName=<NameD> NodeAddr=<IPNodeD> State=UNKNOWN CPUs=32 RealMemory=70363

PartitionName=debug Nodes=<NodeA-D> Default=YES MaxTime=INFINITE State=UP

1 Ответ

0 голосов
/ 03 сентября 2018

Если время выполнения не зависит от значения параметра в приложении Java, возможны два объяснения:

Либо ваша cgroup конфигурация не ограничивает вашу работу, а ваш Java-код является многопоточным. В этом случае, если вы запускаете только одно задание или работаете непосредственно на узле, ваша отдельная задача использует несколько процессоров параллельно. Если вы запускаете массив заданий, который насыщает узел, каждая задача может использовать только один процессор.

Или, ваш узел настроен с гиперпоточностью. В этом случае, если вы запускаете только одно задание или запускаете непосредственно на узле, ваша единственная задача может использовать полный ЦП. Если вы запускаете массив заданий, который насыщает узел, каждая задача должна совместно использовать физический ЦП с другим.

...