bioinfo@ird.fr

Trainings 2019 – Admin HPC – module 2 – installation slurm – FR

Installation de slurm

Description Installation de Slurm sur centos 7
Supports de cours liés HPC Administration Module2
Authors Ndomassi TANDO (ndomassi.tando@ird.fr)
Creation Date 23/09/2019
Last Modified Date 23/09/2019

Sommaire


Definition

Slurm is an open source, fault-tolerant, and highly scalable cluster management and job scheduling system for large and small Linux clusters.

https://slurm.schedmd.com/


Authentification et bases de données:

Créer les utilisateurs pour munge et slurm:

Slurm et Munge requièrent d'avoir les mêmes UID et GID sur chaque noeud du cluster.
Pour tous les noeuds, lancer les commandes suivantes avant d'installer Slurm ou Munge:

$ export MUNGEUSER=1001
$ groupadd -g $MUNGEUSER munge
$ useradd  -m -c "MUNGE Uid 'N' Gid Emporium" -d /var/lib/munge -u $MUNGEUSER -g munge  -s /sbin/nologin munge
$ export SLURMUSER=1002
$ groupadd -g $SLURMUSER slurm
$ useradd  -m -c "SLURM workload manager" -d /var/lib/slurm -u $SLURMUSER -g slurm  -s /bin/bash slurm

Installation de Munge pour l'authentification:

$ yum install epel-release -y
$ yum install munge munge-libs munge-devel -y

Créer une clé d'authentification Munge:

$ /usr/sbin/create-munge-key

Copier la clé d'authentification sur chaque noeud:

$ cp /etc/munge/munge.key /home
$ cexec cp /home/munge.key /etc/munge

Mettre les droits:

$ chown -R munge: /etc/munge/ /var/log/munge/ /var/lib/munge/ /run/munge/
$ chmod 0700 /etc/munge/ /var/log/munge/ /var/lib/munge/ /run/munge/
$ cexec chown -R munge: /etc/munge/ /var/log/munge/ /var/lib/munge/ /run/munge/
$ cexec chmod 0700 /etc/munge/ /var/log/munge/ /var/lib/munge/ /run/munge/

Activer et démarrer le service munge service:

$ systemctl enable munge
$ systemctl start munge
$ cexec systemctl enable munge
$ cexec systemctl start munge

Tester munge depuis la machine maître:

$ munge -n | unmunge
$ munge -n | ssh <somehost_in_cluster> unmunge

installation et configuration de Mariadb

Installer mariadb avec la commande:

$ yum install mariadb-server -y

Activer et démarrer le service mariadb:

$ systemctl start mariadb
systemctl enable mariadb

sécuriser l'installation:

Mettre en place un mot de passe root pour mariadb:

$ mysql_secure_installation

Modifier la configuration innodb :

Mettre des valeurs plus importantes pour innodb_lock_wait_timeout,innodb_log_file_size:

Créer le fichier /etc/my.cnf.d/innodb.cnf avec les lignes suivantes:

[mysqld]
 innodb_buffer_pool_size=1024M
 innodb_log_file_size=64M
 innodb_lock_wait_timeout=900

Pour mettre en place ces changements, il faut redémarrer et supprimer les fichiers de logs:

$ systemctl stop mariadb
 mv /var/lib/mysql/ib_logfile? /tmp/
 systemctl start mariadb

Installation de Slurm:

Installer les pré-requis:

$ yum install openssl openssl-devel pam-devel rpmbuild numactl numactl-devel hwloc hwloc-devel lua lua-devel readline-devel rrdtool-devel ncurses-devel man2html libibmad libibumad -y

Récupérer le tarball

$ wget https://download.schedmd.com/slurm/slurm-19.05.0.tar.bz2

Créer les RPMs:

$ rpmbuild -ta slurm-19.05.0.tar.bz2

Les RPMs sont situés dans /root/rpmbuild/RPMS/x86_64/

Installer slurm sur la machine maître et les noeuds

Dans le répertoire des RPMs, lancer la commande:

$ yum --nogpgcheck localinstall slurm-*

