Instruções de Uso

Acessando o Cluster

O cluster pode ser acessado via ssh através do endereço: emailc3hpc.c3sl.ufpr.br

Para obter acesso, solicite um nome de usuário para os responsáveis pelo cluster.

Enviando arquivos e dados para serem processados no cluster

Ao executar uma aplicação no cluster, todos os arquivos necessários para execução devem estar presentes nos nodos. Para isso, basta que você copie os dados necessários para sua home dentro do cluster. Exemplo:

scp meuArquivo.bin nomeUsuario@c3hpc.c3sl.ufpr.br:./bin

O comando acima irá copiar o arquivo meuArquivo.bin para dentro do diretório /bin, que está dentro da sua home no cluster.

Sua home é automaticamente montada em todos os nodos do cluster, logo o arquivo copiado estará disponível a partir de qualquer nodo.

Utilizando Programas do Cluster

O cluster possui alguns programas compilados nativamente para o aumento de performance. Para visualizá-los execute o comando

module avail

Para poder utilizar o cuda versão 7.0, por exemplo, execute o comando

module load cuda/7.0

E para removê-lo, eventualmente para trocar a versão do programa

module unload cuda/7.0

Os comandos de load devem ser adicionados no script do job antes de utilizá-los, por exemplo

#!/bin/sh
#SBATCH -t 00:05:00
#SBATCH -n 2

module load cuda/7.0

srun $HOME/meuProgramaCUDA

Para mais informações

man module

Visualizando Informações

Uma vez logado no cluster, utilize o comando sinfo para visualizar as informações sobre os nodos e as partições existentes para a submissão de jobs.

Abaixo consta um exemplo de saída da execução do comando sinfo, onde:

  • PARTITION: exibe o nome das partições (filas) para submissão de jobs disponíveis. A partição marcada com * é a fila padrão de submissão.
  • AVAIL: up (funcionando) ou down (fora do ar).
  • TIMELIMIT: tempo limite que um job pode ficar em execução na partição, no formato dias-horas:minutos:segundos
  • NODES: Quantidade de nodos acessíveis na partição.
  • STATE: Estado da partição. Alguns valores possíveis: ALLOC, ALLOCATED, COMP, COMPLETING, DOWN, DRAIN, DRAINED, DRAINING, ERR, ERROR, FAIL, FUTURE, FUTR, IDLE, MAINT, MIX, MIXED, NO_RESPOND, NPC, PERFCTRS, POWER_DOWN, POWER_UP, RESV, RESERVED, UNK, and UNKNOWN
  • NODELIST: Lista de nodos associados a partição.
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
1h* up 1:00:00 6 idle node2-ib,node3-ib,node4-ib,node5-ib,node6-ib,node7-ib
1d up 1-00:00:00 6 idle node2-ib,node3-ib,node4-ib,node5-ib,node6-ib,node7-ib
7d up 7-00:00:00 6 idle node2-ib,node3-ib,node4-ib,node5-ib,node6-ib,node7-ib

O comando squeue pode ser utilizado para verificar a lista de jobs enviados ao cluster e suas respectivas partições.

Informações detalhadas sobre partições, jobs e configurações podem ser visualizadas através do comando scontrol

Exemplos:

scontrol show partition irá mostrar informações detalhadas sobre as partições.

scontrol show jobs irá mostrar informações detalhadas sobre os jobs.

Enviando Jobs ao Cluster

O comando srun pode ser utilizado para enviar uma tarefa a ser executada no cluster

O exemplo abaixo irá executar o programa meuPrograma que está localizado dentro do diretório bin

srun $HOME/bin/meuPrograma

Alguns parâmetros do srun:

-p PARTICAO: Especifica qual partição deverá ser requisitada

-t TEMPO: Especifica um tempo limite para a execução do job. Caso o tempo limite especificado seja maior que o tempo da partição, o job ficará com o estado pendente (PENDING), possivelmente para sempre. Formatos de tempo aceitos: “minutos”, “minutos:segundos”, “horas:minutos:segundos”, “dias-horas”, “dias-horas:minutos” e “dias-horas:minutos:segundos”.

