- ¿Qué es Slurm?
- Características principales de Slurm
- ¿Cuáles son los estados por los que pasan los trabajos?
- ¿Cómo utilizar el gestor de colas Slurm para enviar trabajos al cluster?
- ¿Qué son las particiones de Slurm?
- ¿Cómo interaccionar con Slurm? Comandos básicos
- ¿Cuántos trabajos puedo lanzar simultáneamente?
¿Qué es Slurm? #
Slurm (Simple Linux Utility for Resources Management), es un sistema de gestión de tareas y de clústeres (nodos o servidores de cómputo). Los servicios de computación de PROTEUS están gestionados por este servicio.
Slurm como sistema de gestión tiene tres tareas clave:
- Asignar a los usuarios acceso exclusivo o no exclusivo a nodos de cómputo durante un tiempo determinado para que puedan ejecutar sus tareas.
- Proporciona un framework que permite iniciar, ejecutar y supervisar el trabajo.
- Se encarga de arbitrar la disputa de recursos, administrando una cola de tareas pendientes.
Por ejemplo, se reservarán los recursos particulares que necesite un programa en concreto, y se pondrá en espera si no están disponibles en un momento dado. Los usuarios envían trabajos para que se ejecuten, y solo tienen que esperar a que finalice, sin preocuparse de si el trabajo se ha realizado en uno, dos o tres nodos de cómputo.
Características principales de Slurm #
Algunas de sus características más importantes son:
- Código abierto.
- Tolerante a fallos.
- Seguro.
- Altamente escalable.
- Altamente configurable: dispone de una gran cantidad de plugins fácilmente usables.
- Es el gestor de colas instalado en muchos de los súper computadores del TOP500.
- Relativamente autónomo.
- Amigable para el administrador.
#
¿Cuáles son los estados por los que pasan los trabajos? #
Los estados por los que pasa un trabajo son:
- Pending (PD): Trabajo en cola.
- Running (R): Recursos asignados y trabajo en ejecución.
- Suspended (S): Recursos asignados y trabajo suspendido.
- Completing (CG): Trabajo completado y retirado de la cola.
- Cancelled (CA): Trabajo cancelado por el usuario.
- Completed (CD): Trabajo finalizado correctamente.
- Failed (F): Ejecución finalizada incorrectamente.
- NodeFail (NF): Terminado por fallo en el nodo.
- TimeOut (TO): Terminado por alcanzar el TimeOut.
¿Cómo utilizar el gestor de colas Slurm para enviar trabajos al cluster? #
Para enviar un trabajo es necesario utilizar el gestor de colas. Para ello, se crea un un fichero de descripción de trabajo, en el que se indican los parámetros del trabajo, como por ejemplo el nombre del ejecutable y el directorio de trabajo, los requisitos de hardware (número de procesadores, el espacio de memoria y discos necesarios, etc.), o el tiempo máximo de ejecución.
¿Qué son las particiones de Slurm? #
Las particiones son una especie de colas. Cada partición tiene sus propias características, como por ejemplo el número máximo de recursos que se pueden reservar o el tiempo máximo de ejecución. De acuerdo con las necesidades del trabajo, lo mandaremos a una partición o a otra.
Es necesario conocer las particiones disponibles en PROTEUS para elegir aquellas que mejor se adapten a nuestros trabajos. Puedes encontrar más información aquí.
Por defecto, se usará la partición htc-general
¿Cómo interaccionar con Slurm? Comandos básicos #
Estos son los principales comandos y acciones con los que es posible interactuar con Slurm para controlar y monitorizar el flujo de trabajo:
- sbatch : Envía un script a una partición de Slurm. El único parámetro obligatorio es el tiempo estimado.
Así para enviar el script script.sh con una duración de 24 horas, se ejecutaría:
$ sbatch -t 24:00:00 script.sh
En caso de que el comando se ejecute con éxito, devuelve el número del trabajo (<jobid>). Ver información
más detallada más adelante. - srun : Usado habitualmente para ejecutar una tarea paralela dentro de un script controlado por Slurm.
- sinfo : Muestra información sobre los nodos de Slurm y las particiones. Proporciona información sobre
las parciones existentes (PARTITION), si están o no disponibles (AVAIL), el tiempo máximo de cada
partición (TIMELIMIT. Si está en infinito, se regula externamente), el número de nodos que componen la
partición (NODES), el estado en que se encuentra cada nodo (los más habituales son, idle es que está
disponible, alloc es que está en uso, mix es que parte de sus CPUs están disponibles, resv es que se
encuentra reservado para un uso específico, y drain es que ha sido retirado temporalmente por motivos
técnicos).
Mostrar la información de una partición específica:
$ sinfo -p <partitionname>
Devolver información cada 60 segundos:
$ sinfo -i60
Mostrar las razones de por qué los nodos están: caídos, han fallado o están fallando.
$ sinfo -R
- squeue : Muestra información sobre los trabajos, su estado y las colas.
Para ver el estado de mis trabajos, con <nombre usuario> su usuario en el sistema:
$ squeue -u <nombre usuario>
Para ver el estado de un trabajo con número <jobid>:
$ squeue -j <jobid>
Ver hora y fecha estimada de entrada en ejecución de sus trabajos pendientes:
$ squeue --start -u <nombre usuario>
Listar todos los trabajos en ejecución:
$ squeue -t RUNNING
Ver todos los trabajos en espera:
$ squeue -t PENDING
Ver todos los trabajos de un usuario en una partición:
$ squeue -p <partition name>
- scancel : Permite cancelar un trabajo.
Cancelar un trabajo:
$ scancel <jobid>
Cancelar todos los trabajos pendientes :
$ scancel -t PENDING
Cancelar uno o más trabajos por su nombre:
$ scancel --name <jobname>
- scontrol : Devuelve información más detallada sobre los nodos, particiones, los pasos de los trabajos y la
configuración, es usado para monitorizar y modificar los trabajos en cola. Una de sus opciones más
potentes es scontrol show jobid, ya que es muy útil a la hora de resolver problemas puesto que nos
permite ver información detallada de un trabajo.
$ scontrol show jobid -dd <jobid>
Detener un trabajo en particular (sin eliminarlo) :
$ scontrol hold <jobid>
Reanudar un trabajo detenido :
$ scontrol resume <jobid>
Volver a encolar un trabajo en particular (se cancela y se vuelve a ejecutar, equivalente a ejecutar un
scancel y un sbatch seguido) :
$ scontrol requeue <jobid>
- sacct : Consulta del histórico de trabajos y muestra información de consumo:
Para consultar el histórico de sus trabajos:
$ sacct -u <nombre de usuario>
Para consultar la información de un trabajo particular:
$ sacct -j <jobid>
Para mostrar todos los campos que sacct puede dar, se añade la opción “ -l ”. Por ejemplo:
$ sacct -l
En caso de querer filtrar campos específicos se puede usar:
$ sacct --format=JobID,JobName,State,NTasks,NodeList,Elapsed,ReqMem,MaxVMSize,MaxVMSizeNode,MaxRSS,MaxRSSNode
Para información más detallada sobre comandos: http://slurm.schedmd.com/pdfs/summary.pdf
¿Cuántos trabajos puedo lanzar simultáneamente? #
No hay límite en el número de trabajos que pueden estar en cola, activos o esperando. Para garantizar un uso equitativo entre todos los usuarios se utiliza un sistema de prioridades. La prioridad de cada usuario se calcula en función de los recursos que haya consumido en las últimas semanas. Así, los trabajos de un usuario que no haya utilizado últimamente el cluster tendrán la máxima prioridad a la hora de realizar la asignación de recursos.