GESTIÓN DE TRABAJOS

El sistema que se encarga de gestionar y asignar los recursos del servidor (tiempo de cálculo o memoria) a cada usuario es SLURM, un sistema de gestión de tareas y de clústeres. Con esto se consigue un mejor aprovechamiento de los recursos y evita que un solo usuario monopolice toda la máquina cuando haya otros esperando para ejecutar sus trabajos.

¿Qué es SLURM?

Slurm (Simple Linux Utility for Resources Management), es un sistema de gestión de trabajos de alta calidad utilizado en entornos de computación de alto rendimiento (HPC) y clústeres de computadoras. Slurm se utiliza para programar trabajos en un clúster y administrar recursos como nodos, procesadores y memoria. Permite a los usuarios solicitar recursos de manera eficiente y equitativa para sus trabajos, y asegura que los recursos se utilicen de manera óptima en el clúster. Slurm como sistema de gestión tiene tres tareas claves:

  1. Asignar a los usuarios acceso exclusivo o no exclusivo a nodos de cómputo durante un tiempo determinado para que puedan ejecutar sus tareas.
  2. Proporciona un framework que permite iniciar, ejecutar y supervisar el trabajo.
  3. Se encarga de arbitrar la disputa de recursos, administrando una cola de tareas pendientes.

Puede consultar la documentación oficial de SLURM en el siguiente enlace: https://slurm.schedmd.com/documentation.html

Uso de SLURM

Información general

Para enviar un trabajo, debemos diferenciar dos partes:

  • Solicitud de recursos: consisten en reservar una cantidad de CPU, calcular la duración esperada, reserva de RAM o espacio en disco, etc
  • Tareas a ejecutar: describen las acciones que se deben realizar.

Lo usual para enviar un trabajo, es crear un script que contenga las dos partes anteriores. Si el script contiene comentarios con el prefijo SBATCH, el sistema SLURM los interpreta como parámetros para las solicitudes de recursos y otras opciones de envío. Estas directivas deben aparecer en la parte superior, antes de cualquier otra línea, excepto la primera línea del script que debe ser #!/bin/bash. Puede obtener la lista completa de parámetros en la página de manual de sbatch man sbatch.

También es posible enviar un trabajo directamente desde la línea de comandos indicando los recursos a utilizar y el script de ejecución.

Enviar trabajo desde línea de comandos

Para enviar un trabajo a una de las particiones hay que utilizar el comando sbatch

sbatch [opciones] [script para mandar a particion]

  • [opciones] parámetros para solicitar los recursos, se pueden indicar explicitamente o incluirlos en el script de ejecución.
  • [script para mandar a particion] es un fichero en el que se deben poner todos los comandos que necesite el usuario a la hora de ejecutar su aplicación.

Una vez enviado el trabajo, este es controlado por el sistema de particiones y los recursos van siendo asignados al usuario dependiendo de la particion a la que haya enviado el trabajo.

SBATCH: opciones útiles

Estas son algunas opciones útiles, si necesita un listado detallado puede consultar en el siguiente enlace: man sbatch

  • –job-name [job_name] Nombre del trabajo
  • –nodes [nodes] Número de nodos a utilizar
  • –mem [nodes] Indica la memoria real requerida por nodo
  • –partition [partition] Partición donde se enviará el trabajo
  • –time [hh:mm:ss] Establece un tiempo límite para la ejecución del trabajo
  • –output [[/path/]file] Fichero de salida del trabajo
  • –error [[/path/]file] Fichero donde se escribe la salida de error estándar del trabajo
  • –chdir [/path/] Establece el directorio de trabajo antes de ejecutar el script
  • –mail-user [email] Dirección de e-mail a la que se enviarán emails ante cambios de estado del trabajo.
  • –mail-type [ALL|BEGIN|END|FAIL] Estados para los que se enviará un email:
    • ALL – email en cualquier estado
    • BEGIN – email cuando comienza el trabajo
    • END – email cuando finaliza el trabajo
    • FAIL – email cuando se suspende el trabajo