-n NUM_PROCESSOS: Especifica o número de processos a serem iniciados.

-N NUM_NODOS: Especifica que deverão ser alocados pelo menos NUM_NODOS nodos para a execução do job, ou seja, cada nodo vai executar NUM_PROCESSOS dividido por NUM_NODOS.

–cpus-per-task=NCPUS: especifica que serão alocadas NCPUS para cada processo. Por padrão, cada processo é alocado para uma cpu, sendo assim, esse parâmetro pode ser especialmente útil para processos multithread.

–job-name=NOME: Especifica o nome do Job que será executado. Este nome irá aparecer juntamente com o id do job na listagem de jobs do sistema.

-e: especifica o redirecionamento do stderr. Exemplo: -e arquivoErros.txt

-o: especifica o redirecionamento do stdout. Caso -e não tenha sido especificado, stderr também será enviado para o arquivo especificado. Exemplo: -o arquivoSaida.txt

 

Uma opção mais comum é a utilização de um script, que contém as informações sobre o jobs que serão executados. No script, as opções de execução podem ser definidas utilizando-se o prefixo #SBATCH antes da opção. Exemplo: #SBATCH –time=1

Abaixo, um exemplo de script que roda a aplicação “meuPrograma” que está dentro do diretório bin. A aplicação irá executar por no máximo 7 dias e é solicitado 1 nodo para a execução.

 #!/bin/sh
 #SBATCH -p 7d
 #SBATCH -t 7-00:00:00
 #SBATCH -n 1
 srun $HOME/meuPrograma
 

Para submeter o script, salve-o como meuscript.sh, e execute-o utilizando o comando sbatch. Muitos dos parâmetros do comando srun também são válidos para o sbatch. Os parâmetros passados ao sbatch irão sobrescrever os parâmetros existentes dentro do script sendo executado. Exemplo do comando:

sbatch -o saida.txt meuscript.sh

Exemplo passando parâmetros

sbatch -o saida.txt -t 5-00:00:00 meuscript.sh

Note que o comando acima sobrescreve o parâmetro -t que já está presente no meuscript.sh. Isso fará com que o parâmetro no meuscript.sh seja ignorado, sendo assim, ao executar a linha acima, o tempo limite para a execução será de 5 dias. No entanto, recomenda-se que todos os parâmetros estejam dentro do script e que estes não sejam sobrecarregados pelo sbatch para facilitar a localização de erros e múltiplas execuções de um mesmo script.

Supondo que o “meuPrograma” necessite dos parâmetros par1, par2, par3, … para sua execução, estes podem ser enviados ao programa simplesmente inserindo os parâmetros após o nome do programa no script, da mesma forma como isso seria feito caso o programa estivesse sendo execudado via linha de comando. Exemplo de script para um programa Java, que recebe parâmetros:

 #!/bin/sh
 #SBATCH -p 1d
 #SBATCH -t 1-00:00:00
 #SBATCH -n 1
 srun java -Xmx6g -jar $HOME/meuPrograma.jar par1 par2 par3 ...
 

Modelo de Script de Submissão

Abaixo segue um exemplo contendo diversas opções. Recomenda-se que seja utilizado este modelo para execução de jobs no cluster (inclua ou remova parâmetros do exemplo de acordo com sua necessidade.)

 #!/bin/bash
 #SBATCH -t 1-10:00:00
 #SBATCH --cpus-per-task=NUM_CPUS_POR_PROCESSO
 #SBATCH -o ARQUIVO_DE_SAIDA
 #SBATCH --job-name=NOME_JOB
 #SBATCH -p PARTICAO_ONDE_SERA_EXECUTADO
 #SBATCH -n NUM_DE_PROCESSOS
 #SBATCH -N NUM_NODOS_NECESSARIOS
 srun $HOME/meuPrograma parametro1Programa parametro2Programa
 

Cancelando Jobs

Para cancelar um job que está rodando ou que está na fila para execução, utilize o comando scancel. Modo de uso:

scancel jobId

Obs.: O jobId pode ser obtido através do comando squeue.