Submetendo jobs na fila do cluster
Para mantermos organizado o ambiente computacional que compartilhamos com todo o Instituto, utilizamos o sistema Torque PBS Este sistema permite que todos os processos que precisam de recursos de processador e memória do cluster Superdome fiquem organizados em uma fila de processamento e de fácil monitoramento.
Arquivo PBS
Todo comando que precise de recursos de processamento e memória não pode ser rodado diretamente do terminal. O comando precisa estar primeiramente dentro de um arquivo .pbs
, cuja estrutura você pode verificar abaixo:
#PBS -l nodes=1:ppn=8
#PBS -N jellyfish
#PBS -o jellyfish.log
#PBS -e jellyfish.err
CORES=$[ `cat $PBS_NODEFILE | wc -l` ]
NODES=$[ `uniq $PBS_NODEFILE | wc -l` ]
printf "Inico: `date`\n";
TBEGIN=`echo "print time();" | perl`
printf "\n"
printf "> Executando demultiplexacao\n";
printf "> Rodando em $CORES nucleos, em $NODES nos\n"
cd $PBS_O_WORKDIR
##########INSIRA SEU COMANDO ABAIXO##########################
jellyfish count -C -m 31 -s 1000 -t 1 -o drUrtUren1.jf drUrtUren1.600.fasta
#############################################################
TEND=`echo "print time();" | perl`
printf "\n"
printf "Fim: `date`\n";
printf "Tempo decorrido (s): `expr $TEND - $TBEGIN`\n";
printf "Tempo decorrido (min): `expr $(( ($TEND - $TBEGIN)/60 ))`\n";
No exemplo acima, as primeiras linhas indicam os recursos que serão necessários para rodar o comando que você deseja executar.
Por exemplo, o programa jellyfish
será executado usando 8
threads. Isso é definido na linha abaixo:
#PBS -l nodes=1:ppn=8
Nas três linhas seguintes, são definidos o nome do job, onde deverá ser salvo o log do comando e onde deverá ser salvo os erros dados no comando:
#PBS -N jellyfish
#PBS -o jellyfish.log
#PBS -e jellyfish.err
Toda vez que você for rodar um comando, deverá alterar a linha abaixo (talvez você tenha percebido pela sutil descrição no arquivo):
jellyfish count -C -m 31 -s 1000 -t 1 -o drUrtUren1.jf drUrtUren1.600.fasta
As outras linhas são apenas comandos de controle do job e não devem ser alteradas.
Editando o arquivo PBS
Para editar o arquivo .pbs
, você pode usar o comando vim
. Com esse comando, você consegue editar o conteúdo do arquivo.
vim job_jellyfish.pbs
Após executar o comando, você precisa apertar a tecla i
(INSERT) pra poder editar o documento.
Ao terminar de fazer as edições necessárias, você precisa apertar a tecla ESC
, para sair do modo de edição.
Em seguida, digite a tecla de dois pontos :
e em seguida digite wq!
para indicar que você deseja salvar o documento e sair da edição.
Toda vez que você for rodar um comando dos softwares apresentados neste tutorial, você vai precisar submeter o job do comando para a fila de jobs do cluster Superdome com as instruções mostradas anteriormente.
Submetendo o arquivo PBS para a fila de jobs
Após ter editado o arquivo .pbs
com o comando que você deseja executar, você precisa submeter o job para uma fila de processamento.
No total, o cluster Superdome apresenta um total de 768 núcleos, divididos em três filas:
op1
: com 462 cores disponíveis;
op2
: com 236 cores disponíveis;
testes
: com 70 cores disponíveis;
Para submeter seu job para uma das filas acima, execute o comando qsub
abaixo:
qsub -q <fila> <arquivo.pbs>
Onde o parâmetro -q
indica a fila à qual o <arquivo.pbs>
deve ser submetido, por exemplo:
qsub -q op1 job_jellyfish.pbs
Recomendamos que durante este curso você utilize a fila op1
.
Consultando a fila de jobs submetidos
Caso você queira saber quais jobs estão sendo executados, quem está executando, quanto de recurso computacional está sendo utilizado e há quanto tempo o processo está sendoe executado, basta usar o comando qstat
:
qstat -a
Ao executar o comando acima, você vai ser capaz de verificar a fila de jobs submetidos até o momento e que estão rodando ou em pausa, como demonnstrado abaixo:
blmsvfhpc04.itv.local:
Req'd Req'd Elap
Job ID Username Queue Jobname SessID NDS TSK Memory Time S Time
--------------- -------- -------- ---------- ------ --- --- ------ ----- - -----
5444.blmsvfhpc* c0403 op1 snpArcher* 21701* 1 32 300gb -- R 354:3
5606.blmsvfhpc* 81041448 op2 fst 35108* 1 20 -- -- R 214:5
5646.blmsvfhpc* c0430 op2 construct 24737* 1 20 -- -- R 117:0
5753.blmsvfhpc* c0403 op1 fastq2bam* 28126* 1 64 -- -- R 01:58
No resultado do comando qstat -a
, podemos ter as seguintes informações:
Job ID
: Identificador do job submetido. Esse identificador é importante caso queira deletar um job da fila;
Username
: Matrícula do usuário que submeteu o job para a fila. Se você submeteu algum job, sua matrícula deve aparecer associada ao job submetido;
Queue
: Fila onde o job está submetido;
Jobname
: Nome do job que você configurou no arquivo .pbs
;
TSK
: Número de threads usadas no job submetido;
Req'd Memory
: Quantidade de memória reservada para o job;
S
: Status do job. Pode ser R (Running), E (error), H (hold) ou Q (queue);
Elap time
: Há quanto tempo em minutos o job está sendo executado.
Deletando um job específico
A numeração presente na coluna Job ID
pode ser usada para caso você deseje deletar um job da fila, com o comando qdel
. Para tal, você pode rodar o seguinte comando:
qdel 5753
Neste caso, o job de nome “fastq2bam” presente na fila de jobs seria deletado. Você só pode deletar um job que tenha sido submetido por você.