Envío de Jobs

🚫
¡El nodo de acceso no es para realizar cómputos! El nodo de acceso es compartido por todos los usuarios y no debe ser usado para ejecutar tareas intensas. Esas tareas deben ser enviadas al gestor de Slurm para que este asigne un nodo de cómputo donde ejecutarse.

Dado que Khipu es un recurso compartido, hacemos uso de un gestor de recursos como Slurm que nos permitirá enviar, cancelar y revisar cargas de trabajo o jobs.

Slurm

Simple Linux Utility of Resource Mangement (Slurm), es el encargado de coordinar los recursos de todos los nodos del cluster y asignarlos de acuerdo la prioridad de los jobs, cantidad de recursos solicitados y cantidad de recursos disponibles.

A continuación, se proporciona una guía básica sobre cómo utilizar SLURM para ejecutar trabajos en Khipu.

1. Comandos Básicos de SLURM

1.1. srun - Ejecutar trabajos

El comando srun es utilizado para ejecutar jobs de manera directa o interactiva. Se puede especificar cuántos nodos, CPUs, memoria, etc., se requiere utilizar.

Sintaxis básica:

srun [opciones] [comando]

Ejemplo: Ejecutar un script en un solo nodo con una CPU:

srun -n 1 --ntasks=1 --cpus-per-task=1 bash mi_script.sh

Donde mi_script.sh contiene lo siguiente:

#!/bin/bash

echo "Iniciando en $(date)"
echo "El job fue enviado a la partición ${SLURM_JOB_PARTITION}"
echo "Nombre del job: ${SLURM_JOB_NAME}, Job ID: ${SLURM_JOB_ID}"
echo "Tengo ${SLURM_CPUS_ON_NODE} CPUs en el nodo $(hostname)"
echo "Voy a dormir 10s para que me veas en la fila"
sleep 10 

Al pedir un job interactivo, se reservaran los recursos y se iniciará sesión en un shell de alguno de los nodos de cómputo.

Ejemplo: Reservar un nodo de manera interactiva:

srun --pty -t 2:00 --mem=2G -p debug bash

El comando anterior asignará un CPU y 2GiB RAM por un periodo de 2 minutos. Durante ese tiempo podremos ejecutar comandos dentro de la shell de manera interactiva. Para salir de la sesión, deberemos ejecutar exit o presionar Ctrl+d.

1.2. sbatch - Enviar trabajos a la cola

El comando sbatch se utiliza para enviar un trabajo a la cola de SLURM. Este comando es ideal para trabajos que se ejecutan en segundo plano, como tareas largas o de alto rendimiento.

Sintaxis básica:

sbatch [opciones] [archivo_de_script]

Ejemplo: Enviar un trabajo de script:

sbatch mi_script.sb

1.3. squeue - Ver el estado de los trabajos

El comando squeue muestra los trabajos en ejecución y en espera en la cola de SLURM. Con ese comando nuede ver el estado de tus trabajos, qué partitición y nodos están utilizando, etc.

Sintaxis básica:

squeue [opciones]

Ejemplo: Ver los trabajos que he enviado:

squeue --me

Con ello obtendré una salida parecida a:

[alan.turing@khipu ~]$ squeue
JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
1077     debug  CudaJob  alan.turing  R       0:02      1 n005

1.4. scancel - Cancelar trabajos

Este comando te permite cancelar trabajos en ejecución o en espera en la cola.

Sintaxis básica:

scancel [opciones] [job_id]

Ejemplo: Cancelar un trabajo con un ID específico:

scancel 1077

1.5. scontrol - Controlar y gestionar trabajos

El comando scontrol le permite obtener información detallada sobre trabajos o recursos, y realizar operaciones de control (pausar, reanudar, etc.).

Sintaxis básica:

scontrol [opciones] [comando]

Ejemplo: Ver el estado de un trabajo:

scontrol show job 1077

Con ello obtendré una salida parecida a:

[alan.turing@khipu ~]$ scontrol show job 1077
JobId=1077 JobName=CudaJob
   UserId=alan.turing(1000) GroupId=alan.turing(1000) MCS_label=N/A
   Priority=1683 Nice=0 Account=pregrado QOS=a-pregrado
   JobState=COMPLETED Reason=None Dependency=(null)
   Requeue=1 Restarts=0 BatchFlag=1 Reboot=0 ExitCode=0:0
   RunTime=00:00:02 TimeLimit=00:10:00 TimeMin=N/A
   SubmitTime=2024-11-06T02:41:48 EligibleTime=2024-11-06T02:41:48
   AccrueTime=2024-11-06T02:41:48
   StartTime=2024-11-06T02:41:48 EndTime=2024-11-06T02:41:50 Deadline=N/A
   SuspendTime=None SecsPreSuspend=0 LastSchedEval=2024-11-06T02:41:48 Scheduler=Main
   Partition=debug AllocNode:Sid=khipu:2943597
   ReqNodeList=(null) ExcNodeList=(null)
   NodeList=n005
   BatchHost=n005
   NumNodes=1 NumCPUs=1 NumTasks=1 CPUs/Task=1 ReqB:S:C:T=0:0:*:*
   ReqTRES=cpu=1,mem=100M,node=1,billing=1
   AllocTRES=cpu=1,mem=100M,node=1,billing=1
   Socks/Node=* NtasksPerN:B:S:C=0:0:*:* CoreSpec=*
   MinCPUsNode=1 MinMemoryCPU=100M MinTmpDiskNode=0
   Features=(null) DelayBoot=00:00:00
   OverSubscribe=OK Contiguous=0 Licenses=(null) Network=(null)
   Command=/home/alan.turing/gpu_job_shard.sh
   WorkDir=/home/alan.turing
   StdErr=/home/alan.turing/slurm-1077.out
   StdIn=/dev/null
   StdOut=/home/alan.turing/slurm-1077.out
   Power=

1.6. sinfo - Ver información sobre los nodos y particiones

Con sinfo puede obtener información sobre las particiones, su estado y nodos disponibles en el sistema.

Sintaxis básica:

sinfo [opciones]

Ejemplo: Ver el estado de las particiones:

sinfo

Ejemplo: Ver el estado de las particiones y la razón de dicho estado:

sinfo -R