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).
Observações
- Uma das características que os administradores do C3HPC impuseram foi limitar o usuário a utilizar somente filas com recursos que foram solicitados. Usuários que não solicitaram uso de GPU, não terão acesso as filas de máquinas que dispõe desta característica.
- Grupos de usuários e prioridades para utilização das máquinas também foram definidas com base nas políticas internas de utilização do C3SL. Tais políticas podem ser revistas e alteradas sem aviso prévio.
- Quaisquer dúvidas sobre a utilização dos recursos alocados para o seu usuário podem ser enviadas para c3hpc@inf.ufpr.br.
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.