s.l.u.r.m

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
s.l.u.r.m [2024/05/05 23:54]
admin [3.2. Ejemplo básico 2 (single thread)]
s.l.u.r.m [2024/09/16 17:58] (current)
Line 1: Line 1:
 +====== Utilización de SLURM ======
 +
 +SLURM Workload Manager o formalmente (Simple Linux Utility for Resource Management) es un sistema de gestión de trabajos en clústeres de código abierto, el cual es tolerante a fallas y altamente escalable para clústeres Linux grandes y pequeños.
 +
 +
 +==== Funciones principales ====
 +
 +  - Asigna a los usuarios acceso exclusivo y/o no exclusivo a recursos de cómputo por un tiempo determinado,​ permitiéndoles así ejecutar trabajos (jobs) asignados.
 +  - Provee un marco 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 trabajos pendientes.
 +
 +
 +==== ¿Cómo se encarga Slurm de gestionar los trabajos? ====
 +
 +  * Ejecutando el trabajo
 +  * Asignando recursos de cómputo solicitados por el trabajo
 +  * Reportando la salida de su ejecución al usuario.
 +
 +
 +==== Pasos para ejecutar un trabajo ====
 +
 +  * Preparar un script (el formato del script se encuentra a continuación)
 +  * Enviar trabajo para ejecución.
 +
 +
 +===== 1. Comandos básicos de Slurm =====
 +
 +A continuación se muestran los comandos básicos utilizados para realizar la mayoría de las operaciones básicas con SLURM:
 +
 +^Comando^Descripción|
 +|squeue|Ver estado de los trabajos en la cola|
 +|sinfo|Ver información de los nodos de cómputo|
 +|sbatch|Enviar un trabajo a través de un script, para su posterior ejecución|
 +|srun|Ejecutar un trabajo interactivo|
 +|scancel|Eliminar un trabajo|
 +
 +
 +===== 2. Parámetros básicos de comandos =====
 +
 +Existen [[https://​slurm.schedmd.com/​man_index.html|páginas de manual]] para todos los comandos de Slurm, las cuales contienen información más detallada. El parámetro ''​--help''​ además proporciona un breve resumen de las opciones de cada comando. A continuación se muestra el resumen de los parámetros que más se suelen utilizar en SLURM por cada comando básico:
 +
 +
 +==== 2.1. Envío de Trabajo (srun y sbatch) ====
 +
 +|**Comando SLURM** |**Descripción** |
 +|–mem-per-cpu=<​megabytes>​|Memoria requerida para el trabajo por CPU asignada (en MegaBytes). El valor predeterminado es 1024 MB.|
 +|-n, –ntasks=<​cantidad de tareas>​|Número de tareas (procesos) que serán asignadas para el trabajo.|
 +|-c, –cpus-per-task=<​cpus>​|Número de CPUs (hilos) requeridas por tarea. El valor especificado aquí es el número "​mínimo"​ de CPU que se asignará a su trabajo. Si hay CPU adicionales disponibles en un nodo más allá de lo solicitado, su trabajo recibirá esas CPU hasta que otros trabajos las necesiten. El valor predeterminado es 1 CPU. Intentar usar más CPU de las que se le asignaron dará como resultado que sus procesos adicionales se turnen en la misma CPU (ralentizando su trabajo).|
 +|-J <​name>,​ –jobname=<​name>​|Especificar un nombre a tu trabajo|
 +|-o <​STDOUT_log>,​ –output=<​STDOUT_log>​|Archivo en el que se desea almacenar la salida del trabajo. Usted puede especificar %j como parte del nombre de archivo de registro para indicar la ID del trabajo (como ejemplo, "#​SBATCH -o ouptut_%j.o"​ redirigiría la salida a "​output_123456.o"​).|
 +|-e <​STDERR_log>,​ –error=<​STDERR_log>​|Archivo en el que se desea almacenar mensajes de error de trabajo. Funciona exactamente igual que "​-o"​.|
 +|-t, –time=<​days-hours:​minutes:​seconds>​ \\ (ej. –time=08:​00:​00)|Permite ajustar el límite de tiempo del trabajo|
 +|–array=<​índices>​ \\  \\ (ej. –array=1-80)|Envía una lista (arreglo) de trabajos idénticos. Solo aplica para sbatch.|
 +|–export=<​name[=value]>​ \\ (ej. –export=ALL)|Exportar variables de entorno identificadas|
 +|–nodes=<​nodos>​|Cantidad de nodos de cómputo a utilizar|
 +|–account=<​cuenta>​ \\ (ej. –account=dsmith)|Asignar el nombre de cuenta para monitorear el trabajo|
 +
 +
 +==== 2.2. Gestión de Trabajo ====
 +
 +**scancel**
 +
 +|–name=<​name>​|Cancela trabajos con nombre especificado|
 +|–user=<​name>​|Cancela trabajos del usuario especificado|
 +
 +**squeue**
 +
 +|–jobs=<​job_id_list>​|Lista separada por comas de IDs de trabajo para mostrar|
 +|–name=<​name>​|Permite ver sólo trabajos con nombres especificados|
 +|–users=<​names>​|Permite ver sólo trabajos para usuarios especificados|
 +
 +
 +===== 3.1. 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 //gromacs// a través de slurm:
 +<​code>​
 +#!/bin/bash
 +
 +#SBATCH --job-name=ejemplo1-simulacion ​ # Nombre de la simulación,​ reemplazar según sea el caso
 +#SBATCH --nodes=2 ​                      # Número de nodos donde se enviará el trabajo, el clúster posee 3 nodos de cómputo
 +#SBATCH --nodelist=n002,​n003 ​           # Nodos específicos seleccionados (n001: Lautaro , n002: Troquil , n003: Soroban)
 +#SBATCH --tasks-per-node=10 ​            # Número de tareas a ejecutar por cada nodo asignado, de forma simultánea
 +#SBATCH --cpus-per-task=1 ​              # Número de núcleos a utilizar por tarea asignada
 +#SBATCH --export=ALL ​                   # Exporta todas las variables de entorno
 +#SBATCH --time=01:​00:​00 ​                # Establece el máximo tiempo de ejecución (HH:MM:SS)
 +#SBATCH --mem=20G ​                      # Memoria reservada para la simulación (en este caso 4 GB)
 +
 +#Programas o módulos necesarios para ejecutar esta simulación
 +module load gromacs/​2024.1-fftw-3.3.10-openmpi-4.1.6
 +
 +# Ejecutar la simulación con gmx_mpi
 +mpirun gmx_mpi mdrun -deffnm my_input_file
 +
 +</​code>​
 +
 +Para enviar este script a slurm, crear un job, y comenzar el procesamiento se requiere ejecutar el siguiente comando:
 +
 +<​code>​
 +sbatch ejemplo1.sh
 +
 +</​code>​
 +
 +=====   =====
 +
 +
 +===== 3.2. Ejemplo básico 2 (single thread) =====
 +
 +Este es un ejemplo de un script (ejemplo2.sh) con los elementos mínimos para ejecutar el programa //python// a través de slurm. Este ejemplo envía un trabajo de 1 hilo a slurm con los parámetros del script, y con limitaciones establecidas al usuario y la partición.
 +<​code>​
 +#!/bin/bash
 +
 +#SBATCH --job-name=ejemplo2-simulacion ​ # Nombre de la simulación,​ reemplazar según sea el caso
 +#SBATCH --nodes=1 ​                      # Número de nodos donde se enviará el trabajo, el clúster posee 3 nodos de cómputo
 +#SBATCH --nodelist=n002 ​                # Nodos específicos seleccionados (n001: Lautaro , n002: Troquil , n003: Soroban)
 +#SBATCH --tasks-per-node=1 ​             # Número de tareas a ejecutar por cada nodo asignado, de forma simultánea
 +#SBATCH --cpus-per-task=1 ​              # Número de núcleos a utilizar por tarea asignada
 +#SBATCH --export=ALL ​                   # Exporta todas las variables de entorno
 +#SBATCH --time=00:​01:​00 ​                # Establece el máximo tiempo de ejecución (HH:MM:SS)
 +#SBATCH --mem=10G ​                      # Memoria reservada para la simulación
 +
 +# A partir de aquí puede ejecutar cualquier simulación que requiera alto cómputo
 +module load python/​3.12.1 ​              #​Módulo necesario cargado previamente,​ necesario para la simulación
 +python --version
 +
 +</​code>​
 +
 +Para enviar este script a slurm, crear un job, y comenzar el procesamiento se requiere lo siguiente:
 +
 +<​code>​
 +sbatch ejemplo2.sh
 +
 +</​code>​
 +
 +----
 +
 +
 +===== 3.3. Ejemplo básico 3 (Array Jobs) =====
 +
 +Este ejemplo (ejemplo3.sh) muestra como enviar varias tareas utilizando la propiedad de array-jobs en slurm, para más detalles consultar [[https://​slurm.schedmd.com/​job_array.html|documentación oficial de slurm]] para ver todas las posibilidades ofrecidas en Array-Jobs.
 +<​code>​
 +
 +#!/bin/bash
 +
 +#SBATCH --job-name=ejemplo3-simulacion ​ # Nombre de la simulación,​ reemplazar según sea el caso
 +#SBATCH --nodes=1 ​                      # Número de nodos donde se enviará el trabajo, el clúster posee 3 nodos de cómputo
 +#SBATCH --nodelist=n003 ​                # Nodos específicos seleccionados (n001: Lautaro , n002: Troquil , n003: Soroban)
 +#SBATCH --tasks-per-node=1 ​             # Número de tareas a ejecutar por cada nodo asignado, de forma simultánea
 +#SBATCH --cpus-per-task=1 ​              # Número de núcleos a utilizar por tarea asignada
 +#SBATCH --export=ALL ​                   # Exporta todas las variables de entorno
 +#SBATCH --time=00:​01:​00 ​                # Establece el máximo tiempo de ejecución (HH:MM:SS)
 +#SBATCH --mem=4G ​                       # Memoria reservada para la simulación
 +#SBATCH --array=1-40 ​                   # Número de tareas similares que se ejecutan como una matriz de trabajos
 +
 +# A partir de aquí puede ejecutar cualquier simulación que requiera alto cómputo
 +module load python/​3.12.1 ​              #​Módulo necesario cargado previamente,​ necesario para la simulación
 +whoami
 +hostname
 +python --version
 +
 +</​code>​
 +
 +Luego se ejecuta el siguiente comando para enviar el trabajo a la cola:
 +
 +<​code>​
 +sbatch ejemplo3.sh
 +
 +</​code>​
 +
  
  • s.l.u.r.m.1714964048.txt.bz2
  • Last modified: 2024/09/16 17:58
  • (external edit)