Acessando o Cluster
O cluster pode ser acessado via ssh através do endereço:
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.