Guia SlurmLABIC · UTFPR experimental

Cluster LABIC · Slurm + Apptainer

Guia do usuário do cluster

Como acessar o cluster e rodar suas simulações nas GPUs L40S usando o escalonador Slurm. Feito para alunos e pesquisadores — não precisa de VPN, tudo pela porta pública do bastion, de qualquer rede.

1. Acessando o cluster

ssh -p 8888 <seu-usuario>@labic.utfpr.edu.br

No primeiro login, o sistema pede para trocar a senha temporária que o administrador te passou. Troque com calma — o Kerberos só deixa trocar a senha uma vez por hora; se errar, peça para o administrador resetar de novo em vez de ficar tentando.

Você cai direto no seu home NFS (/home/<seu-usuario>, cota padrão 100 GB), que é o mesmo em qualquer nó — o que você grava aqui aparece igual em qualquer lugar que seu job rodar.

⚠️ Você não tem shell nos nós de computação — só no bastion. Todo uso de GPU/CPU passa pelo Slurm. Isso é proposital: uma sessão SSH solta num nó não entra no cgroup do job e furaria o isolamento de GPU/CPU/memória que o escalonador garante.

Transferir arquivos

scp -P 8888 arquivo.txt <seu-usuario>@labic.utfpr.edu.br:~/
rsync -avz -e 'ssh -p 8888' pasta/ <seu-usuario>@labic.utfpr.edu.br:~/pasta/
# sshfs também funciona para montar o home localmente:
sshfs -p 8888 <seu-usuario>@labic.utfpr.edu.br:/home/<seu-usuario> ~/labic-mnt

2. O cluster em duas filas (partitions)

PartitionNósRecursosQuando usar
debug (padrão)slurmvm12 CPU, 3.5 GB RAM, sem GPUtestar um script antes de gastar GPU
l40sgpu11-r770 + gpu066× GPU L40S (48 GB cada) no total — gpu11-r770: 2 GPUs / 48 threads; gpu06: 4 GPUsqualquer job que precise de GPU

Se você não especificar --partition, cai em debug (sem GPU).

3. Comandos essenciais

ComandoPara que serve
sinfover o estado das filas/nós
squeuever os jobs na fila (só os seus, por padrão)
sbatch script.shsubmeter um job em lote (fila, roda sozinho)
srun ...rodar algo na hora, em primeiro plano
salloc ...reservar CPU/GPU por um tempo e rodar vários comandos
scancel <jobid>cancelar um job seu
saccthistórico dos seus jobs (status, tempo, uso de CPU/GPU)

Você só vê e cancela os seus próprios jobs — configuração deliberada do cluster (PrivateData=jobs), não um bug.

4. Em lote (sbatch) ou alocando na hora (srun/salloc)

4.1 Em lote (sbatch) — rodar e ir embora

#!/bin/bash
#SBATCH --job-name=meu-teste
#SBATCH --cpus-per-task=2
#SBATCH --mem=2G
#SBATCH --time=00:10:00
#SBATCH --output=%x-%j.out

echo "Rodando no nó: $(hostname)"
python3 meu_script.py
sbatch script.sbatch
squeue                        # acompanha
cat meu-teste-<jobid>.out      # saída, no diretório de onde você rodou o sbatch

Regras rápidas: submeta sempre do seu home NFS, nunca de /tmp (é local ao bastion e não existe nos nós); --output=%x-%j.out grava como <job>-<jobid>.out; --time é um limite e o job é morto se passar dele.

4.2 Na hora, em primeiro plano (srun)

srun sem sbatch aloca o recurso e já roda o comando ali, com a saída no seu terminal. Ao terminar, a alocação é devolvida sozinha:

srun --partition=debug --time=00:05:00 bash -c "hostname; sleep 3; echo terminei"

Para um shell interativo de verdade num nó, use --pty:

srun --partition=l40s --gres=gpu:l40s:1 --time=00:30:00 --pty bash
nvidia-smi -L
exit    # sai do shell E libera a alocação

⚠️ --pty só funciona de um terminal de verdade (sessão SSH interativa). De dentro de script/cron/automação falha com disregarding --pty option — o comando roda, mas sem shell interativo. É assim que o SSH/pty funciona, não é bug.

4.3 Reservar por um tempo (salloc)

Para segurar um pedaço do cluster e rodar vários comandos sem voltar pra fila a cada um:

