O problema que estou enfrentando com o SLURM pode ser resumido da seguinte forma. Considere um script bash test.sh
que solicite 8 CPUs, mas na verdade inicia um trabalho usando 10 CPUs:
#!/bin/sh
#SBATCH --ntasks=8
stress -c 10
Em um servidor com 32 CPUs, se eu iniciar 5 vezes esse script sbatch test.sh
, 4 deles começarão a ser executados imediatamente e o último aparecerá como pendente, conforme mostrado pelo squeue
comando:
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
O problema é que esses 4 trabalhos estão realmente usando 40 CPUs e sobrecarregam o sistema. Eu, pelo contrário, esperaria que o SLURM não iniciasse os trabalhos que estão realmente usando mais recursos do que o solicitado pelo usuário ou os retivesse até que houvesse recursos suficientes para iniciá-los.
Alguns detalhes úteis sobre o meu slurm.conf
arquivo:
# 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
Estou apenas começando com SLURM e estou intrigado com esse comportamento. Como posso garantir que os usuários do meu servidor não iniciem trabalhos que usam muitas CPUs? Li o manual e passei muito tempo procurando informações nos fóruns, mas infelizmente não achei nada útil.
Muito obrigado antecipadamente por sua ajuda!