Melhorando o Script de Submissão
Nesta seção:
Esta seção detalha a construção de scripts de submissão robustos e eficientes, incorporando as melhores práticas e todos os recursos disponíveis no GridUnesp.
Opções do SBATCH
O SLURM oferece dezenas de diretivas para controlar a execução dos jobs. Abaixo as mais importantes:
Diretiva |
Abrev. |
Descrição |
|---|---|---|
|
|
Tempo máximo de execução (formato: |
|
|
Número de CPUs por processo (para threads/OpenMP) |
|
|
Número total de processos (para MPI) |
|
|
Número mínimo de nós |
|
Memória por nó (ex: |
|
|
Memória por CPU (ex: |
|
|
|
Arquivo para saída padrão (stdout) |
|
|
Arquivo para saída de erros (stderr) |
|
|
Nome do job (aparece no |
|
|
Partição ( |
|
Recursos genéricos, como GPUs ( |
|
|
Quando enviar e-mail ( |
|
|
Endereço de e-mail para notificações |
Exemplos:
#SBATCH -t 24:00:00 -c 4
#SBATCH --mem=16G
#SBATCH --output=job_%j.out
#SBATCH --mail-type=END,FAIL
#SBATCH --mail-user=joao@unesp.br
Dica
Use %j no nome do arquivo para incluir o Job ID automaticamente.
Script job-nanny
O job-nanny é um script essencial do GridUnesp que gerencia a transferência de dados entre o /home/ e as áreas de trabalho temporárias.
Por que usar job-nanny?
Evita sobrecarga no /home/ - Acesso direto ao /home/ durante a execução degrada o desempenho
Otimiza performance - Usa discos locais (
/tmp/ou/store/) que são muito mais rápidosGarante persistência - Copia resultados de volta ao final
Checkpoints automáticos - Salva progresso periodicamente
Aviso
O script job-nanny é reconhecido ao carregar o módulo gridunesp.
Quando o usuário faz login no cluster, esse módulo é carregado automaticamente.
Caso tenha usado o comando module purge, é preciso fazer
module load gridunesp
para que o job-nanny esteja disponível.
Variáveis Obrigatórias
O job-nanny exige a definição de duas variáveis:
export INPUT="arquivo1.dat arquivo2.dat diretorio_entrada/"
export OUTPUT="resultado.dat saida/"
INPUT: Arquivos/diretórios que serão copiados para a área de trabalho temporária
OUTPUT: Arquivos/diretórios que serão copiados de volta ao
/home/ao final
Variáveis Opcionais
Variável |
Padrão |
Descrição |
|---|---|---|
|
|
Local para salvar checkpoints |
|
10800 (3h) |
Intervalo entre checkpoints (segundos) |
|
0 |
Ativa modo verboso (1) para debug |
|
“false” |
Se “false”, usa |
|
“false” |
Se “true”, força uso do |
Exemplos de Uso do job-nanny
Exemplo 1: Job serial simples
#!/bin/bash
#SBATCH -J teste
#SBATCH -n 1
#SBATCH -t 01:00:00
export INPUT="entrada.dat"
export OUTPUT="resultado.dat"
module load python/3.9
job-nanny python script.py entrada.dat > resultado.dat
Exemplo 2: Job com múltiplos arquivos
#!/bin/bash
#SBATCH -J simulacao
#SBATCH -c 4
#SBATCH -t 24:00:00
export INPUT="parametros.in dados/ biblioteca.so"
export OUTPUT="saida.dat logs/"
module load gcc/10.2.0
job-nanny ./programa -i parametros.in -o saida.dat
Exemplo 3: Job com arquivos grandes
#!/bin/bash
#SBATCH -J big_data
#SBATCH -n 1
#SBATCH -t 12:00:00
export INPUT="dataset_grande.bin"
export OUTPUT="resultados/"
export LARGE_FILES="true" # Força uso do /store/
job-nanny ./processador dataset_grande.bin
Exemplo 4: Job com checkpoints frequentes
#!/bin/bash
#SBATCH -J long_job
#SBATCH -n 8
#SBATCH -t 20-00:00:00 # 20 dias
export INPUT="entrada.dat"
export OUTPUT="resultado_final.dat"
export CHECKPOINT="checkpoints/"
export WAIT_CHECKPOINT=3600 # Checkpoint a cada 1 hora
module load meu_software
job-nanny simular --restart checkpoints/
Escolha Entre /tmp/ e /store/
O job-nanny decide automaticamente onde executar:
Usa /tmp/ (rápido, local) quando:
Job usa apenas 1 nó (
-N 1)SHARED_FSnão está definido ou é"false"LARGE_FILESnão está definido ou é"false"
Usa /store/ (compartilhado) quando:
Job usa múltiplos nós (
-N > 1)SHARED_FS="true"LARGE_FILES="true"
Dica
Para jobs de 1 nó com arquivos muito grandes (>100 GB), use LARGE_FILES="true" para forçar o uso do /store/, que tem mais espaço disponível do que o /tmp/ do nó de processamento.
Sistema de Filas (Detalhado)
O tempo especificado determina automaticamente a partição:
Tempo solicitado |
Partição |
Prazo máximo de processamento |
|---|---|---|
Até 24 horas |
short |
24 horas |
Até 24 horas (especificando |
gpu |
24 horas (executado no servidor de GPU) |
Entre 24h e 7 dias |
medium |
7 dias |
Entre 7 e 30 dias |
long |
30 dias |
Acima de 30 dias |
(inválido) |
Job não será aceito |
Importante
Sempre especifique o tempo mais preciso possível. Jobs com tempo menor:
Têm prioridade maior na fila
Podem “encaixar” em janelas de recursos ociosos
Aumentam a eficiência do cluster para todos
Exemplos de Configuração de Tempo:
# 30 minutos
#SBATCH -t 30:00
# 12 horas e 30 minutos
#SBATCH -t 12:30:00
# 2 dias e 6 horas
#SBATCH -t 2-06:00:00
# 30 dias (máximo permitido)
#SBATCH -t 30-00:00:00
Informações sobre o Storage (Detalhado)
O GridUnesp possui três áreas principais de armazenamento, cada uma com características específicas:
Partição |
Capacidade |
Velocidade |
Persistência |
Uso recomendado |
|---|---|---|---|---|
|
120 TB |
Média |
Permanente |
Scripts, código, dados pequenos |
|
~180 GB/nó |
Muito rápida |
Temporária (apenas durante o job) |
I/O intensivo, arquivos temporários |
|
7 TB |
Média-baixa |
Temporária |
Arquivos grandes, dados compartilhados |
Partição /tmp/
O /tmp/ é um diretório local em cada nó de processamento. Suas principais características:
Velocidade: Altíssima (disco local SSD/HD)
Espaço: Limitado (~180 GB por nó)
Escopo: Visível apenas no nó onde o job está executando
Persistência: TEMPORÁRIA - arquivos são removidos ao final do job
Quando usar /tmp/:
Jobs que fazem muita leitura/escrita em disco
Dados temporários que podem ser recriados
Processamento que cabe no espaço disponível
Jobs de um único nó (padrão)
Exemplo de uso explícito do /tmp/ (já é o padrão):
#!/bin/bash
#SBATCH -J tmp_job
#SBATCH -N 1
#SBATCH -n 28
#SBATCH -t 24:00:00
export INPUT="dados_entrada/"
export OUTPUT="resultados/"
# job-nanny usará /tmp/ automaticamente (1 nó, sem flags)
job-nanny ./programa
Partição /store/
O /store/ é um sistema de arquivos compartilhado entre todos os nós:
Velocidade: Média
Espaço: Grande (7 TB)
Escopo: Visível em todos os nós
Persistência: TEMPORÁRIA (dados apagados após o término do job)
Quando usar /store/:
Jobs com múltiplos nós (MPI)
Arquivos de entrada/saída muito grandes (>100 GB)
Dados que precisam ser acessados por vários nós simultaneamente
Exemplo de job multi-nó (usa /store/ automaticamente):
#!/bin/bash
#SBATCH -J mpi_job
#SBATCH -N 4
#SBATCH -n 112
#SBATCH -t 72:00:00
export INPUT="dados_grandes/"
export OUTPUT="resultados_mpi/"
module load openmpi/4.1.5
job-nanny mpirun -n 112 ./programa_mpi
Exemplo forçando uso do /store/ em job de 1 nó:
#!/bin/bash
#SBATCH -J big_job
#SBATCH -N 1
#SBATCH -n 28
#SBATCH -t 48:00:00
export INPUT="dataset_500GB/"
export OUTPUT="resultados/"
export LARGE_FILES="true" # Força uso do /store/
job-nanny ./processador
Considerações Importantes
Nunca processe jobs diretamente no servidor access
Sempre defina INPUT e OUTPUT ao usar job-nanny
Estime corretamente o tempo necessário (jobs mais curtos têm prioridade)
Monitore seus jobs com
squeueescontrolLimpe arquivos temporários após a conclusão
Ver também
Processando Simulações - Conceitos básicos
Monitorando Jobs - Monitoramento avançado
Guia Completo de Armazenamento - Guia completo de storage
Boas Práticas - Recomendações gerais