SRUN: opciones útiles

Con el comando srun, podemos enviar trabajos en tiempo real a una partición o ejecutar un trabajo interactivo. Para información más detallada puede acceder al siguiente enlace: man srun

srun [opciones] [comando]

Script de ejemplo para lanzar desde línea de comandos

El siguiente ejemplo es un script para mandar trabajos, donde se usan algunas de las opciones indicadas en el apartado anterior:

#!/bin/bash
#SBATCH --nodes=5
#SBATCH --partition albaicin-fat
#SBATCH --job-name=nombre_trabajo
#SBATCH --error=error%j.err
#SBATCH --output=salida%j.out
#SBATCH --time=48:00:00
/SCRATCH/grupo/user/mi_script.sh

Generador de trabajos para SLURM

En el portal de acceso para investigadores, en el apartado ‘Trabajos/Enviar trabajo’, puede utilizar una herramienta llamada ‘Generador de trabajos para SLURM’ que le facilitará el proceso de interacción con el superordenador y el envío de scripts.

Básicamente es un módulo diferenciado en tres partes:

  • Comandos: podrá incluir los comandos que desea enviar al superodenador para su procesamiento. Si ya dispone de una secuencia de comandos previamente creada, puede indicar aquí la ruta de ejecución de su script (normalmente ubicada en su directorio SCRATCH), o si lo prefiere, puede pegar directamente el contenido de su script de ejecución teniendo en cuenta lo siguiente:
    • No debe incluir ningún argumento relacionado con SLURM ni debe utilizar el parámetro !#bin/bash, ya que el propio sistema se encargará de añadirlo en pasos posteriores.
  • SLURM: debe indicar la partición donde se ejecutará su trabajo y las opciones de configuración de SLURM como por ejemplo el nombre del trabajo, nodos a usar, tiempo de procesamiento máximo, …
  • Enviar: genera un script final con toda la información relativa a comandos y configuración de SLURM, que puede descargar a su equipo local o enviar directamente al superordenador.

Solo el usuario root o el usuario propietario del trabajo puede cancelar un trabajo. La sintaxis es:

scancel [job_id]

También es posible cancelar todos los trabajos de un usuario o de un determinado estado en una particion:

scancel --state=[estado] --user=[usuario] --partition=[particion]

El manejo de las subtareas creadas se hace de la misma manera que el de los trabajos principales, salvo que esta vez el jobid de la tarea está compuesto por el jobid del trabajo seguido de un punto y del identificardor de la tarea: jobid_index. Para cancelar una tarea de un trabajo la sintaxis es:

scancel [jobid_task]

Para detener un trabajo, la sintaxis es:

scontrol hold [job_id]

Para reanudar un trabajo, la sintaxis es:

scontrol resume [job_id]

Para volver a encolar un trabajo, es decir, cancelar y poner de nuevo en particion, la sintaxis es:

scontrol requeue [job_id]

Para ver el estado de los trabajos enviados, se usa el siguiente comando:

squeue

Las columnas que muestra son:

  • JOBID: identificador del trabajo
  • PARTITION: partición/particion donde se ejecuta
  • NAME: nombre del trabajo
  • USER: usuario propietario del trabajo
  • ST: estado del trabajo
    • R: Running
    • S: Suspended
    • ST: Stopped
    • PR: Preempted
    • PD: Pending
    • F: Failed
    • CG: Completing
    • CD: Completed
    • CF: Configuring
    • NF: Node fail
    • TO: Timeout
  • TIME: tiempo que lleva el trabajo en ejecución
  • NODES: número de nodos utilizados
  • NODELIST(REASON): lista de nodos que utiliza

Gestión de trabajos

Toda la información interna referente a la gestión de trabajos, envío de trabajos específicos, directorio de archivos, módulos y compilación de aplicaciones, podrá encontrarla la sección de Ayuda del Portal de Soporte, para acceder, pulse aquí.