O Slurm é um escalonador de tarefas e um gerenciador de recursos combinados que permitem que os usuários executem seus trabalhos nos clusters de computação de alto desempenho (HPC). O Slurm foi implantado em vários centros de computação nacionais e internacionais e em aproximadamente 60% dos supercomputadores TOP500 do mundo.
O Slurm Workload Manager possui três funções principais:
Um cluster HPC é composto por vários nós de processamento, cada um com uma determinada quantidade de processadores, memória e GPUs. O usuário envia tarefas que especificam os aplicativos que eles querem executar, juntamente com uma descrição dos recursos de computação necessários para executar os aplicativos.
As unidades de processamento nos nós são os núcleos. Com o advento das arquiteturas Simultaneous Multithreading (SMT), os núcleos únicos podem ter vários threads de hardware (algumas vezes conhecidos como hyper-threads). Os elementos de processamento são chamados genericamente de CPU. Para sistemas sem SMT, uma CPU é um núcleo. Para sistemas com SMT disponível e ativado, uma CPU é um encadeamento de hardware.
O comando sbatch é usado para submeter um script em lote ao Slurm. Ele foi projetado para rejeitar o trabalho no momento do envio, se houver solicitações ou restrições que o Slurm não possa atender conforme especificado. Isso dá ao usuário a oportunidade de examinar a solicitação de tarefa e reenviá-la com as correções necessárias.
Jobs paralelos iniciam aplicativos que são compostos por muitos processos (também conhecidos como tasks) que se comunicam, normalmente por meio de um switch de alta velocidade. Jobs em série iniciam uma ou mais tarefas que funcionam independentemente em problemas separados.
Softwares que utilizam paralelismo devem ser ativados pelo comando srun. Softwares seriais podem usar srun para iniciá-los, mas não é necessário nas alocações de um nó.
A maneira típica de criar um trabalho é escrever um script de envio . Um script de envio é um script de shell , por exemplo, um script Bash , cujos comentários, se forem prefixados com SBATCH , são entendidos pelo Slurm como parâmetros que descrevem solicitações de recursos e outras opções de envio. Você pode obter a lista completa de parâmetros na página executando o comando man sbatch .
As diretivas do SBATCH devem aparecer na parte superior do arquivo de envio, antes de qualquer outra linha, exceto a primeira linha que deve ser o shebang (por exemplo, #!/bin/bash).
Para configurar corretamente um script de tarefa, você precisará conhecer o formato geral do script, os comandos que deseja usar, como solicitar os recursos necessários para a execução da tarefa e, possivelmente, algumas das variáveis de ambiente Slurm.
O script da tarefa em lote é composto por quatro componentes principais:
Aqui está um exemplo de um script em lote que solicita 2 nós e inicia 24 tarefas na partição “medim” utilizando o software myApp :
#!/bin/bash
#SBATCH -J Exemplo # Nome do job
#SBATCH -p long # Fila (medium/long/gpu)
#SBATCH --nodes 2 # Numero mínimo de servidores
#SBATCH --ntasks 24 # Numero total de processos
ulimit -s unlimited
ulimit -a
srun myApp
Quando a tarefa está programada para ser executada, o gerenciador de recursos executará o script da tarefa em lote no primeiro nó da alocação.
Para aprender sobre todas as opções disponíveis para cada comando, insira man <comando> enquanto estiver conectado ao ambiente do Cluster.
Comando | Definição |
sbatch | Envia scripts de tarefas para a fila de execução |
scancel | Cancela um job |
scontrol | Usado para exibir o estado Slurm (várias opções disponíveis apenas para root) |
sinfo | Exibir estado de partições e nós |
squeue | Exibir estado dos jobs |
salloc | Envia um job para execução ou inicia um trabalho em tempo real |
O Slurm tem sua própria sintaxe para solicitar recursos de computação. Abaixo está uma tabela de resumo de alguns recursos solicitados com frequência e a sintaxe de Slurm para obtê-los. Para obter uma lista completa da sintaxe, execute o comando man sbatch.
Sintaxe | Significado |
#SBATCH -p public | Define a partição em que o job será executado (medium/long/gpu). |
#SBATCH -J job_name | Define o nome do Job |
#SBATCH -n quantidade | Define o número total de tarefas da CPU. |
#SBATCH -N quantidade | Define o número de nós de computação solicitados. |
#SBATCH –ntasks-per-n quantidade | Define o número de tarefas por nó. |
Quaisquer variáveis de ambiente que você definiu com o comando sbatch serão passadas para o seu trabalho. Por esse motivo, se o seu programa precisar de determinadas variáveis de ambiente definidas para funcionar corretamente, é melhor colocá-las no seu script de trabalho. Isso também facilita a reprodução dos resultados do trabalho posteriormente, se necessário.
NOTA : As variáveis de ambiente substituirão todas as opções definidas em um script em lote e as opções de linha de comando substituirão as variáveis de ambiente definidas anteriormente.
Informações sobre algumas das variáveis comuns de ambiente de entrada e saída disponíveis no script de tarefa sbatch estão listadas na tabela abaixo. Para informações adicionais, consulte a página de manual do sbatch.
Variável | Definição |
$SLURM_JOB_ID | ID de identificação do Job |
$SLURM_SUBMIT_DIR | Diretório onde o job foi executado |
$SLURM_JOB_NODELIST | Arquivo contendo nomes dos host alocados |
$SLURM_NTASKS | Número total de núcleos para o Job |
Antes de enviar um trabalho para processamento em lote, é importante saber quais são os requisitos do seu programa para que ele possa ser executado corretamente. Cada programa e fluxo de trabalho possui requisitos exclusivos, portanto, recomendamos que você determine quais recursos você precisa antes de se sentar para escrever seu script.
Lembre-se de que, embora aumentar a quantidade de recursos de computação solicitados possa diminuir o tempo necessário para executar seu trabalho, também aumentará a quantidade de tempo que seu trabalho gasta aguardando na fila. Você pode solicitar os recursos de que precisa, mas esteja ciente de que outros pesquisadores também poderão usar esses recursos.
Após ter construído o script de execução com todas basta chama-lo utilizando o comando sbatch como mostra o exemplo abaixo:
[usuario@padufc ~]$ sbatch meuScript.srm
Se o script estiver correto haverá uma saída que indica o ID do job. Por exemplo:
[usuario@padufc ~]$ sbatch meuScript.srm
Submitted batch job 987654
A maioria das especificações de um job pode ser vista através do comando scontrol show job idDoJob . Mais detalhes sobre o trabalho, incluindo o script do trabalho, podem ser vistos adicionando o sinalizador -d . Um usuário não consegue ver o script do trabalho de outro usuário.
[usuario@padufc ~]$ scontrol show job 987654
O Slurm captura e relata o código de saída do script do job (tarefas sbatch), bem como o sinal que causou o término da execução.
O registro de um trabalho permanece na memória de Slurm por 5 minutos após a conclusão. O comando scontrol show job retornará “Invalid job id specified” para um trabalho que foi concluído há mais de 5 minutos. Nesse ponto, é necessário utilzar o comando sacct -j idDoJob para recuperar o registro da tarefa do banco de dados Slurm. Por Exemplo
[usuario@padufc ~]$ sacct -j 987654
Se seu Job estiver em execução ou aguardando na fila, você poderá cancelar o trabalho usando o comando scancel idDoJob . Use o comando squeue se você não souber o ID do Job. Por exemplo:
[usuario@padufc ~]$ scancel 987654