Usando o job-nanny
Nesta seção:
O job-nanny é um script essencial do GridUnesp que gerencia a transferência eficiente de dados entre o sistema de arquivos /home/ e as áreas de trabalho dos nós de processamento (/tmp/ ou /store/).
Importante
O uso do job-nanny é obrigatório para todos os jobs que realizam operações de leitura/escrita em disco.
Por Que Usar o job-nanny?
Protege o /home/ - Acesso intensivo ao /home/ durante a execução degrada o desempenho para todos
Otimiza performance - Usa discos locais (
/tmp/) muito mais rápidosGarante persistência - Copia resultados de volta ao final
Checkpoints automáticos - Salva progresso periodicamente
Limpeza automática - Remove arquivos temporários após o job
Como Funciona
Fluxo de Trabalho
1. Job submetido com sbatch
2. job-nanny copia INPUT do /home/ para área de trabalho (/tmp/ ou /store/)
3. Programa executado na área de trabalho
4. Checkpoints periódicos (opcional)
5. Ao final, OUTPUT copiado de volta para /home/
6. Área de trabalho é limpa
Variáveis Obrigatórias
O job-nanny exige a definição de duas variáveis de ambiente:
INPUT
Lista de arquivos e diretórios que serão copiados do /home/ para a área de trabalho.
export INPUT="arquivo1.dat arquivo2.dat diretorio_entrada/"
Exemplos:
# Um único arquivo
export INPUT="entrada.dat"
# Múltiplos arquivos
export INPUT="entrada.dat parametros.txt"
# Arquivos e diretórios
export INPUT="entrada.dat pasta_dados/ biblioteca.so"
# Usando wildcards (cuidado!)
export INPUT="*.dat dados/"
Dica
Havendo mais de um nome de arquivo/diretório de input, os nomes devem estar separados por espaço em branco.
OUTPUT
Lista de arquivos e diretórios que serão copiados da área de trabalho de volta para o /home/.
export OUTPUT="resultado.dat saida/"
Exemplos:
# Arquivo de saída específico
export OUTPUT="resultado.out"
# Múltiplos arquivos e diretórios
export OUTPUT="resultado.out logs/ graficos/"
# Todos os arquivos (cuidado com o tamanho!)
export OUTPUT="*"
# Arquivos com padrão específico
export OUTPUT="*.log *.dat resultados/"
Aviso
Atenção ao usar wildcards (*)
Usar * em INPUT/OUTPUT pode copiar muitos arquivos desnecessários e consumir muito tempo. Seja específico sempre que possível.
Variáveis Opcionais
Variável |
Padrão |
Descrição |
|---|---|---|
|
|
Local para salvar checkpoints (pode ser diferente de OUTPUT) |
|
10800 (3h) |
Intervalo entre checkpoints em segundos |
|
“false” |
Força uso do |
|
“false” |
Indica arquivos grandes (>100 GB), força uso do |
|
0 |
Ativa modo verboso (1) para debug |
|
Função personalizada para checkpoint (uso avançado) |
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.
Exemplos de Uso
Exemplo 1: Job Serial Simples
#!/bin/bash
#SBATCH -J simples
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 01:00:00
#SBATCH --mem=4G
export INPUT="entrada.dat"
export OUTPUT="resultado.dat"
module load python/3.9
job-nanny python processa.py entrada.dat > resultado.dat
Exemplo 2: Job com Múltiplos Arquivos
#!/bin/bash
#SBATCH -J multiplo
#SBATCH -N 1
#SBATCH -c 4
#SBATCH -t 06:00:00
export INPUT="parametros.in dados/ bibliotecas/"
export OUTPUT="saida.dat logs/"
module load meu_app
job-nanny ./simular -i parametros.in -o saida.dat
Exemplo 3: Job com Arquivos Grandes
#!/bin/bash
#SBATCH -J grande
#SBATCH -N 1
#SBATCH -n 28
#SBATCH -t 48:00:00
export INPUT="dataset_500GB.bin"
export OUTPUT="resultados/"
export LARGE_FILES="true" # Força uso do /store/
job-nanny srun ./processador dataset_500GB.bin
Exemplo 4: Job MPI (Múltiplos Nós)
#!/bin/bash
#SBATCH -J mpi
#SBATCH -N 4
#SBATCH --ntasks-per-node=28
#SBATCH -t 24:00:00
export INPUT="dados_mpi/"
export OUTPUT="resultados_mpi/"
module load openmpi/4.1.5
job-nanny mpirun -np $SLURM_NTASKS ./programa_mpi
Nota
Jobs com -N > 1 usam /store/ automaticamente, mesmo sem SHARED_FS="true" ou LARGE_FILES="true".
Exemplo 5: Job com Checkpoints Frequentes
#!/bin/bash
#SBATCH -J longo
#SBATCH -N 1
#SBATCH -n 28
#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/
Exemplo 6: Job com Debug
#!/bin/bash
#SBATCH -J debug
#SBATCH -N 1
#SBATCH -n 4
#SBATCH -t 01:00:00
export INPUT="entrada_teste.dat"
export OUTPUT="saida_teste.dat"
export VERBOSE=1 # Modo verboso
module load meu_app
job-nanny ./programa entrada_teste.dat
Arquivo de Log do job-nanny
O job-nanny gera saídas detalhadas no arquivo de log do SLURM (slurm-JOBID.out):
Hostname node045
Basedir /tmp
Copying /home/joao/entrada.dat -> /tmp/joao/12345/
Executing ./programa entrada.dat
Return Code 0
Copying /tmp/joao/12345/resultado.dat -> /home/joao/
Removing files from /tmp/joao/12345/
Com VERBOSE=1, mais detalhes são exibidos:
Hostname node045
Basedir /tmp
Creating directory /tmp/joao/12345/
Copying arquivo1.dat
Copying arquivo2.dat
Copying diretorio/
Executing ./programa
Checkpoint thread started (interval: 10800s)
[Checkpoint] Saving at 18:30:00
[Checkpoint] Completed
Return Code 0
Stopping checkpoint thread
Copying resultado.dat
Copying logs/
Removing work directory
Erros Comuns e Soluções
Erro: “INPUT is missing”
Causa: Variável INPUT não foi definida.
Solução:
export INPUT="seus_arquivos.dat"
Erro: “OUTPUT is missing”
Causa: Variável OUTPUT não foi definida.
Solução:
export OUTPUT="seus_resultados.dat"
Erro: “No space left on device”
Causa: Disco cheio (geralmente /tmp/).
Soluções:
Reduza tamanho dos arquivos INPUT
Use
LARGE_FILES="true"para usar /store/Limpe arquivos temporários durante execução
Arquivos OUTPUT Não Aparecem em /home/
Causas possíveis:
Nomes errados em OUTPUT
# Se seu programa gera "output.dat" export OUTPUT="output.dat" # Correto export OUTPUT="resultado.dat" # Errado!
Job cancelado antes de copiar
Use checkpoints frequentes (
WAIT_CHECKPOINTmenor)
Permissões de arquivo
Verifique se o programa tem permissão para criar os arquivos
Erro: “Permission denied” no /store/
Causa: Permissões incorretas no diretório.
Solução:
# Verificar permissões
ls -la /store/$USER
# Corrigir se necessário
chmod 755 /store/$USER
Perguntas Frequentes
P: É obrigatório usar job-nanny?
R: Sim, para qualquer job que faça I/O significativo. Jobs que acessam diretamente o /home/ durante execução podem ser cancelados pela equipe.
P: Posso executar sem job-nanny?
R: Tecnicamente sim, mas não é recomendado. O desempenho será pior e você pode sobrecarregar o sistema.
P: job-nanny funciona com MPI?
R: Sim! Use job-nanny mpirun -np $SLURM_NTASKS ./programa_mpi.
P: Como faço para usar bibliotecas instaladas em /home/?
R: Inclua-as em INPUT e configure LD_LIBRARY_PATH:
export INPUT="programa/libs/biblioteca.lib"
export LD_LIBRARY_PATH=/caminho/para/programa/libs:$LD_LIBRARY_PATH
job-nanny ./programa
P: Posso usar job-nanny com containers?
R: Sim:
export INPUT="container.sif script.py"
export OUTPUT="resultados/"
job-nanny apptainer exec container.sif python script.py
Ver também
Processando Simulações - Conceitos básicos de submissão
Melhorando o Script de Submissão - Mais opções de script
Guia Completo de Armazenamento - Detalhes sobre /tmp/ e /store/
Boas Práticas - Recomendações gerais