Créer et configurer la base de données slurm_acct_db:

$ mysql -u root -p
 mysql> grant all on slurm_acct_db.* TO 'slurm'@'localhost' identified by 'some_pass' with grant option;
 mysql> create database slurm_acct_db;

Configurer la slurm db backend:

Modifier /etc/slurm/slurmdbd.conf avec les paramètres suivants:

AuthType=auth/munge
  DbdAddr=192.168.1.250
  DbdHost=master0
  SlurmUser=slurm
  DebugLevel=4
  LogFile=/var/log/slurm/slurmdbd.log
  PidFile=/var/run/slurmdbd.pid
  StorageType=accounting_storage/mysql
  StorageHost=master0
  StoragePass=some_pass
  StorageUser=slurm
  StorageLoc=slurm_acct_db

Ensuite activer et lancer le service slurmdbd

$ systemctl start slurmdbd
$ systemctl enable slurmdbd
$ systemctl status slurmdbd

Cela permettra de créer les tables de la base slurm_acct_db.

Configuration du fichier /etc/slurm/slurm.conf:

Lancer la commande lscpu sur chacun des noeuds pour avoir des informations sur les processeurs.

Aller sur http://slurm.schedmd.com/configurator.easy.html pour créer un fichier de configuration pour Slurm.

Modifier les paramètres suivants dans /etc/slurm/slurm.conf en fonction des caractéristiques de votre cluster:

ClusterName=IRD
 ControlMachine=master0
 ControlAddr=192.168.1.250
 SlurmUser=slurm
 AuthType=auth/munge
 StateSaveLocation=/var/spool/slurmd
 SlurmdSpoolDir=/var/spool/slurmd
 SlurmctldLogFile=/var/log/slurm/slurmctld.log
 SlurmdDebug=3
 SlurmdLogFile=/var/log/slurm/slurmd.log
 AccountingStorageHost=master0
 AccountingStoragePass=3devslu!!
 AccountingStorageUser=slurm
 NodeName=node21 CPUs=16 Sockets=4 RealMemory=32004 CoresPerSocket=4 ThreadsPerCore=1 State=UNKNOWN
 PartitionName=r900 Nodes=node21 Default=YES MaxTime=INFINITE State=UP

Il faut maintenant envoyer les fichiers slurm.conf et slurmdbd.conf sur tous les noeuds de calcul.

$ cp /etc/slurm/slurm.conf /home
$ cp /etc/slurm/slurmdbd.conf /home
$ cexec cp /home/slurm.conf /etc/slurm
$ cexec cp /home/slurmdbd.conf /etc/slurm

Créer les répertoires pour accueillir les logs

Sur la machine maître:

$ mkdir /var/spool/slurmctld
$ chown slurm:slurm /var/spool/slurmctld
$ chmod 755 /var/spool/slurmctld
$ mkdir  /var/log/slurm
$ touch /var/log/slurm/slurmctld.log
$ touch /var/log/slurm/slurm_jobacct.log /var/log/slurm/slurm_jobcomp.log
$ chown -R slurm:slurm /var/log/slurm/

Sur les noeuds de calcul:

$ mkdir /var/spool/slurmd
$ chown slurm: /var/spool/slurmd
$ chmod 755 /var/spool/slurmd
$ mkdir /var/log/slurm/
$ touch /var/log/slurm/slurmd.log
$ chown -R slurm:slurm /var/log/slurm/slurmd.log

tester la configuration:

$ slurmd -C

On doit obtenir quellque chose comme:

NodeName=master0 CPUs=16 Boards=1 SocketsPerBoard=2 CoresPerSocket=4 ThreadsPerCore=2 RealMemory=23938 UpTime=22-10:03:46

Lancer le service slurmd sur les noeuds de calcul:

$ systemctl enable slurmd.service
$ systemctl start slurmd.service
$ systemctl status slurmd.service

Lancer le service slurmctld sur la machine maître:

$ systemctl enable slurmctld.service
$ systemctl start slurmctld.service
$ systemctl status slurmctld.service

Changer l'état d'un noeud de down à idle

