s.l.u.r.m

Utilización de SLURM

SLURM Workload Manager o formalmente (Simple Linux Utility for Resource Management) es un sistema de gestión de trabajos en clústeres de código abierto, el cual es tolerante a fallas y altamente escalable para clústeres Linux grandes y pequeños.

  1. Asigna a los usuarios acceso exclusivo y/o no exclusivo a recursos de cómputo por un tiempo determinado, permitiéndoles así ejecutar trabajos (jobs) asignados.
  2. Provee un marco para iniciar, ejecutar y monitorear tareas (normalmente tareas paralelas) en un conjunto de nodos asignados.
  3. Coordina la solicitud de recursos a través de una cola de trabajos pendientes.
  • Ejecutando el trabajo
  • Asignando recursos de cómputo solicitados por el trabajo
  • Reportando la salida de su ejecución al usuario.
  • Preparar un script (el formato del script se encuentra a continuación)
  • Enviar trabajo para ejecución.

A continuación se muestran los comandos básicos utilizados para realizar la mayoría de las operaciones básicas con SLURM:

ComandoDescripción
squeueVer estado de los trabajos en la cola
sinfoVer información de los nodos de cómputo
sbatchEnviar un trabajo a través de un script, para su posterior ejecución
srunEjecutar un trabajo interactivo
scancelEliminar un trabajo

Existen páginas de manual para todos los comandos de Slurm, las cuales contienen información más detallada. El parámetro –help además proporciona un breve resumen de las opciones de cada comando. A continuación se muestra el resumen de los parámetros que más se suelen utilizar en SLURM por cada comando básico:

