Tutorial QE: Criando Scripts de Submissão

5 minute read

Em geral, a melhor forma de submeter cálculos tanto no próprio computador quanto para clusters é a utilização de scripts de submissão. Esses scripts podem ser escritos em diferentes linguagens de programação, entretanto a que utilizaremos será a linguagem bash. Devido à sua simplicidade e integração direta com o ambiente linux, gerar scripts em bash facilitará muito nosso trabalho e permitirá a automatização de diversas tarefas simples, porém repetitivas e chatas.

Construindo o ambiente basico para o slurm

Todos os scripts de submissão que prepararemos serão feitos para submissão no slurm.

O Slurm Workload Manager, ou Slurm, é um programador de tarefas gratuito e de código aberto para kernels Linux e do tipo Unix, usado por muitos dos supercomputadores e clusters de computadores do mundo. Ele fornece três funções principais: alocamento exclusivo e/ou não exclusivo à recursos computacionais (nós de processamento) para usuários com uma duração de tempo específica; provém um framework para iniciar, executar e monitorar trabalhos (tipicamente trabalhos paralelos usando MPI) em um conjunto de nós alocados; gerenciamento de diversos trabalhos em um sistema de fila automatizado.

Um exemplo de script básico de submissão é construído segundo formato descrito abaixo e deve ser salvo com a extensão .sh (por exemplo com o nome script.sh).

#!/bin/bash

#SBATCH --nodes=1
#SBATCH --ntasks-per-node=4
#SBATCH --time=500:00:00
#SBATCH --job-name=basico

PREFIX="basico"
PSEUDO_DIR="/home/pseudo"
CALC="scf"
CMD_PW="mpirun -np 4 /home/interlab/qe-6.4.1/bin/pw.x -nk 1"

cat>$PREFIX.$CALC.in<<EOF
<<ARQUIVO DE INPUT DO CALCULO>>
EOF
$CMD_PW < $PREFIX.$CALC.in > $PREFIX.$CALC.out

A primeira linha desse script diz ao sistema operacional qual a linguagem de programação que estamos utilizando. No nosso caso, bash. Em seguida, as tags #SBATCH permitem configurarmos as opções de gerenciamento do slurm. Podemos selecionar o número de nós que queremos alocar, utilizando a opção –nodes. Podemos também selecionar o número de tarefas paralelas por nó, com a opção –ntasks-per-node. Em geral selecionamos o número de tarefas por nó de maneira compatível com o número de núcleos que o processador do nó possui. Podemos alocar um tempo máximo para o cálculo com a opção –time. Em geral, como não temos certeza de quanto tempo iremos precisar alocamos uma quantidade de tempo grande, como 500 horas por exemplo, ou até mais. Entretanto se tivermos uma boa noção do tempo do cálculo e se a fila estiver grande, convém diminuir o tempo alocado para uma quantidade ligeiramente maior do que o tempo que esperamos que o cálculo leve, pois o slurm dá preferência à jobs com menos tempo alocado na hora de gerenciar a fila. Por fim, a opção –job-name permite que configuremos um nome para o job. É importante que esse nome tenha uma relação direta com o job que estamos submetendo, pois é por ele que acompanharemos a fila.

Em seguida podemos ajustar algumas variáveis de ambiente para o cálculo. A variável PREFIX é basicamente o nome do cálculo.

É importante que o prefix seja bastante específico e reflita de forma clara o que está sendo feito naquele cálculo. Um exemplo de bom prefixo: Para um cálculo PBE com correção de grimme D3 para o grafeno, podemos utilizar o prefixo grafeno_PBE_D3. Nunca utilize espaços no prefixo!

É conveniente colocarmos uma variável com o diretório dos pseudopotenciais, PSEUDO_DIR=, e o tipo de cálculo que será feito, CALC=. Apesar de parecer desnecessário, veremos em breve que isso facilitará bastante nossa vida na hora de realizarmos cálculos sequenciais. Por fim iremos configurar o comando para a execução do Quantum ESPRESSO. Como desejamos rodar em vários processadores em paralelo começamos como o comando para o MPI, sistema que permite esse tipo de execução, com o comando mpirun. Dizemos o número de processos paralelos que desejamos rodar com a tag -np X, onde X \(\leq\) nodes * ntasks-per-node. Em seguida colocamos a localização de onde está compilado o programa pw.x do Quantum ESPRESSO e por último a tag -nk Y, onde Y = nodes.

O comando cat> inicia a criação do arquivo com o nome $PREFIX.$CALC.in e («) é o comando para informar que o nome do arquivo acabou. As tags EOF indicam o início e o fim do arquivo de input.

Por fim, temos o comando para a execução do pw.x, $CMD_PW, que recebe como input (<) o arquivo $PREFIX.$CALC.in e irá gerar como output (>) o arquivo $PREFIX.$CALC.out.

Por fim, para submeter o script basta digitar no terminal:

sbatch script.sh

Leave a comment