Voltar para Coaraci

Exemplo de submissão de jobs

Exemplo de submissão pra fila par48-i ou par48-x

#!/bin/bash 

#SBATCH -n 48 
#SBATCH --job-name nome_do_job 

### Nesta fila é permitido apenas 1 node
#SBATCH --nodes 1  

### alterar a fila de acordo com seu perfil (par48-x ou par48-i)
#SBATCH --partition par48-?
#SBATCH -o out.txt
#SBATCH -e err.txt
cd $SLURM_SUBMIT_DIR 

#### Prepare o ambiente com os devidos módulos ######### 
# hwloc faz parte das variáveis de ambiente gerais do cluster
module load hwloc
module load gnu12
module load openmpi4 

#### Exporte as variaveis relevantes para o job ######## 
export OMP_NUM_THREADS=1 

#### Execução do job #### 
mpirun -np $SLURM_NTASKS prime 200000 > teste.out

● A primeira linha informa ao SLURM que o Shell escolhido pelo usuário para rodar o job é o Bash (“/bin/bash”);

● A segunda linha indica o número de núcleos para este job

● A terceira linha indica o nome do seu job

● A variável $SLURM_SUBMIT_DIR tem por valor padrão o diretório onde o job foi submetido. Logo após seguem os comandos para a execução do job propriamente dito;

● Variáveis de ambiente necessárias à execução do job devem ser declaradas/exportadas antes do job.

Exemplo da submissão de um batch job:

[vhpc@coaraci ~]$ sbatch script.slurm

Exemplo de submissão pra fila par480-i ou par480-x

#!/bin/bash 

#SBATCH -n 48 
#SBATCH --job-name nome_do_job 

### Nesta fila são permitidos o uso de 2 à 10 nodes
#SBATCH --nodes 10

### alterar a fila de acordo com seu perfil (par480-x ou par480-i)
#SBATCH --partition par480-?
#SBATCH -o out.txt
#SBATCH -e err.txt
cd $SLURM_SUBMIT_DIR 

#### Prepare o ambiente com os devidos módulos ######### 
# hwloc faz parte das variáveis de ambiente gerais do cluster
module load hwloc
module load gnu12
module load openmpi4 

#### Exporte as variaveis relevantes para o job ######## 
export OMP_NUM_THREADS=1 

#### Execução do job #### 
mpirun -np $SLURM_NTASKS prime 200000 > teste.out

Exemplo da submissão de um batch job:

[vhpc@coaraci ~]$ sbatch script.slurm

Exemplo  de submissão pra fila gpu-i ou gpu-x

#!/bin/bash 

#SBATCH --nodes=1
#SBATCH --ntasks-per-node=10
#SBATCH --job-name=gpu_stress
### alterar a fila de acordo com seu perfil (gpu-x ou gpu-i)
#SBATCH -p gpu-i
#SBATCH --time 2:00:00
#SBATCH --gpus 3
#SBATCH -o gpu_stress.o
#SBATCH -e gpu_stress.e

# Intel oneAPI
module purge
module load cuda

# hwloc
module load hwloc

export I_MPI_DEBUG=5
export I_MPI_PIN=1
export I_MPI_PIN_DOMAIN=numa

# Fabrics control
module load ucx
export I_MPI_FABRICS=ofi
export FI_PROVIDER=mlx
export I_MPI_OFI_PROVIDER=${FI_PROVIDER}

# OpenMP
export OMP_NUM_THREADS=24
export MKL_NUM_THREADS=24

time srun ./gpu_burn -tc 1750

Exemplo 3 – fila paralela

#!/bin/bash 

#SBATCH -n 48 
#SBATCH --job-name=teste 

### Nesta fila são permitidos o uso de 11 à 28 nodes
#SBATCH --nodes=20
#SBATCH --partition=paralela
#SBATCH -o out.txt
#SBATCH -e err.txt

cd $SLURM_SUBMIT_DIR 

#### Prepare o ambiente com os devidos módulos ######### 
# hwloc faz parte das variáveis de ambiente gerais do cluster
module load hwloc
module load gnu12
module load openmpi4 

#### Exporte as variaveis relevantes para o job ######## 
export OMP_NUM_THREADS=48 

