MAPA DO SITE ACESSIBILIDADE ALTO CONTRASTE

LCAD

Laboratório de Computação de Alto Desempenho

CEFET-MG

Bash script

Última modificação: Quarta-feira, 3 de novembro de 2021

O cluster do CEFET-MG usa o gerenciador Slurm, que é responsável pelo escalonamento de jobs no cluster. Ele provê diversos comandos úteis para execução, manutenção e monitoramento destes jobs, objetivando tornar a execução de programas de forma paralela em um cluster quase tão simples quanto em um computador pessoal.

Termos

Alguns termos aparecerão com certa frequência a seguir, então é importante que o usuário tenha plena consciência do seus significados, são eles:

Job: Job(do inglês: ‘trabalho’) no Slurm representa um conjunto de um ou mais programas solicitado para execução no cluster.

● Partition: Partition(do inglês: ‘partição’) no Slurm representa um conjunto contendo um ou mais nodes.

● Node: Node(do inglês: ‘nó’) no Slurm representa uma máquina física com suas especificações técnicas.

Compilação

Com relação ao programa executável que irá rodar no cluster, na maioria dos casos você pode compilá-lo em seu próprio computador ou no cluster.

Se preferir compilá-lo no cluster, veja alguns exemplos de comandos abaixo, de acordo com a linguagem de programação utilizada.

javac programa.java
 g++ programa.c ­o nome_do_executavel

Depois, basta transferir o arquivo para o cluster. Veja o tutorial aqui.

Para visualizar a lista completa de compiladores disponíveis executando o comando:

module avail

Para carregar um módulo use:

module load module_name

Arquivo bash

Dentro da pasta onde se encontra o programa executável, crie um arquivo texto com as configurações de execução do job.

Atenção: Caso o arquivo seja criado no Windows, lembre-se de salvá-lo no formato UTF-8. Caso o arquivo seja criado no linux, normalmente esse já é o formato padrão, mas é recomendando conferir se foi salvo no codificação descrita.

Se você precise editar qualquer arquivo dentro do cluster, você pode usar os editores de texto via terminal, como o Vim e Nano.

Veja abaixo, um exemplo arquivo bash de configuração:

#!/bin/bash
#SBATCH --ntasks=1
#SBATCH --output=Job_%A.out
#SBATCH --error=Job_%A.err
#SBATCH --mail-user=teste@gmail.com
#SBATCH --mail-type=END
#SBATCH --partition=large

srun ./a.out

ntasks=n: representa a quantidade n de programas que irão rodar. Valores de n>1 são utilizados, principalmente, em programas que rodam em paralelo (usando mpi, por exemplo). Se seu programa for sequencial, basta manter ntasks=1. Para programas implementados em Java com threads, mantenha n=1 pois as threads irão rodar nos núcleos alocados pela variável cpus-­per-­task (o conteúdo desta variável será explicado abaixo.qos: é um conjunto de políticas de prioridades de tráfego e alocação de recursos implementadas pelo administrador do sistema a fim de garantir a qualidade do serviço para todos os usuários. O QoS no cluster é especificamente uma partição de tempo e quantidade de processos, e serve para limitar os recursos alocados por um mesmo usuário simultaneamente. A tabela abaixo mostra os QoS’s disponíveis, e seus limites:

output e error: representam os arquivos de saída e erro respectivamente, onde a variável %A recebe o id do job. Caso o usuário dispare mais de uma execução por job, ou seja, quando ntasks > 1, defina a configuração SBATCH array=1-n, onde n é o mesmo valor de n em ntasks e acrescente %a nas saídas para que assim os arquivos recebam também a numeração da execução, assim, a definição output= Job_%A_%a.out resulta em: 

#!/bin/bash
#SBATCH --ntasks=1
#SBATCH --array=1-10
#SBATCH --output=Job_%A_%a.out
#SBATCH --error=Job_%A_%a.err
#SBATCH --mail-user=teste@gmail.com
#SBATCH --mail-type=END
#SBATCH --partition=large

srun ./a.out

Job_123_1.out, Job_123_1.outJob_123_n.out

Se não for definido nenhum arquivo de saída, por padrão as saídas serão gravadas no arquivo slurm-job_id.out.

mail-­user: seu e-mail. O cluster poderá lhe enviar e-mails no início, no fim e na ocorrência de erros durante a execução do programa. Se não quiser receber e-mails, retire esta linha do arquivo. Caso não esteja recebendo os e-mails, verifique na caixa de spam.

­­mail­-type=ALL: indica que o cluster lhe enviará um e-mail nas seguintes situações: início, fim e erro do programa. Para enviar e-mails apenas no final, substitua o ALL por END. Se não quiser receber e-mails, retire esta linha do arquivo.

partition: indica a partição onde o programa irá executar. A principal característica de cada partição é a capacidade de processamento. Para conhecer as partições disponíveis digite o comando sinfo2.

Exemplo de saída
[cefet@cluster ~]$ sinfo2
PARTITION    CPUS(A/I/O/T)  GROUPS              TIMELIMIT
CLUSTER*     28/404/0/432   all                 infinite
large        4/252/0/256    cluster             infinite

A coluna PARTITION exibe o nome das partições existentes no cluster. Este nome será utilizado no momento em que o programa for submetido para execução no cluster.

A coluna CPUS exibe a quantidade de CPUs que estão sendo utilizadas (Allocated=28), disponíveis (Idle=404), outros (Other=0) e total (Total=432). Ao submeter um programa para executar no cluster, é importante verificar a quantidade de CPUs disponíveis. Se não houver CPUs disponíveis, o programa entrará em uma fila. A política de alocação de recursos é a FIFO (First In First Out). A coluna GROUPS exibe os grupos que podem utilizar uma determinada partição. A coluna TIMELIMIT exibe o tempo máximo que um programa pode rodar em uma determinada partição. Formato: dd­hh:mm:s

srun: Obtem a alocação para o arquivo informado, que no caso é o executável a.out.

Existe diversas outras especificações de execução que poder ser incluidos no arquivo bash, podendo serem facilmente consultadas pelos comandos man sbatch ou man srun. Aqui o usuário pode consultar uma tabela simplificada de alguns dos principais comandos.

Fonte: DECOM, LCAD