knowhow:slurm

¡Esta es una revisión vieja del documento!


Página visible a externos sin autenticación

Tipos de nodos disponibles:

  • Partición CPU (40 vCPU, 128GB)
  • Partición GPU (40 vCPU, 128GB, H100 96GB VRAM): –gres=H_100_NVL
  • Partición GPU (20 vCPU, 128GB, L4 24GB VRAM): –gres=L4

Recuerda que si no especificas recurso con gres, entrará en la primera gpu libre

Uso de Slurm

Guía de usuario para el uso del cluster de Slurm desplegado.

Ver también cómo enviar trabajos al clúster con sbatch, cómo ejecutar Jupyter en Slurm mediante sbatch y el FAQ

  • Tener cuenta de usuario activa: LDAP ANTS o LDAP EXTERNOS.
  • Tener acceso SSH al clúster: 155.54.210.99.
  • Tener permiso de uso en al menos una partición:
    • CPU
    • GPU (si aplica)

Conexión típica:

ssh <USUARIO_LDAP>@<HOST_IP>

Te dejará en /slurm/home/<USUARIO>.

  • Ver estado general del clúster:
sinfo
  • Ver cola de trabajos:
squeue
  • Ver solo tus trabajos:
squeue -u <USUARIO>
  • Ver detalle de un job:
scontrol show job <JOB_ID>
  • Cancelar un job:
scancel <JOB_ID>

Ejemplo CPU:

cat > job_cpu.sbatch <<'EOF'
#!/bin/bash
#SBATCH --job-name=cpu_test
#SBATCH --partition=cpu
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --time=00:10:00
 
echo "Usuario: $USER"
echo "Host: $(hostname)"
echo "JobID: $SLURM_JOB_ID"
echo "Trabajo CPU de prueba"
sleep 20
EOF

Ejemplo GPU:

cat > job_gpu.sbatch <<'EOF'
#!/bin/bash
#SBATCH --job-name=gpu_test
#SBATCH --partition=gpu
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --gres=gpu:1
#SBATCH --time=00:10:00
 
nvidia-smi || true
echo "Trabajo GPU de prueba"
sleep 20
EOF
sbatch job_cpu.sbatch

Slurm devolverá algo como:

Submitted batch job <JOB_ID>
squeue -u <USUARIO>

Estados comunes:

  • PD: pendiente (pendiente de recursos/políticas).
  • R: ejecutando.
  • CG: terminando.
  • CD: completado.
  • F: fallado.

En este despliegue, si no defines –output/–error, Slurm aplica rutas por defecto:

  • stdout/slurm/home/%u/output/%j/stdout.txt
  • stderr/slurm/home/%u/output/%j/stderr.txt

Equivalente para un job real:

  • /slurm/home/<USUARIO>/output/<JOB_ID>/stdout.txt
  • /slurm/home/<USUARIO>/output/<JOB_ID>/stderr.txt

Consultar:

cat /slurm/home/<USUARIO>/output/<JOB_ID>/stdout.txt
cat /slurm/home/<USUARIO>/output/<JOB_ID>/stderr.txt

Durante la ejecución, el clúster crea automáticamente:

  • /scratch/slurm/<USUARIO>/<JOB_ID>

Y al terminar el job, se elimina automáticamente.

Recomendación:

  • Copia resultados importantes desde scratch a una ruta persistente antes de finalizar.
  • Usa rutas persistentes para salidas finales (por ejemplo /slurm/home/<USUARIO>/…)

Para abrir una sesión interactiva en un nodo:

srun --partition=<PARTICION_CPU> --ntasks=1 --cpus-per-task=2 --time=00:30:00 --pty bash

Para GPU:

srun --partition=<PARTICION_GPU> --gres=gpu:1 --ntasks=1 --cpus-per-task=2 --time=00:30:00 --pty bash

Ejemplo:

cat > job_array.sbatch <<'EOF'
#!/bin/bash
#SBATCH --job-name=array_demo
#SBATCH --partition=<PARTICION_CPU>
#SBATCH --array=1-10
#SBATCH --time=00:05:00
 
echo "Task ID: $SLURM_ARRAY_TASK_ID"
sleep 5
EOF

Enviar:

sbatch job_array.sbatch

Enviar un primer job:

jid1=$(sbatch --parsable job_cpu.sbatch)

Enviar un segundo job que empiece cuando termine bien el primero:

sbatch --dependency=afterok:${jid1} job_cpu.sbatch

Ver historial básico:

sacct -u <USUARIO> --starttime today

Formato ampliado:

sacct -u <USUARIO> --format=JobID,JobName,Partition,State,Elapsed,ExitCode
sinfo -N -l

Detalle de un nodo:

scontrol show node <NODO>
  • Invalid account or account/partition combination specified
    • Tu usuario no está asociado a esa cuenta/partición.
    • Contacta con administración.
  • Job en PD mucho tiempo
    • Puede faltar recursos o prioridad.
    • Revisa motivo:
squeue -j <JOB_ID> -o "%.18i %.9P %.20j %.8u %.2t %.10M %.6D %R"
  • No aparece output esperado
    • Revisa rutas por defecto /slurm/home/<USUARIO>/output/<JOB_ID>/
    • Revisa stderr.txt
  • Error de GPU (Requested node configuration is not available)
    • –gres=gpu:<N> no cuadra con lo disponible.
    • Verifica con sinfo -N -l
  • Solicita solo recursos que realmente necesitas.
  • Define –time realista.
  • Usa scripts reproducibles y versionados.
  • Guarda resultados finales en almacenamiento persistente.
  • Limpia datos intermedios pesados.
#!/bin/bash
#SBATCH --job-name=<NOMBRE_JOB>
#SBATCH --partition=<PARTICION_CPU_O_GPU>
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=<N_CPUS>
#SBATCH --time=<HH:MM:SS>
#SBATCH --mem=<RAM_MB_O_GB>
 
set -euo pipefail
echo "Job $SLURM_JOB_ID en $(hostname)"
 
# Tu carga de trabajo aquí
  • Script .sbatch tiene #!/bin/bash.
  • Partición correcta (CPU o GPU).
  • Recursos correctos (cpu, mem, time, gres si GPU).
  • Ruta de datos de entrada existe.
  • Resultado final se guarda en ruta persistente.

  • knowhow/slurm.1779357026.txt.gz
  • Última modificación: 2026/05/21 09:50
  • por lbernal