knowhow:slurm

¡Esta es una revisión vieja del documento!


Uso de Slurm

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

  • Tener cuenta de usuario activa: LDAP ANTS.
  • 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
 
===== 8. Arrays de jobs =====
 
Ejemplo:
 
<code bash>
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.1773133770.txt.gz
  • Última modificación: 2026/03/10 09:09
  • por davidph