Saltar a contenido

Gestión de trabajos

¿Qué es SLURM?

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.

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:


Particiones

En el contexto de SLURM (Simple Linux Utility for Resource Management), las particiones son un componente clave que permite organizar y gestionar los recursos de un clúster de computadoras de manera más eficiente.

Al dividir el clúster en particiones, los administradores pueden asignar recursos de manera más específica y eficiente según las necesidades de los usuarios y los requisitos de los trabajos. Esto facilita la administración de grandes clústeres HPC donde diferentes grupos de usuarios pueden tener necesidades y prioridades diversas.


Envío de trabajos

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.

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.


Comando SBATCH

Para enviar un trabajo a una de las particiones hay que utilizar el comando sbatch. Puede obtener la lista completa de parámetros en la página de manual de man sbatch.

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.

Estas son algunas opciones útiles:

  • --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

Comando SRUN

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

Comando srun
srun [opciones] [comando]

Generador de trabajos

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.

Cancelar trabajos

Comando SCANCEL

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

Cancelar un trabajo
scancel [job_id]

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

Cancelar todos los trabajos
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.

Cancelar subtareas
scancel [jobid_task]

Detener trabajos

Comando SCONTROL

Para detener un trabajo, la sintaxis es:

Detener un trabajo
scontrol hold [job_id]

Para reanudar un trabajo, la sintaxis es:

Reanudar un trabajo
scontrol resume [job_id]

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

Encolar un trabajo
scontrol requeue [job_id]

Estado de los trabajos

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

Ver el estado de los trabajos
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

Creación de script

Script de ejemplo
#!/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