Tu primer trabajo con SLURM¶
En este tutorial vas a enviar un trabajo "hola mundo" a la cola de CPU del clúster, verlo ejecutar en un nodo de cómputo y consultar su historial. Todos los resultados de esta página son reales, capturados en el clúster.
5.1 Escribe tu script de trabajo¶
Crea un archivo llamado hola_mundo.sh:
#!/bin/bash
#SBATCH --job-name=hola_mundo
#SBATCH --partition=cpu
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=1
#SBATCH --mem=1G
#SBATCH --time=00:05:00
#SBATCH --output=hola_mundo_%j.out
echo "Hola mundo desde el clúster HPC de CEDIA"
echo "Fecha: $(date)"
module load python/3.11
python -c "import sys; print('Python', sys.version.split()[0], 'dentro del trabajo SLURM')"
¿Dice que el módulo python/3.11 es desconocido?
Es que tu cuenta aún no tiene activas las rutas del software del clúster.
Actívalas una vez (paso 3.3)
y vuelve a enviar el job: desde ahí, tus scripts pueden usar module load
sin más.
Las líneas #SBATCH son tus requisitos de recursos:
| Directiva | Significa |
|---|---|
--job-name |
Nombre con el que verás tu job en las colas |
--partition=cpu |
Cola de CPU para producción (ver colas) |
--nodes / --ntasks |
Cuántos nodos y tareas paralelas |
--cpus-per-task |
Núcleos por tarea |
--mem |
Memoria total del job (¡siempre ponla!) |
--time |
Tiempo máximo, hh:mm:ss |
--output |
Archivo donde queda la salida (%j = número de job) |
5.2 Envíalo a la cola¶
sbatch hola_mundo.sh
Submitted batch job 31417
sbatch no ejecuta nada: anota tu solicitud y devuelve un número de job.
El planificador lo lanzará cuando haya recursos.
5.3 Obsérvalo en la cola¶
squeue -u $USER
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
31417 cpu hola_mun <tú> R 0:01 1 <nodo>
(Salida real de squeue -u: se sustituyeron el usuario y el nodo por <tú> y
<nodo>. Fíjate que SLURM recorta el nombre a 8 caracteres en el formato por
defecto: hola_mun.)
ST es el estado (R = running) y TIME el tiempo acumulado. Si tu job aparece
PD (pending), la última columna dice por qué: falta de recursos, cuota, o un
requisito mal pedido.
5.4 Lee el resultado¶
Al terminar, el archivo de salida quedó junto a tu script (el %j se
convierte en el número del job):
cat hola_mundo_31417.out
Hola mundo desde el clúster HPC de CEDIA
Fecha: Wed Oct 28 17:07:14 -05 2026
Python 3.11.14 dentro del trabajo SLURM
5.5 Consulta el historial¶
sacct responde qué pasó con tus jobs (también los ya terminados):
sacct -j 31417 -X --format=JobID,JobName,Partition,State,ExitCode,Elapsed
JobID JobName Partition State ExitCode Elapsed
------------ ---------- ---------- ---------- -------- ----------
31417 hola_mundo cpu COMPLETED 0:0 00:00:04
State: COMPLETED con ExitCode: 0:0 = éxito total.
5.6 Las otras dos puertas: srun y salloc¶
sbatch es el camino normal, pero SLURM tiene dos comandos más que vas a usar
pronto. Los tres piden los mismos recursos con las mismas opciones
(-p, -n, -c, --mem, --time):
# 1) sbatch: encola un script y te devuelve el turno (lo acabas de hacer)
sbatch hola_mundo.sh
# 2) srun: ejecuta AHORA y te muestra la salida en la terminal
srun --partition=cpu --ntasks=1 --mem=1G --time=00:02:00 \
echo "Hola mundo desde srun"
# 3) salloc: reserva los recursos y te deja trabajar dentro de la reserva
salloc --partition=cpu --ntasks=1 --mem=1G --time=01:00:00
Hola mundo desde srun
Con srun tu terminal espera a que termine el comando; con salloc obtienes
una asignación abierta y tú decides qué ejecutar dentro. Los detalles de cada
uno: Trabajos con SLURM
y Sesiones interactivas.
5.7 Enhorabuena — y ahora ¿qué sigue?¶
Acabas de usar el ciclo completo: solicitar → encolar → ejecutar → verificar. A partir de aquí:
- Trabajos con SLURM:
sbatch,srunysalloc, todas las colas y sus límites. - GPU y MIG: tu primer tensor en una NVIDIA A100.
- Tareas paralelas (MPI): de 1 tarea a decenas.
- Sesiones interactivas:
sallocpara depurar.