salloc --partition=l40s --gres=gpu:l40s:1 --time=00:30:00
srun nvidia-smi -L        # usa a GPU já reservada, sem re-filar
srun python3 treino.py
exit                      # ou Ctrl+D — libera a alocação inteira
Você quer…Use
Rodar um treino longo e desconectarsbatch
Rodar um comando rápido e ver o resultado na horasrun comando
Um shell/console interativo num nó (com ou sem GPU)srun --pty bash
Testar vários comandos sem re-filar (debug, notebook)salloc, depois srun dentro

⚠️ Sem --time, a alocação não tem limite. Nada te protege de esquecer um srun --pty/salloc aberto segurando uma GPU por horas. Sempre passe --time, principalmente em sessões interativas — é fácil tirar a única GPU livre do ar para os colegas.

5. Usando GPU

Sem --gres, seu job não enxerga GPU nenhuma — mesmo na fila l40s. E é silencioso: nvidia-smi responde "No devices found", sem erro. Sempre peça a GPU:

$ srun --partition=l40s --time=00:01:00 nvidia-smi -L
No devices found.

$ srun --partition=l40s --gres=gpu:l40s:1 --time=00:01:00 nvidia-smi -L
GPU 0: NVIDIA L40S (UUID: GPU-9de4e7fa-...)
#!/bin/bash
#SBATCH --job-name=job-gpu
#SBATCH --partition=l40s
#SBATCH --gres=gpu:l40s:1        # 1 GPU L40S (por nó: gpu11-r770 tem 2, gpu06 tem 4)
#SBATCH --cpus-per-task=8
#SBATCH --mem=16G
#SBATCH --time=01:00:00
#SBATCH --output=%x-%j.out

nvidia-smi -L
python3 treino.py

Cuidado com memória: o Slurm trava --mem (seu job não passa do limite), mas não considera RAM ao decidir o que cabe no nó junto com outros jobs — só conta CPUs. Peça só o que precisa e não assuma que o resto está livre.

6. Reprodutibilidade com Apptainer

Não há Docker nos nós — use Apptainer (compatível com imagens Docker). Convenção: guarde suas imagens em ~/images/.

# rodar uma imagem Docker diretamente (--nv expõe os drivers NVIDIA; precisa de --gres)
apptainer exec --nv docker://pytorch/pytorch:latest python3 --version

Para dependências pesadas, construa sua própria imagem .def e rode num job:

apptainer build ~/images/meuapp.sif meuapp.def

# dentro do job Slurm:
apptainer exec --nv \
  --pwd /opt/app \
  --bind "$HOME/dados:/dados" \
  "$HOME/images/meuapp.sif" python3 treino.py

--pwd é importante: o Apptainer herda o diretório de onde você chamou o comando, não o WORKDIR da imagem — sem ele, imports relativos quebram silenciosamente sob sbatch. Construir um .sif é pesado: faça numa sessão interativa (srun --pty) ou na sua máquina, não dentro de um sbatch de produção.

7. Sintomas → causa

SintomaCausa provávelO que fazer
nvidia-smi diz "No devices found"Esqueceu --gres=gpu:...Adicione --gres=gpu:l40s:1 (por nó: até 2 no gpu11-r770, até 4 no gpu06)
Invalid generic resource (gres) specificationNome/contagem de GRES erradoConfirme com sinfo -o "%P %G" o nome exato do GRES
Job fica pendente muito tempoFila cheiaA l40s tem 6 GPUs (2 gpu11-r770 + 4 gpu06); squeue mostra quem está na frente
Import falha só sob sbatchDiretório de trabalho errado no ApptainerUse --pwd explícito
Job cancelado antes de terminarEstourou --timeAumente o --time no #SBATCH
Saída do sbatch nunca aparece, mas sacct mostra COMPLETEDSubmeteu de fora do home NFS (ex.: /tmp)Rode sempre a partir do seu home NFS
Não consigo trocar a senha depois de errarLimite de 1 troca/hora (Kerberos)Espere a hora, ou peça reset a um administrador
ssh -p 8888 não conectaPorta erradaConfirme que é :8888, não :2222 (antiga)

8. Suporte

Dúvidas, problemas ou pedidos de mais cota/recursos: labic@utfpr.edu.br · ou abra um chamado em suporte.labic.ct.utfpr.edu.br.