Partições e Limites de Recursos
Nesta seção:
O GridUnesp organiza os recursos computacionais em partições (filas) para gerenciar a execução dos jobs de forma eficiente e justa.
Conceitos Básicos
Partição: Conjunto de nós com características e políticas semelhantes
Limite de tempo: Tempo máximo que um job pode executar
Limite de recursos: Número máximo de núcleos, memória, GPUs por job
Política de prioridade: Regras que determinam a ordem de execução
Partições Disponíveis
Partição |
Nós |
Tempo máximo |
Uso recomendado |
|---|---|---|---|
short |
Todos os nós CPU |
24 horas |
Testes, jobs rápidos |
medium |
Todos os nós CPU |
7 dias |
Simulações de média duração |
long |
Todos os nós CPU |
30 dias |
Simulações longas |
gpu |
gpunode001 |
24 horas |
Jobs que utilizam GPU |
Nota
As partições short, medium e long são determinadas automaticamente pelo tempo solicitado. Não é necessário especificá-las explicitamente.
Consultando Partições
Comando sinfo
# Listar todas as partições
sinfo
# Formato detalhado
sinfo -o "%20P %5a %10l %6D %6t %N"
Exemplo de saída:
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
short* up 1-00:00:00 56 mix node[001-056]
medium up 7-00:00:00 56 mix node[001-056]
long up 30-00:00:0 56 mix node[001-056]
gpu up 1-00:00:00 1 mix gpunode001
Comando scontrol
# Detalhes de uma partição específica
scontrol show partition short
# Listar todos os nós
scontrol show nodes
Especificando Recursos no Script
Partição
# Para jobs GPU
#SBATCH --partition=gpu
Nota
Para as partições baseadas em tempo (short/medium/long), não é necessário especificar. O SLURM seleciona automaticamente baseado no valor de --time.
Tempo de Execução
# Formato: minutos
#SBATCH -t 30 # 30 minutos (partição short)
# Formato: horas:minutos:segundos
#SBATCH -t 12:00:00 # 12 horas (partição short)
# Formato: dias-horas
#SBATCH -t 2-12:00:00 # 2 dias e 12 horas (partição medium)
#SBATCH -t 7-00:00:00 # 7 dias (partição medium)
#SBATCH -t 30-00:00:00 # 30 dias (partição long)
Importante
Tempo até 24h → partição short
Tempo entre 24h e 7 dias → partição medium
Tempo entre 7 e 30 dias → partição long
Tempo > 30 dias → inválido (job não será aceito)
Nós e Processos
# Número de nós
#SBATCH --nodes=2
# Processos totais
#SBATCH --ntasks=52
# Processos por nó
#SBATCH --ntasks-per-node=28
# CPUs por processo (para threads)
#SBATCH --cpus-per-task=4
Memória
# Memória por nó
#SBATCH --mem=64G
# Memória por CPU
#SBATCH --mem-per-cpu=4G
Aviso
Não use --mem e --mem-per-cpu juntos. Escolha um.
GPUs
# Número de GPUs
#SBATCH --gres=gpu:1
#SBATCH --gres=gpu:2
# GPU específica (se houver mais de um tipo)
#SBATCH --gres=gpu:l40s:1
Exemplos Práticos
Exemplo 1: Job Serial
#!/bin/bash
#SBATCH -J serial
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=1
#SBATCH --time=04:00:00
#SBATCH --mem=4G
export INPUT="entrada.dat"
export OUTPUT="saida.dat"
job-nanny ./meu_programa
Exemplo 2: Job Paralelo OpenMP
#!/bin/bash
#SBATCH -J openmp
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=28
#SBATCH --time=12:00:00
#SBATCH --mem=64G
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
export INPUT="dados.dat"
export OUTPUT="resultados/"
.job-nanny ./programa_omp
Exemplo 3: Job MPI
#!/bin/bash
#SBATCH -J mpi
#SBATCH --nodes=4
#SBATCH --ntasks-per-node=28
#SBATCH --time=48:00:00
#SBATCH --mem-per-cpu=2G
export INPUT="dados_mpi/"
export OUTPUT="resultados_mpi/"
module load openmpi/4.1.5
job-nanny mpirun -np 112 ./programa_mpi
Exemplo 4: Job GPU
#!/bin/bash
#SBATCH -J gpu
#SBATCH --partition=gpu
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --gres=gpu:2
#SBATCH --cpus-per-task=16
#SBATCH --time=12:00:00
#SBATCH --mem=64G
export INPUT="dados_gpu/"
export OUTPUT="resultados_gpu/"
module load cuda/12.0
job-nanny ./programa_cuda
Exemplo 5: Job Array com Limite de Simultâneos
#!/bin/bash
#SBATCH -J array
#SBATCH --array=1-1000%50
#SBATCH --ntasks=1
#SBATCH --time=01:00:00
#SBATCH --mem=2G
export INPUT="dados_${SLURM_ARRAY_TASK_ID}.dat"
export OUTPUT="resultado_${SLURM_ARRAY_TASK_ID}.dat"
job-nanny ./processa
Verificando Limites e Uso
Jobs em Execução
# Seus jobs
squeue -u $USER
# Todos os jobs
squeue
# Apenas jobs em execução
squeue -t RUNNING
# Apenas jobs pendentes
squeue -t PENDING
Recursos em Uso
# Resumo de uso do cluster
sinfo
# Uso detalhado por nó
sinfo -N -o "%16N %8c %8m %8d %6t"
# Nós disponíveis
sinfo -t idle
Por Que Meu Job Não Começa?
Razões comuns para jobs permanecerem em estado PENDING:
Falta de recursos
Todos os nós estão ocupados
Solução: Aguarde ou solicite menos recursos
Prioridade baixa
Segundo a Política de Prioridade, seu Fair Share está baixo
Solução: Reduza o uso ou aguarde o reset de prioridade
Recursos solicitados inviáveis
Pediu mais que o disponível (ex: 100 nós)
Solução: Revise as requisições
Tempo solicitado inválido
Mais de 30 dias
Solução: Reduza para ≤ 30 dias
Verificando a razão:
squeue -u $USER -o "%.18i %.9P %.8j %.8u %.2t %.10M %.6D %R"
A coluna %R mostra a razão (ex: “Resources”, “Priority”).
Otimizando o Uso de Recursos
Peça apenas o necessário
Estime corretamente tempo e memória
Use
sacctpara ver o uso real após o job
Jobs menores têm prioridade
Prefira vários jobs pequenos a um gigante
Use job arrays para HTC
Evite picos de submissão
Espalhe a submissão ao longo do tempo
Use
--array=1-1000%50para limitar simultâneos
Monitore seu Fair Share
sshare -U $USER
Ver também
Política de Prioridade - Detalhes sobre Fair Share
Processando Simulações - Como submeter jobs
Melhorando o Script de Submissão - Mais opções de script
Otimizando o Desempenho - Estratégias de otimização