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') ###################"