¡Esta es una revisión vieja del documento!
Tabla de Contenidos
SLURM
Slurm (Simple Linux Utility for Resource Management) es un sistema de gestión de recursos en clusters de computadoras. Nos permite asignar los recursos computacionales (núcleos, memoria, gpu, etc.) de una forma equitativa a medida de su disposición.
Entidades manejadas por los servicios de Slurm
Nodos: Sistema multiprocesador perteneciente al cluster
Particiones: es un mecanismo de agrupar en forma lógica los nodos. Sin importar el número de nodos que se disponen se puede crear la cantidad de particiones que uno desee. Un nodo puede pertenecer a varias particiones. Cada partición tiene sus propios parámetros: tiempo límite de trabajo, usuarios permitidos, que nodos la componen, etc.
Trabajos: Un trabajo o job es la asignación de recursos a un usuario específico por una cantidad de tiempo determinada.
Tareas: Son el conjunto de programas (seriales o paralelas) que serán ejecutadas dentro de un trabajo.
Modo uso de Slurm
Slurm proporciona una interfaz de usuario donde se pueden ejecutar comandos slurm desde el shell del sistema operativo.
El usuario envía los trabajos y Slurm se encarga de ubicarlo en la cola de espera. Si hay recursos pasa a ejecutar el trabajo.
En caso de estar ocupado el trabajo se ejecutará cuando estén disponibles los recursos.
En general, los pasos a seguir para ejecutar un trabajo son:
Scripts: se guardan en un archivo llamado slurm-<JOBID>.out
Comandos para ejecutar un trabajo
Envía el trabajo para ser ejecutado a Slurm. Si no posee recursos para el trabajo el shell queda esperando a que se desocupen. Si posee recursos ejecuta el programa y nos proporciona por la consola los resultados de la ejecución
- [usuario@clemente ~]$ srun <NombrePrograma>
Parámetros de srun
-n, --ntasks: especifica la cantidad de tareas para correr. Por default 1 tarea por 1 CPU.
-j, --job-name: especifica el nombre de la tarea
-N, --nodes: especifica el mínimo de nodos que deben ser reservado para el trabajo
-p, --partition: especifica la partición donde el trabajo se va a ejecutar.
-v -vv -vvv : Aumenta el nivel de verbosidad.
-o <ArchivoSalida>: Redirecciona la salida al archivo especificado.
Ejemplos srun
- [usuario@clemente ~]$ srun -n 2 miPrograma
Ejecuta miPrograma en 2 tareas, cada una en diferentes CPUs
- [usuario@clemente ~]$ srun -n 6 --tasks-per-node=3 --partition=debug miPrograma
Ejecuta miPrograma en 6 tareas distribuida en dos nodos, en la partición debug.
SBATCH es la forma más adecuada de ejecutar un trabajo. Se utiliza un archivo script para la configuración de Slurm y del sistema operativo para ejecutar el trabajo.
- [usuario@clemente ~]$ srun <NombreScriptSlurm>
Parámetros de sbatch
-n, --ntasks: especifica la cantidad de tareas (procesos) para correr
-j, --job-name: especifica el nombre de la tarea
-N, --nodes: especifica el mínimo de nodos que deben ser reservado para el trabajo
-p, --partition: especifica la partición donde el trabajo se va a ejecutar.
--mail-user <email>--mail-type=ALL: Envía un mail notificando el cambio de estado en el trabajo
Ejemplos sbatch
- [usuario@clemente ~]$ sbatch -N2 --name=<nombre> --mail-user= <email@address.com> --mail-type=ALL <NombreScriptSlurm> /li>
Ejecuta el script NombreScriptSlurm en 2 nodos y enviá mail por cambios de estados
- [usuario@clemente ~]$ sbatch -N3 --time=60
Ejecuta el script NombreScriptSlurm en 3 nodos y como limite máximo de tiempo 1 hora .
Para más información ver la sección "Script de lanzamientos y comandos SBATCH".
Ejemplos Script Slurm
- Tarea: ejecutar programas utilizando gpu
- Ejecución: sbatch submit_gpu_job.sh
- Partición: gpu
- Tiempo máximo: 3 días
- submit_gpu_job.sh
- #!/bin/bash
- ### Las líneas #SBATCH configuran los recursos de la tarea
- ### (aunque parezcan estar comentadas)
- ### Nombre de la tarea
- #SBATCH --job-name=gpu_job
- ### Cola de trabajos a la cual enviar.
- #SBATCH --partition=gpu
- #SBATCH --gres=gpu:1
- ### Procesos a largar.
- ### Por defecto, se usa un solo proceso para tareas GPU.
- #SBATCH --ntasks-per-node=1
- ### Tiempo de ejecucion. Formato dias-horas:minutos.
- #SBATCH --time 3-0:00
- ### Script que se ejecuta al arrancar el trabajo
- ### Cargar el entorno del usuario incluyendo la funcionalidad de modules
- ### No tocar
- . /etc/profile
- ### Cargar los módulos para la tarea
- # FALTA: Agregar los módulos necesarios
- module load gcc
- module load cuda
- ### Largar el programa
- # FALTA: Cambiar el nombre del programa
- srun NOMBRE_DEL_PROGRAMA
- Tarea: ejecutar programas utilizando mpi
- Ejecución: sbatch submit_mpi_job.sh
- Partición: batch
- Tiempo máximo: 3 días
- submit_mpi_job.sh
- #!/bin/bash
- ### Las líneas #SBATCH configuran los recursos de la tarea
- ### (aunque parezcan estar comentadas)
- ### Nombre de la tarea
- #SBATCH --job-name=mpi_job
- ### Tiempo de ejecucion. Formato dias-horas:minutos.
- #SBATCH --time 3-0:00
- ### Numero de procesos a ser lanzados.
- #SBATCH --ntasks=2
- ### Nombre de partcion
- #SBATCH --partition=batch
- ### Script que se ejecuta al arrancar el trabajo
- ### Cargar el entorno del usuario incluyendo la funcionalidad de modules
- ### No tocar
- . /etc/profile
- ### Cargar los módulos para la tarea
- # FALTA: Agregar los módulos necesarios
- module load gcc
- module load openmpi
- ### Largar el programa con los cores detectados
- ### La cantidad de nodos y cores se detecta automáticamente
- # FALTA: Cambiar el nombre del programa
- srun NOMBRE_DEL_PROGRAMA
- Tarea: ejecutar programas utilizando OPENMP
- Ejecución: sbatch openmp
- Partición: batch
- Tiempo máximo: 3 días
- LICENSE
- This is free and unencumbered software released into the public domain.
- distribute this software, either in source code form or as a compiled
- binary, for any purpose, commercial or non-commercial, and by any
- means.
- In jurisdictions that recognize copyright laws, the author or authors
- of this software dedicate any and all copyright interest in the
- software to the public domain. We make this dedication for the benefit
- of the public at large and to the detriment of our heirs and
- successors. We intend this dedication to be an overt act of
- relinquishment in perpetuity of all present and future rights to this
- software under copyright law.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- OTHER DEALINGS IN THE SOFTWARE.
- For more information, please refer to <https://unlicense.org>