Jobs e Filas
O slurm configura o cluster com um conjunto de filas (queues). Os jobs de cada fila são executados, em primeira aproximação, um após o outro, na ordem de submissão em cada fila. As filas servem para, por exemplo, separar os nós que contém tipos de processadores ou algum acelerador diferente, por grupos de usuários, por prioridades de usuários, por tempo limite de execução, e muitos outros esquemas. Como o Zumbi é pequeno, relativamente simples e com usuários relativamente inocentes, temos apenas uma fila de submissão e você não precisa se preocupar com isto. O slurm chama as filas de “partitions”.
sinfo – Filas e nós
O comando sinfo fornece uma visão geral das filas e nós disponíveis no cluster.
[ramiro@zumbi ~]$ sinfo --summarize
PARTITION AVAIL TIMELIMIT NODES(A/I/O/T) NODELIST
normal* up 5-00:00:00 0/3/0/3 n[01-03]
[ramiro@zumbi ~]$
Vemos que, neste instante de tempo, o Zumbi tem uma única fila, chamda “normal”, que está disponível, (up), cujo limite de tempo de execução é de 5 dias, não tem nenhum nó alocado (A=0), tem três nós completamente desocupados, no modo “idle” (I=3), de um total de três nós (T=3), e finalmente o nós que estão nesta fila, n01, n02 e n03. Este comando com estas opções não reporta processadores, apenas nós completos, portante não é particularmente útil para entender como está o uso da máquina. Neste caso é melhor você usar um comando como
[ramiro@zumbi ~]$ sinfo -o "%.10n %15C"
HOSTNAMES CPUS(A/I/O/T)
n01 0/128/0/128
n02 0/128/0/128
n03 0/128/0/128
[ramiro@zumbi ~]$
Que mostra o estado das CPUs em cada nó, com a mesma convenção acima. É claro que lembrar estas opções de formatação é pouco prático, então é recomendável criar um alias para isto, por exemplo, colocando no seu arquivo .bashrc ou .bash_aliases algo como
alias cpus='sinfo -o "%.10n %15C"'
squeue – Jobs
Para saber o que está rodando e esperando para rodar no cluster, você usa o comando squeue. Por exemplo
[ramiro@zumbi ~]$ squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
2588 normal sleep ramiro R 0:06 1 n01
2587 normal sleep ramiro R 1:21 1 n01
[ramiro@zumbi ~]$
Sem nenhum parâmetro, este comando mostra o jobid, que é u número do job e é como o slurm identifica cada job que está sendo executado no sistema, em qual fila está rodando, ou esperando para executar, o que é redundante por enquanto no Zumbi, pois só temos uma fila. Em seguida temos o nome do job, que claramente pode ser repetido, o dono do job, o estado do job, “R”, no caso, há quanto tempo ele está rodando e a lista do nós no qual o job está executando. Percebam que não há menção sobre quantos processadores estão em uso por cada job no comando squeue sem opções.
O estado do job pode ser “R”, que significa que ele está rodando no momento. Há muitos flags e você precisa olhar o manual para conhecer todos, mas entre os principais, estã́o “F”, se a execução falhou por algum motivo, “PD”, para “pending”, se o job está na fila, esperando a liberação de recursos para ser executado, “CG”, quando o job terminou com sucesso e o slurm está terminando de resolver a burocracia e “CD”, quando o job completou com sucesso.
Eu tenho um alias para este comando com opções que eu acho mais úteis.
[ramiro@zumbi ~]$ sq
JOBID USER CPUS TIME_LIMIT TIME_LEFT ST NODELIST
2589 ramiro 88 2:00:00 1:59:50 R n01
2587 ramiro 1 2:00:00 1:37:36 R n01
[ramiro@zumbi ~]$
O alias sq é
alias sq='squeue --format "%.6A %.9u %.4C %.10l %.10L %.2t %N"'
Agora que sabemos com examinar as filas, vamos ver como podemos lançar jobs no cluster.