Saltar a contenido
Paso 5 de 5

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í: