Utilización de SLURM
SLURM Workload Manager o formalmente (Simple Linux Utility for Resource Management) es un sistema de manejo de cluster y calendarización de tareas para grandes y pequeños cluster Linux, el cual es open source, tolerante a fallas y altamente escalable.
Funciones principales
- Asigna acceso exclusivo y/o no exclusivo a recursos (nodos de cómputo) a usuarios por un tiempo determinado para que estos puedan ejecutar una tarea.
- Provee un framework para iniciar, ejecutar y monitorear tareas (normalmente tareas paralelas) en un conjunto de nodos asignados.
- Coordina la solicitud de recursos a través de una cola de tareas pendientes.
¿Cómo se encarga Slurm de manejar los jobs?
- Asignando recurso de cómputo solicitados por el job
- Ejecutando el job
- Reportando la salida de la ejecución al usuario.
Pasos para ejecutar un job
- Preparar un script
- Enviar job para ejecución.
1. Comandos básicos de Slurm
Comando | Descripción |
---|---|
squeue | Ver información de jobs en cola |
sinfo | Ver cola, partición e información del nodo |
sbatch | Enviar un job a través de un script |
srun | Enviar un job interactivo |
scancel | Cancelar jobs en cola |
scontrol | Control e información detallada de jobs, colas y particiones. |
sstat | Ver a nivel de sistema la utilización de recursos (memoria, I/O, energía) |
sacct | Ver a nivel de sistema la utilización de recursos de jobs completados. |
2. Ejemplo básico 1 (multi-thread con OpenMP)
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
3. Ejemplo básico 2 (single thread)
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
4. Ejemplo básico 3 (Array Jobs)
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