Mudanças

Ir para navegação Ir para pesquisar

Slurm - Veredas

7 004 bytes adicionados, 16h57min de 11 de junho de 2019
sem sumário de edição
O [https://slurm.schedmd.com/ '''''Slurm Workload Manager'''''] (anteriormente conhecido como ''Simple Linux Utility for Resource Management'' ou SLURM), ou Slurm, é num escalonador de tarefas gratuito e de código aberto para Linux e kernels similares ao Unix, usado por muitos dos supercomputadores e clusters de computadores do mundo. O Slurm Workload Manager possui três funções principais:
* alocar nós computacionais para acesso exclusivo e/ou não-exclusivo (compartilhado) aos usuários por um determinado período de tempo necessário para executar as tarefas computacionais submetidas (''jobs'').
* oferece um ambiente integrado que permite executar e monitorar em tempo real as tarefas lançadas nos nós computacionais alocados.
* gerencia a fila de submissão, arbitrando conflitos entre os pedidos de recursos computacionais.
|providencia a integração de toda a informação e disponibiliza-a através de uma interface gráfica.
|}
<br/>
Uma mnemônica muito útil é lembrar que todos os comandos do SLURM começam pela letra s. Todos os comandos possuem manuais que podem ser acessados online via linha de comando, '''man <comando>'''
 
Exemplo com o comando '''sbatch''' :
<pre class="bash">
[test3@veredas0 ~]$ man sbatch
</pre>
Em geral a grande maioria dos usuários precisa familiarizar-se com três comandos básicos do SLURM: '''sbatch, squeue e scancel'''. Assim como no PBS Pro, a submissão de uma tarefa envolve a elaboração de um script shell (em geral em bash) que possui no seu preâmbulo diretrizes específicas do SLURM. Essas diretrizes começam com a palavra-chave '''#SBATCH''' (o análogo da palavra-chave '''#PBS''' para o PBS Pro). No corpo do script é então chamado o executável do programa com os seus respectivos parâmetros.
 
== Submissão de tarefas computacionais ==
 
=== Filas de submissão ===
No UNIVERSO do SLURM o conceito de '''filas''' envolve a noção de partição de nós computacionais em grupos. Esses grupos não são necessariamente disjuntos (nós podem participar de mais de uma partição) e podem ser solicitados de acordo com a especificação de recursos do sistema (tempo de cpu, memória, etc). Para respeitar a herança do PBS Pro iremos nos referir indistintamente aos termos '''filas''' e '''partições'''.
 
O cluster BULL-Veredas possui no momento três filas de submissão definidas apenas pelo recurso '''walltime''':
* partição '''full''': nós '''veredas[12-107]''' sem restrição de tempo.
* partição '''short''': nós '''veredas[2-11]''' máximo 1 hora.
 
O usuário poderá listar a qualquer momento os recursos oferecidos por cada partição com o seguinte comando:
 
<pre class="bash">
[test3@veredas0 ~]$ scontrol show partitions
PartitionName=full TotalNodes=96 TotalCPUs=768 RootOnly=NO
Default=YES Shared=NO Priority=1 State=UP MaxTime=UNLIMITED Hidden=NO
MinNodes=1 MaxNodes=UNLIMITED DisableRootJobs=NO AllowGroups=ALL
AllocNodes=ALL
Nodes=veredas[12-107] NodeIndices=10-105 DefaultTime=NONE
 
PartitionName=short TotalNodes=10 TotalCPUs=80 RootOnly=NO
Default=NO Shared=NO Priority=1 State=UP MaxTime=01:00:00 Hidden=NO
MinNodes=1 MaxNodes=UNLIMITED DisableRootJobs=NO AllowGroups=ALL
AllocNodes=ALL
Nodes=veredas[2-11] NodeIndices=0-9 DefaultTime=NONE
</pre>
ou através do seguinte comando,
 
<pre class="bash">
[test3@veredas0 ~]$ sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
full* up infinite 96 idle veredas[12-107]
short up 1:00:00 9 idle veredas[2,4-11]
short up 1:00:00 1 down veredas3.
</pre>
 
Para racionalizar a utilização de recursos é conveniente que o usuário respeite a real demanda de sua tarefa e submeta seu script à partição mais apropriada, ou seja, ''jobs'' de curta duração (< 1 hora) na partição '''short'''. Caso contrário, pode correr o risco de a sua solicitação permanecer por muito tempo na fila de espera.
 
O estado dos ''jobs'' submetidos ou em execução poderá também ser examinado no SLURM através do comando '''squeue''', tal como era feito no PBS Pro com o comando ''qstat'':
 
<pre class="bash">
[test3@veredas0 ~]$ squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
179 short HelloWor test3 R 0:02 2 veredas[4-5]
</pre>
<br/>
<div class="aviso">
'''Aviso:''' Os exemplos de scripts de submissão que se seguem são para propósitos ilustrativos e representam ''templates'' que os usuários poderão adaptar conforme as suas necessidades específicas.
</div>
 
=== Tarefas sequenciais ===
Executar um ''job'' sequencial é bastante simples. Basta requisitar a duração necessária para executar a tarefa. Qualquer tarefa puramente seqüencial, que não utiliza MPI ou ''threads'', irá usar necessariamente '''um core apenas''' do nó computacional.
 