$ scontrol update NodeName=nodeX State=RESUME

Où nodeX est le nom du noeud.

Modification du fichier de configuration /etc/slurm/slurm.conf:

Lorsque l'on modifie le fichier /et/slurm/slurm.conf il faut propager ce fichier sur tous les noeuds puis taper la commande suivante sur la machine maître:

$ scontrol reconfig

Configurer les limites d'utilisation

Modifier le fichier /etc/slurm/slurm.conf

Modifier le paramètre AccountingStorageEnforce avec:

AccountingStorageEnforce=limits

Copier le fichier modifié sur les noeuds

Redémarrer le service slurmctld pour mettre en place ces modifications:

$ systemctl restart slurmctld

Créer un cluster:

Le cluster est le nom que l'on veut donner au cluster slurm.

Dans le fichier /etc/slurm/slurm.conf, changer la ligne suivante:

ClusterName=ird

Pour mettre en place des limites d'utilisation, il faut créer un accounting cluster avec la commande:

$sacctmgr add cluster ird

Créer un accounting account

Un accounting account est un group créer sous Slurm qui permet à l'administrateur de gérer les droits des utilisateurs pour utiliser Slurm.

Exemple: création d'un groupe pour regrouper les membre de l'équipe bioinfo:

$ sacctmgr add account bioinfo Description="bioinfo member"

Création d'un groupe pour permettre aux utilisateurs d'utiliser la parttion gpu

$ sacctmgr add account gpu_group Description="Members can use the gpu partition"

Créer un user account

En positionnant la valeur limts dans le fichier /etc/slurm/slurm.conf, on doit créer des utilisateurs slurm pour que ceux-ci puissent lancer des jobs.

$ sacctmgr create user name=xxx DefaultAccount=yyy

Modifier un user account pour le rajouter à un nouveau accounting account:

$ sacctmgr add user xxx Account=zzzz

Modifier la description d'un noeuds de calcul

Ajouter le montant de la partition /scratch

Dans le fichier /etc/slurm/slurm.conf

Modifier la variable TmpFS avec la valeur de scratch
$TmpFS=/scratch
Ajouter la valeur TmpDisk pour /scratch

Le TmpDisk est la taille de la partition /scratch en Mo, à rajouter dans la ligne commençant par NodeName

Par exemple, pour un noeud avec 3To de disque:

$ NodeName=node21 CPUs=16 Sockets=4 RealMemory=32004 TmpDisk=3000 CoresPerSocket=4 ThreadsPerCore=1 State=UNKNOWN

Modifier une définition de partition

Une partition est une file d'attente comportant plusieurs noeuds et de nombreuses caractéristiques en terme de limites de temps, de mémoire disponible etc...

Une partition permet de prioriser les jobs entre utilisateurs.

Modifier la ligne commençant par PartitionName dans le fichier /etc/slurm/slurm.conf .

Plusieurs options sont disponibles selon ce qu'on veut faire

Ajouter une limitation de temps pour les running jobs (MaxTime)

Une limitation de temps sur les partitions permet à Slurm de gérer les priorités entre les jobs sur le même noeud.

On peut l'ajouter à la ligne commençant par PartitionName avec le montant en minutes

Par exemple pour une partition avec 1 jour maximum, la définition de la partition sera:

PartitionName=short Nodes=node21,node[12-15]  MaxTime=1440 State=UP

Ajouter une mémoire maximum par CPU (MaxMemPerCPU)

Comme la mémoire est une ressource consommable, MaxMemPerCPU sert non seulement à protéger la mémoire du noeud mais augmentera automatiquement le nombre de coeurs maximum quand c'est possible.

On doit l'ajouter sur la ligne PartitionName avec le montant de la mémoire en Mo.

MaxMemPerCPU est normalement fixé avec le rapport MaxMem/NumCores

Par exemple 2Go/CPU, la définition de la partition sera

PartitionName=normal Nodes=node21,node[12-15] MaxMemPerCPU=2000 MaxTime=4320 State=UP

Liens


License

The resource material is licensed under the Creative Commons Attribution 4.0 International License (here).