Instalación de SLURM con RPM's

Requisitos

  • El nodo submit.
  • Un servidor para ser el controlador de SLURM (puede ser el mismo submit).
  • Uno o varios nodos de cálculo (workers).

Instalación de paquetes

Para poder instalar slurm es necesario tener configurado el repositorio EPEL (Extra Packages for Enterprise Linux). En caso de no tenerlo, se puede instalar con el siguiente comando:

# yum -y install epel-release

Una vez que se tiene el repositorio EPEL, se deben instalar diversos paquetes.

Para los 3 tipos de nodo (submit, controller y workers) se instalan los siguientes paquetes:

# yum -y install slurm slurm-devel slurm-perlapi slurm-torque slurm-contribs slurm libs slurm-doc slurm-pmi slurm-pmi-devel
En el nodo controlador de SLURM se instala:
# yum -y install slurm-slurmctld

En los nodos de cálculo o workers:

# yum -y install slurm-slurmd slurm-pam_slurm

Munge

SLURM requiere de Munge para realizar la comunicación entre nodos. Los paquetes de Munge se instalan como dependencias de los paquetes de SLURM.

Configuración de Munge

Para configurar Munge se requieren los siguientes pasos:

  • Agregar al usuario munge en todos los nodos.
  • Creación de la llave munge.
  • Cambio de pertenencia de los directorios de munge.
  • Inicio del servicio munge.

Agregar al usuario munge

Para agregar al usuario, se deben ejecutar los siguientes comandos en todos los nodos:

# groupadd -g 991 munge
# useradd -u 991 -g munge -c "MUNGE Uid 'N' Gid Emporium" -d /var/lib/munge -s /sbin/nologin munge

Creación de la llave munge

Creamos un archivo con contenido aleatorio utilizando /dev/urandom y lo guardamos en el archivo /etc/munge/munge.key sólo en el nodo controlador de SLURM:

# dd if=/dev/urandom bs=1 count=1024 > /etc/munge/munge.key
Copiamos la llave generada a todos los nodos. Se puede utilizar el comando scp. En el siguiente ejemplo se copia al nodo "n1":
# scp /etc/munge/munge.key n1:/etc/munge/munge.key
En cada nodo, los permisos de la llave munge deben ser r-------- y debe de tener a munge como dueño y grupo:
# chmod 400 /etc/munge/munge.key
# chown munge. /etc/munge/munge.key

Cambio de pertenencia de los directorios de munge

Se tiene que verificar en todos los nodos que los siguientes directorios le pertenecen al usuario munge y tienen los permisos correctos:

# chown munge. /etc/munge/ /var/log/munge/ /var/lib/munge 
# chmod 700 /etc/munge/ /var/log/munge/ /var/lib/munge
Por último, se cambia el propietario del directorio /run/munge en todos los nodos:
# chown munge. /run/munge

Inicio del servicio munge

Una vez configurado todo, se inicia el servicio munge:

# systemctl enable --now munge
Podemos verificar que el servicio inició bien con:
# systemctl status munge

SLURM

Una vez que Munge está configurado y funcionando, se debe realizar la configuración de SLURM.

Para ello se requieren realizar las siguientes actividades: - Creación del usuario slurm. - Configuración de SLURM. - Inicio de los servicios de slurm.

Creación del usuario SLURM

El usuario slurm debe existir en todos los nodos, para crearlo se ejecutan los comandos:

# groupadd -g 992 slurm
# useradd -u 992 -g slurm -c "SLURM workload manager" -d /var/lib/slurm -s /bin/bash slurm

Configuración de SLURM

El archivo /etc/slurm/slurm.conf es el que contiene toda la configuración de SLURM. Toda la configuración mencionada a continuación debe realizarse en este archivo.

Note

El archivo /etc/slurm/slurm.conf debe estar presente en todos los nodos y debe contener la misma información, de manera que si se edita para agregar, modificar o eliminar configuraciones, éste debe copiarse a todos los nodos nuevamente.

Se deben cambiar los valores de algunas líneas preexistentes en el archivo y quedar como se muestra a continuación:

ControlMachine=nodo.controlador.grid.mx
ControlAddr=192.168.1.1
ClusterName=NombreDelCluster
SlurmctldLogFile=/var/log/slurm/slurmctld.log
SlurmdLogFile=/var/log/slurm/slurmd.log
SlurmSchedLogFile=/var/log/slurm/slurmsched.log
SlurmSchedLogLevel=3
MpiDefault=none

Note

Cambiar el nombre del nodo controlador, la dirección IP y el nombre del cluster a lo que corresponda

También deben eliminarse las siguientes líneas preexistentes:

NodeName=localhost CPUs=1 State=UNKNOWN
PartitionName=debug Nodes=localhost Default=YES MaxTime=INFINITE State=UP
Y agregar la línea de definición de los nodos de cálculo. La siguiente línea es un ejemplo para 7 nodos iguales:
NodeName=n[1-7] CPUs=32 Boards=1 SocketsPerBoard=2 CoresPerSocket=16 ThreadsPerCore=1 RealMemory=257471 State=UNKNOWN
Los datos de los nodos de cálculo pueden obtenerse ejecutando el comando siguiente en el nodo de cálculo:
#   slurmd -C
NodeName=n1 CPUs=32 Boards=1 SocketsPerBoard=2 CoresPerSocket=16 ThreadsPerCore=1 RealMemory=257477
UpTime=79-03:46:49
Por último creamos una partición en SLURM:
PartitionName=grid Nodes=ALL Default=YES MaxTime=INFINITE State=UP
Esta partición no tiene límites de ejecución y considera a todos los nodos de cálculo.

Inicio de los servicios de slurm

Una vez configurado, podemos iniciar el servicio de SLURM.

En el nodo controlador:

# systemctl enable --now slurmctld
En todos los nodos de cálculo:
# systemctl enable --now slurmd

Verificación de la instalación

En el nodo controlador, podemos ejecutar el siguiente comando para verificar las particiones:

# sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
grid*        up   infinite      7   idle n[1-7]

Contribución


Autores de esta página: Eduardo Iván Ortega Alarcón

Autores del sitio:

Última revisión de esta página: 2023-03-21