<syntaxhighlight lang="Bash">
#!/bin/bash
#SBATCH --job-name="TESTJOB"
#SBATCH --ntasks=1
#SBATCH --time=01:00:00
./a.out > OUTFILE
</syntaxhighlight>
Por padrão o ''output'' do ''script'' acima será redirecionado para um arquivo do tipo ''slurm-'''XXXX'''.out'', onde '''XXXX''' é o número do job que foi atribuído pelo SLURM. Este arquivo de ''output'' estará localizado no diretório de onde foi feita a submissão. O interessante a notar, e a que nos referiremos mais adiante (ver), é de que este arquivo é criado no instante da execução do ''script'' e o seu conteúdo aumenta à medida que o programa vai sendo executado. Remover este arquivo antes da finalização do job acarreta portanto perda total do output da tarefa. Diferentemente no PBS Pro os arquivos de output só eram criados na área do usuário depois de o job finalizar. É possível especificar um nome para o arquivo de output fazendo uso da diretriz '''''#SBATCH --output=meu_job.out'''''. O mesmo vale para o arquivo de erro, '''''#SBATCH --error=meu_job.err'''''.
'''SRUN''' - submete na linha === Tarefas paralelas (MPI) ===O exemplo seguinte representa a submissão de comando um job para execução.----''job'SBATCH''' - submete scripts shell paralelo MPI que foi compilado com o compilador proprietário da BULL (eg. bashMPI BULL) para a fila de espera do SLURM.----'''SALLOC: ''' mpicc -DALIGNED - reserva recursos do cluster (tempo de cpu, memória, quantidade de nós, etc) para a execução de uma tarefa computacionalc hello.c ----o hello.o'''SBCAST; ''' mpicc hello.o - para transmissão de um arquivo para todos os nós que foram alocados para um determinado jobo hello.----x'''SCANCEL''' - para cancelar um job . Nesta situação permitimos que esteja sendo executado ou que ainda esteja o SLURM se gerencie não só da alocação dos recursos, mas também da execução do programa e da inicialização das comunicações na fila de espera.----'''SQUEUE''Infiniband' - para monitorar o estado dos jobs nas diversas filas de espera do SLURM.----'''SINFO''' - para monitorar o estado global das partições configuradas (filas).----através do comando '''SVIEWsrun''' - providencia a integração de toda a informação e disponibiliza-a através de uma interface gráfica.----
<syntaxhighlight lang="Bash">#!/bin/bash#SBATCH -J HelloWorld#SBATCH --ntasks 16#SBATCH --time 00:30:00#SBATCH --partition shortsource /opt/mpi/mpibull2-1.3.9-18.s/share/mpibull2.shmpibull2_devices -d=ibmr_gen2echo ’------------------------------------------’ldd ./hello.xecho ’------------------------------------------’sleep 15 srun hostname | sort srun ./hello.x  </syntaxhighlight>Segue o resultado da execução deste script: <pre class="bash">[test3@veredas0 SLURM]$ cat slurm-188.out------------------------------------------ libmpi.so => /opt/mpi/mpibull2-1.3.9-18.s/lib/libmpi.so (0x00002b1b48343000) librt.so.1 => /lib64/librt.so.1 (0x00000038d1a00000) libdl.so.2 => /lib64/libdl.so.2 (0x00000038d0e00000) libpmi.so => /usr/lib64/libpmi.so (0x00002b1b486a0000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00000038d1200000) libuuid.so.1 => /lib64/libuuid.so.1 (0x00000038e1800000) libm.so.6 => /lib64/libm.so.6 (0x00000038d0a00000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000038dba00000) libc.so.6 => /lib64/libc.so.6 (0x00000038d0600000) libmpidev.so => /opt/mpi/mpibull2-1.3.9-18.s/lib/drivers/ibmr_gen2/libmpidev.so (0x00002b1b488a7000) /lib64/ld-linux-x86-64.so.2 (0x00000038d0200000) libslurm.so.20 => /usr/lib64/libslurm.so.20 (0x00002b1b48ba6000) libibverbs.so.1 => /usr/lib64/libibverbs.so.1 (0x00002b1b48e66000) libsvml.so => /opt/intel/Compiler/11.1/069/lib/intel64/libsvml.so (0x00002b1b49074000)------------------------------------------veredas4veredas4veredas4veredas4veredas4veredas4veredas4veredas4veredas5veredas5veredas5veredas5veredas5veredas5veredas5veredas5Hello MPI: processor 5 of 16 on veredas4Hello MPI: processor 15 of 16 on veredas5MPIBull2 1.3.9-s (Astlik) 20091113-1606 MPI_THREAD_FUNNELED (job 188) (device gen2)Hello MPI: processor 0 of 16 on veredas4Hello MPI: processor 1 of 16 on veredas4Hello MPI: processor 2 of 16 on veredas4Hello MPI: processor 3 of 16 on veredas4Hello MPI: processor 4 of 16 on veredas4Hello MPI: processor 7 of 16 on veredas4Hello MPI: processor 8 of 16 on veredas5Hello MPI: processor 6 of 16 on veredas4Hello MPI: processor 9 of 16 on veredas5Hello MPI: processor 10 of 16 on veredas5Hello MPI: processor 11 of 16 on veredas5Hello MPI: processor 12 of 16 on veredas5Hello MPI: processor 13 of 16 on veredas5Hello MPI: processor 14 of 16 on veredas5</pre>=== Tarefas paralelas com ''threads'' (MPI+OpenMP) = Variáveis de ambiente do Slurm ==
== Submissão de jobs ==
== Verificar Status ==
=== Jobs Paralelos (MPI) ===
<br/>
=== Jobs Paralelos (MPI-multithreded) ===
=== Jobs Interativos ===
<br/>
 
 
 
== Variáveis de ambiente do Slurm ==
 
== Submissão de jobs ==
 
== Verificar Status ==
== Remover jobs da fila ou em execução ==

Menu de navegação