Mudanças

Ir para navegação Ir para pesquisar

Slurm - Veredas

6 479 bytes adicionados, 12h18min de 14 de junho de 2019
sem sumário de edição
srun ./hello.x
 
 
</syntaxhighlight>
Segue o resultado da execução deste script:
</pre>
=== Tarefas paralelas com ''threads'' (MPI+OpenMP) ===
Cada nó computacional do cluster BULL da UFMG possui '''2 quad-cores''' totalizando '''8 ''cores'''''. Mostramos a seguir um exemplo de submissão de uma tarefa paralela (MPI+OpenMP) que utiliza a Infiniband, cujo executável foi compilado com o '''Intel MPI''' e que requisita '''8 processos''', sendo que cada processo é um conjunto de '''4 ''threads'''''.
 
Repare que propositalmente, e contráriamente ao caso anterior, a ferramenta '''[https://docs.par-tec.com/html/psmpi-userguide/rn01re01.html mpiexec]''' foi utilizada em vez do '''srun''' para lançar os processos MPI. O SLURM foi então utilizado apenas para reservar os recursos necessários.
<syntaxhighlight lang="Bash">
#!/bin/bash
#SBATCH -J HelloWorld
#SBATCH --partition short
#SBATCH --nodes 4
#SBATCH --ntasks 8
#SBATCH --cpus-per-task 4
#SBATCH --time 00:30:00
 
source /opt/intel/impi/4.0.0/bin64/mpivars.sh
 
export OMP_NUM_THREADS=4
export I_MPI_PMI_LIBRARY=/usr/lib64/libpmi.so
export I_MPI_FABRICS=dapl
 
sleep 20
 
echo ’------------------------------------’
ldd ./hello
echo ’------------------------------------’
srun hostname -s | sort -u >slurm.hosts
 
 
mpdboot -n $SLURM_NNODES -f slurm.hosts -r ssh
mpiexec -perhost 2 -np 8 ./hello
mpdallexit
</syntaxhighlight>
O diagrama abaixo,Figura 1, procura ilustrar a forma como os processos MPI e seus respetivos ''threads'' foram distribuídos nos '''32 cores''' dos quatro nós requisitados. A descrição detalhada de cada diretriz '''#SBATCH''' poderá ser consultada online através do comando man sbatch. A descrição de cada flag do mpiexec também pode ser obtida através de '''/opt/intel/impi/4.0.0/bin64/mpiexec -help'''.
 
