SLURM

Informações sobre a utilização do SLURM

A natureza de um cluster é ser um sistema robusto e compartilhado entre vários clientes, logo, o usuário deve conferir e alocar somente aquilo que irá utilizar. O SLURM aloca e bloqueia o recurso solicitado para aquele job, mesmo que não seja, de fato, utilizado. Logo, cabe ao usuário provisionar os recursos que irá utilizar.

Todos os nós do C3HPC tem um disco de scratch montado em /scratch. Recomenda-se que o usuário crie um diretório dentro deste disco para copiar temporariamente seus datasets. Este comportamento evita sobrecarga no NFS (Network File System) do sistema, que é consideravelmente lento em comparação com um disco local.

Verificando a disponibilidade de recursos

O usuário pode ter um panorama simplificado sobre o status do sistema em tempo real com o comando sinfo. Aqui esta um exemplo de saída deste:

root@c3hpc-headnode:~# sinfo
PARTITION        AVAIL  TIMELIMIT  NODES  STATE NODELIST
cpu*                up 7-00:00:00      2    mix proc[1-2]
cpu*                up 7-00:00:00      6  alloc node[2-7]
cpu-test            up      10:00      6  alloc node[2-7]
cpu-24h             up 1-00:00:00      6  alloc node[2-7]
Family-node         up 7-00:00:00      6  alloc node[2-7]
Family-node-test    up      10:00      6  alloc node[2-7]
Family-node-24h     up 1-00:00:00      6  alloc node[2-7]
Family-pti          up 7-00:00:00      1   idle pti
Family-pti-test     up      10:00      1   idle pti
Family-pti-24h      up 1-00:00:00      1   idle pti
Family-vti          up 7-00:00:00      1    mix vti1
Family-vti          up 7-00:00:00      1   idle vti2
Family-vti-test     up      10:00      1    mix vti1
Family-vti-test     up      10:00      1   idle vti2
Family-vti-24h      up 1-00:00:00      1    mix vti1
Family-vti-24h      up 1-00:00:00      1   idle vti2
gpu                 up 5-00:00:00      1    mix vti1
gpu                 up 5-00:00:00      2   idle pti,vti2
gpu-test            up      10:00      1    mix vti1
gpu-test            up      10:00      2   idle pti,vti2

Aqui podemos ver que os nós estão em estados diferentes, com alguns completamente alocados (alloc), parcialmente alocados (mix) e ociosos (idle).

Informações mais aprofundadas do comando sinfo podem ser encontradas aqui.

Entendendo as filas

O C3HPC está organizado da seguinte maneira:

  • Filas para processamento somente em CPU.
  • Filas para processamento utilizando GPU.
  • Filas por família de máquina.

Todos os ‘sabores’ de filas tem as seguintes subdivisões:

  • Uma fila de alta fatia de tempo (7 dias para CPU e 5 dias para GPU).
  • Uma fila para teste do seu código (com 10 minutos de limite).
  • Uma fila de 24 horas para jobs envolvendo processamento em CPU.

As filas de ‘Family’ são destinadas a experimentos que necessitam processamento em hardware homogêneo, como benchmarks.

Submetendo seus jobs para o SLURM

Os jobs podem ser enviados com o comando sbatch, mais informações sobre a formatação do documento podem ser encontradas aqui.

É importante verificar se você está “dentro” do seu ambiente conda antes de submeter o seu job. Caso o ambiente esteja faltando ou errado, as bibliotecas podem nao ser encontradas e o seu batch não funcionará.

O script de submissão no formato .sbatch deverá conter somente os comandos para outros scripts. Exemplo:

#!/bin/sh

#SBATCH -p cpu
#SBATCH --job-name=exemplo
#SBATCH -n 1
#SBATCH -o ./output
#SBATCH -c 16
#SBATCH --mem=20g

mkdir /scratch/$USER
cp -r $HOME/dataset /scratch/$USER/
srun script.sh
srun script2.sh

Neste script.sbatch o usuário enviou o seu script1.sh e script2.sh (que são arquivos externos ao script.sbatch) para uma alocação de 16 cores na partição cpu, com identificação exemplo, em 1 único nó, encaminhando a saída para o arquivo output e com um uso total de 20GB de memória RAM. Em adição aos comandos do SLURM, também efetuamos a cópia do dataset usado no processamento para o disco local do nó alocado.

Existem políticas de penalização automática para usuários que alocam recursos de maneira imprópria, implicando em queda de prioridade na execução dos jobs. Dimensione bem os recursos que pretende utilizar para que não seja penalizado.

Monitorando seus jobs

O comando squeue mostra os jobs que estão rodando no cluster:

root@c3hpc:~# squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
               103    gpu      NAS-NPB    root R        53:10   1       vti1
root@c3hpc:~# 

Mais informações sobre o comando squeue podem ser encontradas aqui.

Você pode configurar a chamada do seu job para que o SLURM te avise sobre status do seu processo, basta configurar as flags --mail-user=seu@email.com e --mail-type=ALL para receber todas as notificações sobre seu job.

Última modificação September 25, 2025: fix: typos (f22d514)