#### Execução do job #### 
mpirun -np $SLURM_NTASKS prime 200000 > teste.out

 

Exemplo – Job interativo

É executado como um “batch job”, porém o terminal do usuário é conectado ao host de execução, similar a uma sessão de login. A partir daí o usuário envia as opções do script de job como comandos individuais, o que facilita ao usuário depurar um script com problemas.

Para submeter um job interativo basta executar o comando abaixo:

[vhpc@coaraci ~]$ srun -p par48-? -N1 -n48 --pty bash

Para encerrar o job interativo, basta sair do terminal com o comando “exit”.

Outras opções podem ser utilizadas no comando “srun”, referência completa (em inglês): [https://slurm.schedmd.com/srun.html].

Exemplo 4

O job abaixo é um exemplo de execução do software em 16 núcleos de 1 nó e walltime de 30 horas:


#!/bin/bash 
## 
## nodes = quantidade de nodes 
#SBATCH --nodes=1 
## 
## ntasks-per-node = quantidade de processos por node 
#SBATCH --ntasks-per-node=16 
## 
## time = quantidade de tempo 
#SBATCH --time=30:00:00 
## 
## Nome do job . Aparece na saida do comando 'squeue' . 
## E recomendado, mas nao necesssario, que o nome do job 
## seja o mesmo que o nome do arquivo de input 
#SBATCH --job-name=<Job_name> 
## 
## Consulte <https://slurm.schedmd.com/sbatch.html> para mais informacoes sobre ## as diretivas acima. 

echo -e "\n## Job iniciado em $(date +'%d-%m-%Y as %T') #####################\n" 

## Variavel com o diretorio de scratch do job 
## Consulte <https://slurm.schedmd.com/sbatch.html#lbAH> para mais informacoes 
## sobre as variaveis de ambiente do SLURM. 
SCRATCH=/scratch/local 
WRKDIR=$SCRATCH/$SLURM_JOB_ID 


## O nome dos arquivos de input e output sao baseados no 
## nome do job (linha "#SBATCH --jobname=XX" acima).
## Observe que nao e obrigatorio esta forma de nomear os arquivos. 
INP=$SLURM_JOB_NAME".inp" 
OUT=$SLURM_JOB_NAME".out"


## O diretorio onde o job sera executado sera apagado, por padrao, ao
## final do mesmo. 
## Se desejar que nao seja apagado, substitua Y por N. 
APAGA_SCRATCH=Y 


## Informacoes do job impressos no arquivo de saida. 
echo -e "\n## Jobs ativos de $USER: \n" 
squeue -a --user=$USER
echo -e "\n## Node de execucao do job: $(hostname -s) \n" 
echo -e "\n## Numero de tarefas para este job: $SLURM_NTASKS \n" 

######################################### 
##------- Inicio do trabalho ----- # 
######################################### 
## Configura o ambiente de execucao do software.
module load @SOFTWARE_MODULE@ 


## Informacoes sobre o ambiente de execucao impressos no arquivo de saida. 
echo -e "\n ## Diretorio de submissao do job:  $SLURM_SUBMIT_DIR \n" 
echo -e "\n ## Diretorio de scratch do job:    $WRKDIR \n" 
echo -e "\n ## Arquivo de input:               $INP \n" 

## Cria o diretorio de scratch para o job. 
mkdir -p $WRKDIR 

## Transfere os inputs e arquivos necessarios para o diretorio de scratch 
cd $SLURM_SUBMIT_DIR 
cp $INP $WRKDIR/ 
cd $WRKDIR 

## Execucao do software 
mpirun ./mysoftware < $INP > $OUT 

## Copia o diretorio de scratch para o diretorio original do job. 
cp -r $WRKDIR/ $SLURM_SUBMIT_DIR/ 

## Apaga o diretorio de scratch do job. 
if [ x"$APAGA_SCRATCH" = x"Y" ]; then 
    rm -rf $WRKDIR 
else 
    echo -e "\nO diretorio \e[00;31m$WRKDIR\e[00m deve ser removido manualmente" 
    echo -e "para evitar problemas para outros jobs e/ou usuarios. \n" 
fi 

echo -e "\n ## Job finalizado em $(date +'%d-%m-%Y as %T') ###################"