Comando SLURM Descripción
–mem-per-cpu=<megabytes>Memoria requerida para el trabajo por CPU asignada (en MegaBytes). El valor predeterminado es 1024 MB.
-n, –ntasks=<cantidad de tareas>Número de tareas (procesos) que serán asignadas para el trabajo.
-c, –cpus-per-task=<cpus>Número de CPUs (hilos) requeridas por tarea. El valor especificado aquí es el número “mínimo” de CPU que se asignará a su trabajo. Si hay CPU adicionales disponibles en un nodo más allá de lo solicitado, su trabajo recibirá esas CPU hasta que otros trabajos las necesiten. El valor predeterminado es 1 CPU. Intentar usar más CPU de las que se le asignaron dará como resultado que sus procesos adicionales se turnen en la misma CPU (ralentizando su trabajo).
-J <name>, –jobname=<name>Especificar un nombre a tu trabajo
-o <STDOUT_log>, –output=<STDOUT_log>Archivo en el que se desea almacenar la salida del trabajo. Usted puede especificar %j como parte del nombre de archivo de registro para indicar la ID del trabajo (como ejemplo, “#SBATCH -o ouptut_%j.o” redirigiría la salida a “output_123456.o”).
-e <STDERR_log>, –error=<STDERR_log>Archivo en el que se desea almacenar mensajes de error de trabajo. Funciona exactamente igual que “-o”.
-t, –time=<days-hours:minutes:seconds>
(ej. –time=08:00:00)
Permite ajustar el límite de tiempo del trabajo
–array=<índices>

(ej. –array=1-80)
Envía una lista (arreglo) de trabajos idénticos. Solo aplica para sbatch.
–export=<name[=value]>
(ej. –export=ALL)
Exportar variables de entorno identificadas
–nodes=<nodos>Cantidad de nodos de cómputo a utilizar
–account=<cuenta>
(ej. –account=dsmith)
Asignar el nombre de cuenta para monitorear el trabajo

scancel

–name=<name>Cancela trabajos con nombre especificado
–user=<name>Cancela trabajos del usuario especificado

squeue

–jobs=<job_id_list>Lista separada por comas de IDs de trabajo para mostrar
–name=<name>Permite ver sólo trabajos con nombres especificados
–users=<names>Permite ver sólo trabajos para usuarios especificados

Este es un ejemplo de un script (ejemplo1.sh) con los elementos mínimos para ejecutar el programa namd a través de slurm:

#!/bin/bash   #Shell a usar durante la simulación, para este caso es bash

#SBATCH -J NAMD-NOMBRE-SIMULACION   #Nombre de la simulación, reemplazar por nombre apropiado

#SBATCH --nodes=1      #Número de nodos donde se ejecutará la simulación, siempre es 1 para Soroban

#SBATCH --tasks-per-node=40     #40 es el número de procesos a ejecutar en el servidor Soroban, reemplazar por la cantidad adecuada

#SBATCH --mem=100G              #Memoria reservada para esta simulación en el servidor

#SBATCH --partition=intel      #Partición donde se enviarán los trabajos, en este caso la partición general se llama intel.

module load namd/Git-2019-11-27_Linux-x86_64-multicore      #Programas o módulos necesarios para ejecutar esta simulación, reemplazar por las adecuadas en cada caso

Para enviar este script a slurm, crear un job, y comenzar el procesamiento se requiere lo siguiente:

chmod  x ejemplo1.sh
sbatch ejemplo1.sh

Este es un ejemplo de un script (ejemplo2.sh) con los elementos mínimos para ejecutar el programa R-3.6.1 a través de slurm:

#!/bin/bash    #Shell usada por el usuario, para este caso es BASH

#SBATCH -J R-NOMBRE-SIMULACION   #Reemplazar R-nombre-simulación por el nombre correspondiente a la simulación

#SBATCH --nodes=1          #Número de nodos a donde se enviará la simulación, para Soroban es 1.

#SBATCH --tasks-per-node=1         #Número de tareas por nodo, en este caso es 1 porque es una tarea single-thread

#SBATCH --mem=100G                 #Cantidad de memoria reservada para esta simulación, 100G, reemplazar por valor adecuado

#SBATCH --partition=intel          #Nombre de la partición slurm donde se enviará las simulaciones, en este caso la partición general se llama "intel"

module load R/3.6.1       #Módulos necesarios para ejecutar la simulación, para este ejemplo solamente es necesario 'R/3.6.1' este ejemplo es para single thread.

Para enviar este script a slurm, crear un job, y comenzar el procesamiento se requiere lo siguiente:

chmod  x ejemplo2.sh
sbatch ejemplo2.sh

Este ejemplo enviar un trabajo de 1 hilo a slurm con los parámetros del script, y con limitaciones establecidas al usuario y la partición


Este ejemplo muestra como enviar varias tareas utilizando la propiedad de array-jobs en slurm, para más detalles consultar documentación oficial de slurm para ver todas las posibilidades ofrecidas en Array-Jobs.

#!/bin/bash

#SBATCH -J R-NOMBRE-SIMULACION    #Nombre de la simulación, reemplazar según sea el caso
#SBATCH -a 1-11%3   #
#SBATCH --nodes=1           #Número de nodos donde se enviará el trabajo, siempre es 1 para Soroban
#SBATCH --tasks-per-node=1   #Número de hilos a ejecutar simultáneamente
#SBATCH --mem=100G                #Memoria reservada para la simulación
#SBATCH --partition=intel         #Partición general donde se enviará la simulación, llamada 'intel'

module load R/3.6.1               #Módulo necesario cargado previamente, necesario para la simulación

cmds=(                            #Comandos a ejecutar en array
'sleep 10;echo 10'
'sleep 20;echo 20'
'sleep 30;echo 30'
'sleep 40;echo 40'
'sleep 50;echo 50'
)
eval ${cmds[$SLURM_ARRAY_TASK_ID - 1]}          #Desplegar información de los ID de cada elemento de array-job enviado
chmod +x ejemplo3.sh
sbatch ejemplo3.sh
  • s.l.u.r.m.txt
  • Last modified: 2024/03/07 21:18
  • by admin