====== ====== ====== 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. ==== SLURM cumple tres 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 y * Reportando la salida de la ejecución al usuario. ==== Ejecutar un job requiere al menos los siguientes pasos: ==== * 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 simulacion reemplazar por nombre apropiado #SBATCH --nodes=1 #Numero de nodos donde se ejecutara la simulacion, siempre es 1 para Soroban #SBATCH --tasks-per-node=40 #40 es el numero de procesos a ejecutar en el servidor Soroban, reemplazar por la cantidad adecuada #SBATCH --mem=100G #Memoria reservada para esta simulacion en el servidor #SBATCH --partition=intel #Particion donde se enviaran los trabajos en este caso la particion general se llama intel. module load namd/Git-2019-11-27_Linux-x86_64-multicore #programas o modulos necesarios para ejecutar esta simulacion, 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 minimos para ejecutar el programa R-3.6.1 a través de slurm: #!/bin/bash #shell usada por el usuario, para este baso es BASH #SBATCH -J R-NOMBRE-SIMULACION #Reemplazar R-nombre-simulacion por el nombre correspondiente a la simulación #SBATCH --nodes=1 #Número de nodos a donde se enviara la simulacion, para soroban es 1. #SBATCH --tasks-per-node=1 #Numero de tares por nodo, en este caso es 1 porque es una tarea single-thread #SBATCH --mem=100G #cantidad de memoria reservada para esta simulacion, 100G, reemplazar por valor adecuado #SBATCH --partition=intel #Nombre de la particion slurm donde se enviara las simulaciones en este caso la particion general se llama "intel" module load R/3.6.1 "Modulos necesarios para ejecutar la simulacion, para este ejemplo solamente es necesario 'module load 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 parametros del script, y con limitaciones establecidas al usuario y la partición ---- ===== 4. Ejemplo básico 3 (Array Jobs) ===== [[https://slurm.schedmd.com/job_array.html|Este ejemplo muestra como enviar varios 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 simulacion reemplazar segun el caso #SBATCH -a 1-11%3 # #SBATCH --nodes=1 #Número de nodos donde se enviara el trabajo, siempe es 1 para Soroban #SBATCH --tasks-per-node=1 #Número de hilos a ejecutar simultaneamente #SBATCH --mem=100G #Memoria reservada para la simulacion #SBATCH --partition=intel #Particion general donde se enviara la simulación, llamada 'intel' module load R/3.6.1 #Modulo 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 informacion de los ID de cada elemento de array-job enviado chmod +x ejemplo3.sh sbatch ejemplo3.sh