Tabla de Contenidos

Tipos de nodos disponibles:

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

Si detectamos malgasto de recursos (por ejemplo reservar grandes cantidades de memoria para trabajos que no las necesiten) se aplicarán penalizaciones.

Los recursos son comunes a todo el grupo y hay que hacer un uso responsable de ellos.

Uso de Slurm

Guía de usuario para el uso del cluster de Slurm desplegado. Página visible a externos sin autenticación

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

1. Requisitos previos

2. Acceso al clúster

Conexión típica:

ssh <USUARIO_LDAP>@<HOST_IP>

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

3. Comandos básicos que vas a usar siempre

sinfo
squeue
squeue -u <USUARIO>
scontrol show job <JOB_ID>
scancel <JOB_ID>

4. Flujo estándar de trabajo

4.1 Crear un script de job (''.sbatch'')

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

4.2 Enviar el job

sbatch job_cpu.sbatch

Slurm devolverá algo como:

Submitted batch job <JOB_ID>

4.3 Monitorizar

squeue -u <USUARIO>

Estados comunes:

5. Dónde salen stdout y stderr

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

Equivalente para un job real:

Consultar:

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

6. Scratch por job (importantísimo)

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

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

Recomendación:

7. Job interactivo

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:

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

9. Dependencias entre jobs

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

10. Historial y contabilidad

Ver historial básico:

sacct -u <USUARIO> --starttime today

Formato ampliado:

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

11. Ver recursos de nodos

sinfo -N -l

Detalle de un nodo:

scontrol show node <NODO>

12. Errores comunes y solución rápida

squeue -j <JOB_ID> -o "%.18i %.9P %.20j %.8u %.2t %.10M %.6D %R"

13. Buenas prácticas de uso

14. Plantilla mínima recomendada

#!/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í

15. Checklist rápido antes de enviar