[[image:DiagramaTheadsMPI ClusterVeredas.png|frame|center|'''Figura 1''' - Diagrama com processos MPI e distribuição das '''''threads''''' em dois nós computacionais e 32 cores]]
<br/>
==Comparação entre o SLURM e o PBS Pro = Jobs Paralelos =Segue alguns comandos essenciais do SLURM e seus equivalentes no PBS Pro. {|class="wikitable" width=80% border=1 cellpadding=35px !|Comando Slrum!|Descrição do comando!|Comando PBS Pro|-|'''srun'''|submete um comando via SLURM no modo interativo.|'''qsub -I'''|-|'''sbatch'''|submete um ''script shell''.|'''qsub'''|-|'''squeue'''|lista todos os ''jobs'' (MPIem execução ou no modo de espera) nas filas.|'''qstat'''|-multithreded|'''scontrol'''|modifica o estado de um ''job'' (maioria só é permitida ao ''root'') .|'''qalter'''|-|'''scancel'''|cancela um ''job'', quer em execução ou na fila de espera.|'''qdel'''|} === Variáveis de ambiente ===Existem também algumas diferenças no tocante às variáveis de ambiente como ilustra a tabela abaixo:{|class="wikitable" width=40% border= 1 cellpadding=35px !|Comando Slrum!|Descrição do comando|-|$SLURM_JOB_ID|$PBS_JOBID|-|$SLURM_JOB_NAME|$PBS_JOBNAME|} O SLURM não possui o equivalente à variável '''$PBS_NODEFILE''' que aponta para o arquivo que contém os nomes dos nós computacionais reservados para a execução do ''job''. Contudo, quando necessário, é possível criar manualmente esse tipo de arquivo com o comando '''srun''': <brsyntaxhighlight lang="Bash">#!/bin/bash -x HOSTFILE=/tmp/hosts.$SLURM_JOB_ID srun hostname -s >$HOSTFILE if [ -z "$SLURM_NPROCS" ] ; then if [ -z "$SLURM_NTASKS_PER_NODE" ] ; then SLURM_NTASKS_PER_NODE=1 fi SLURM_NPROCS=$(( $SLURM_JOB_NUM_NODES * $SLURM_NTASKS_PER_NODE ))fi /path/to/mpirun -machinefile $HOSTFILE -np $SLURM_NPROCS programa.x
=== Jobs Paralelos (threadsrm /OpenMP) === tmp/hosts.$SLURM_JOB_ID<br/syntaxhighlight>
=== Múltiplas tarefas simultâneas em um único job Diretório de execução === <br/>Uma outra diferença importante que distingue o '''SLURM''' do '''PBS Pro''' é que enquanto no primeiro escalonador a tarefa batch é executada automáticamente no diretório de onde foi submetido o seu script, o segundo precisa explicitamente que seja introduzida a seguinte linha:
<syntaxhighlight lang=== Jobs Interativos === "Bash">#!/bin/bash -x...cd $PBS_O_WORKDIR...<br/syntaxhighlight>
As variáveis de ambiente que são definidas durante uma sessão shell do '''SLURM''' são automáticamente exportadas para o ''job batch'' em todos os nós computacionais no instante em que o script entra em execução. Já no '''PBS Pro''' é necessário garantir isso com a introdução da diretriz:
<syntaxhighlight lang="Bash">
#!/bin/bash -x
...
#PBS -V
...
</syntaxhighlight>
== Variáveis = Output ===O '''SLURM''' apresenta ainda uma vantagem considerável e muito útil para aqueles usuários que precisam inspecionar numéricamente e em tempo real a evolução do seu programa, como por exemplo, a convergência de uma determinada iteração: os arquivos de saída '''stdout''' e de ambiente erro, '''stderr''' (ver as flags do Slurm ==SLURM) , são criados automáticamnte no diretório de onde foi submetido o script e vão crescendo gradualmente de tamanho à medida que a simulação evolui no tempo. O '''PBS Pro''' mostra-se insuficiente neste quesito: somente no final da execução da tarefa é que os arquivos de saída são escritos no diretório destinado.
== Submissão = Diretrizes de jobs submissão ===Finalmente com o intuito de auxiliar os usuários na migração dos seus scripts de submissão do '''PBS Pro''' para o '''SLURM''' apresentamos a seguinte tabela comparativa das diretrizes de submissão:
{|class="wikitable" width= Verificar Status 60% border=1 cellpadding=35px !|PBS Pro!|Slurm|-|#PBS -N job_name|#SBATCH –job-name=”job_name” ou #SBATCH -J job_name|-|#PBS -l nodes=n|#SBATCH –nodes=n|-|#PBS -l walltime=HH:MM:SS|#SBATCH –time=HH:MM:SS|-|#PBS -l min_walltime=HH:MM:SS|#SBATCH –time-min=HH:MM:SS|-|#PBS -q <queue>|#SBATCH –partition=<queue>|-|#PBS -l mppwidth=n|#SBATCH –ntasks=n|-|#PBS -l mppnppn=N|#SBATCH –ntasks-per-node=N|-|#PBS -l mppdepth=d|#SBATCH –cpus-per-task=d|-|#PBS -l mppmem=mM|#SBATCH –mem=m|-|#PBS -l mppnodes=<nid-list>|#SBATCH –nodelist=<nid-list>|-|#PBS -W group_list=a_group|#SBATCH –account=a_group|-|#PBS -o /path/to/stdout|#SBATCH –output=/path/to/stdout (pode ser usado %j para jobid)|-|#PBS -e /path/to/stderr|#SBATCH –error=/path/to/stderr|-|#PBS -V|não é necessário|}
Devemos também ressaltar que as diretrizes do SLURM podem ser especificadas na linha de comando em vez de colocadas no ''script'':
<pre class="bash">
[test3@veredas0 ~]$ sbatch --job-name="meu job" --ntasks=N ...
</pre>
<div class== Remover jobs da fila ou em execução =="aviso">'''Aviso:''' Para uma informação mais detalhada sobre o escalonador '''SLURM''' o usuário poderá baixar e consultar o arquivo [https://www.lcc.ufmg.br/sites/default/files/manuais/BullXClusterSuite-UserGuide.pdf Bullx cluster suite: User’s Guide]. Para quem estiver interessado o [https://www.cscs.ch Swiss National Supercomputing Centre] disponibiza um video no qual são feitas várias demonstrações de como o usuário pode interagir com o '''SLURM'''.</div>

Menu de navegação