Guia rápido de submissão ************************ A submissão de *jobs* pode ser realizado por dois comandos do gerenciador do cluster: ``srun`` e ``sbatch``. O comando ``srun`` executa na linha de comando e é bloqueante, equanto o comando ``sbatch`` executa um arquivo de configuração e não é bloqueante. .. contents:: :depth: 4 Principais parametros de submissão: =================================== * ``-p|--partition nome`` Especifica o nome da partição que o *job* será executado. * ``-t|--time 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”. * ``-c|--cpus-per-task`` Especifica a quantidade de core/threads o seu programa vai utilizar. * ``--mem tamano unidade`` Especifica quantidade de memória seu programa vai utilizar. * ``-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. * ``–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`` ou ``--output arquivoSaida.txt`` Comando *srun* ============== | O comando ``srun`` submete um *job* para o escalanodador, por padrão esse comando é bloqueante. A sintaxe do comando é: | ``srun executavel`` Exemplo: Execução simples do *srun* ----------------------------------- O exemplo submete o programa ``/cluster/tests/omp/omp`` para fila de execução do cluster e será executado quando tiver recursos disponíveis. .. code-block:: console testem@c3hpc:~$ srun /cluster/tests/omp/omp Missing arguments Usage: /cluster/tests/omp/omp [-n|--nprocs] <cpus> [-t|--time] <time> Examples: Example 1: short options: To Execute program with 4 threads during 10 seconds: /cluster/tests/omp/omp -n 4 -t 10 Example 2: long options: To Execute program with 8 threads during 15 seconds: /cluster/tests/omp/omp --nprocs 8 --time 15 srun: error: node4: task 0: Exited with exit code 2 testem@c3hpc:~$ srun /cluster/tests/omp/omp --nprocs 4 -t 4 Time 4 Nproc 4 count: 258531857 count: 260249707 count: 262771821 count: 262113384 testem@c3hpc:~$ | Para especificar a quantidade de recurso que o *job* vai utilizar passe como argumentos antes do programa. | ``srun <argumentos do srun> executavel`` Exemplo: Execução com argumentos *srun* --------------------------------------- No exemplo abaixo, o executável é um programa em *openMP* que lança 4 threads, mas o srun só disponibiliza duas threads para ser executado. Portanto para que as quatros threads tenham aceso a 4 nucleo de processamento é necessário passar o argumento ``--cpus-per-task 4``. .. code-block:: testem@c3hpc:~$ srun --cpus-per-task 2 --mem 16G --partition maratona /cluster/tests/omp/omp --nprocs 4 -t 60 Time 60 Nproc 4 count: 430357224 count: -63444304 count: -21866144 count: -33171848 testem@c3hpc:~$ Comando *sbatch* ================ | O comando *sbatch* recebe como argumento um arquivo com as especificações do *jobs* que será executado. Sbatch é 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. | ``#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. .. code-block:: bash #!/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`` Modelo de arquivo *sbatch* --------------------------- .. code-block:: bash #!/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 | É possível sobrescrever os valores que estão no scripts pela linha de comando. Exemplo: | ``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. 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`` .. note:: O **jobid** pode ser obitido através do comando **squeue**