Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
fr:install:clafoutis:ubuntu_cluster_install [2025/08/17 13:44] – [Installation du matériel] foisysfr:install:clafoutis:ubuntu_cluster_install [2025/10/25 17:27] (Version actuelle) – [Protocole d'installation] foisys
Ligne 23: Ligne 23:
         * Exemple [[https://www.uctronics.com/raspberry-pi/uctronics-19-1u-raspberry-pi-rack-mount-with-ssd-mounting-brackets.html|ici]] et [[https://www.uctronics.com/raspberry-pi/uctronics-desktop-cluster-enclosure-4-raspberry-pis-2-5-ssd-front-removable-trays.html|ici]] (à titre de démonstration)         * Exemple [[https://www.uctronics.com/raspberry-pi/uctronics-19-1u-raspberry-pi-rack-mount-with-ssd-mounting-brackets.html|ici]] et [[https://www.uctronics.com/raspberry-pi/uctronics-desktop-cluster-enclosure-4-raspberry-pis-2-5-ssd-front-removable-trays.html|ici]] (à titre de démonstration)
  
-  * Qu'en est-il de l'utilisation du processeur graphique (//GPU//) dans un contexte de calcul distribué? Il est très utile de déléguer au GPU certaines/plusieurs tâches de calcul et la bio-informatique ne fait pas exception :-) Cependant, faire ça avec les Raspberry Pi n'est pas une très bonne idée... Pourquoi? +  * Qu'en est-il de l'utilisation du processeur graphique (//GPU//) dans un contexte de calcul distribué? Il est très utile de déléguer au GPU certaines/plusieurs tâches de calcul et la bio-informatique ne fait pas exception :-) Cependant, faire ça avec les Raspberry Pi n'est pas une très bonne idée… Pourquoi? 
-    * Les meilleurs GPU demandent beaucoup, beaucoup de puissance et dégagent beaucoup, beaucoup de chaleur :-(  +      * Les meilleurs GPU demandent beaucoup, beaucoup de puissance et dégagent beaucoup, beaucoup de chaleur :-( 
-    * Le GPU installé sur les RPI 4/5 sont bien pour gérer une interface graphique à la Xfce mais ne sont pas très puissants pour faire autre chose. +      * Le GPU installé sur les RPI 4/5 sont bien pour gérer une interface graphique à la Xfce mais ne sont pas très puissants pour faire autre chose. 
-    * Mais le plus gros problème reste un problème logiciel. La pile logicielle la plus souvent utilisée en HPC est CUDA de Nvidia qui n'existe tout simplement pas pour les RPi. Il existe une alternative, OpenCL, mais l'utiliser sur RPi demande une interface logicielle de compatibilité, ce qui vient bouffer une partie de la puissance du GPU pour faire la conversion entre les deux éléments. De plus, il existe très peu de logiciels en bio-informatique qui utiliser OpenCL...+      * Mais le plus gros problème reste un problème logiciel. La pile logicielle la plus souvent utilisée en HPC est CUDA de Nvidia qui n'existe tout simplement pas pour les RPi. Il existe une alternative, OpenCL, mais l'utiliser sur RPi demande une interface logicielle de compatibilité, ce qui vient bouffer une partie de la puissance du GPU pour faire la conversion entre les deux éléments. De plus, il existe très peu de logiciels en bio-informatique qui utilise OpenCL… 
  
 ===== Configuration logicielle en pré-requis ===== ===== Configuration logicielle en pré-requis =====
  
-  * Ces instructions assument que vous êtes l'usager ayant les privilèges de ''super user'', capable d'utiliser la commande ''sudo''+  * Ces instructions assument que vous êtes l'usager ayant les privilèges de ''superuser'', capable d'utiliser la commande ''sudo''
-  * Tous les RPi ont accès aux volumes partagés par le NAS (via NFS) sous ''/opt/bio''  (afin d'avoir les mêmes applications), ''/home''  (pour que les RPi puissent écrire sur le même espace) et tout autre répertoire nécessaire (par exemple, ''/shares/data'' pour le stockage des données partagées). +  * Tous les RPi ont accès aux volumes partagés par le NAS (via NFS) sous ''/opt/bio''  (afin d'avoir les mêmes applications), ''/home''  (pour que les RPi puissent écrire sur le même espace) et tout autre répertoire nécessaire (par exemple, ''/shares/data''  pour le stockage des données partagées).
   * Si nécessaire. installer les librairies nécessaires sur les noeuds de calcul.   * Si nécessaire. installer les librairies nécessaires sur les noeuds de calcul.
   * Nous installerons le système de gestion des tâches [[https://slurm.schedmd.com/overview.html|SLURM]] et ses dépendances, le système d'authentification pour grappe de calcul [[https://github.com/dun/munge|MUNGE]] et le système de base de données [[https://www.mariadb.com|MariaDB]] pour la gestion des données provenant des tâches exécutées.   * Nous installerons le système de gestion des tâches [[https://slurm.schedmd.com/overview.html|SLURM]] et ses dépendances, le système d'authentification pour grappe de calcul [[https://github.com/dun/munge|MUNGE]] et le système de base de données [[https://www.mariadb.com|MariaDB]] pour la gestion des données provenant des tâches exécutées.
 +
  
 ===== Protocole d'installation ===== ===== Protocole d'installation =====
  
-<accordion> <accordion-item title="Étape 0: Opérations préliminaires" show> +<accordion> 
 +<accordion-item title="Étape 0: Opérations préliminaires" show>
   * Si ça n'a pas été encore fait, il faut changer le nom de chaque machine pour que ça corresponde au fichier ''/etc/hosts'':   * Si ça n'a pas été encore fait, il faut changer le nom de chaque machine pour que ça corresponde au fichier ''/etc/hosts'':
- 
 <sxh bash>  <sxh bash> 
 # Sur gru  # Sur gru 
 % sudo hostnamectl set-hostname gru  % sudo hostnamectl set-hostname gru 
 # Sinon, sur chaque noeud de calcul:  # Sinon, sur chaque noeud de calcul: 
-% sudo hostnamectl set-hostname minion0x  +% sudo hostnamectl set-hostname minion0x </sxh>
-</sxh>+
  
   * Modifiez le fichier ''/etc/hosts''  de tous les ordis qui feront partie de la grappe en inscrivant les infos associant nom de serveur et adresse IP. Par exemple, pour une grappe de 5 ordis où ''gru''  est le contrôleur et les ordis ''minion01''  à ''minion04''  seront les noeuds de calcul, on écrit ceci à la fin du fichier (les valeurs *.a.xy0 à *.a.xy4 sont évidemment spécifiques à votre réseau):   * Modifiez le fichier ''/etc/hosts''  de tous les ordis qui feront partie de la grappe en inscrivant les infos associant nom de serveur et adresse IP. Par exemple, pour une grappe de 5 ordis où ''gru''  est le contrôleur et les ordis ''minion01''  à ''minion04''  seront les noeuds de calcul, on écrit ceci à la fin du fichier (les valeurs *.a.xy0 à *.a.xy4 sont évidemment spécifiques à votre réseau):
- 
 <sxh bash>  <sxh bash> 
 # Super Clafoutis  # Super Clafoutis 
Ligne 56: Ligne 55:
 192.168.a.xy2 minion02  192.168.a.xy2 minion02 
 192.168.a.xy3 minion03  192.168.a.xy3 minion03 
-192.168.a.xy4 minion04 +192.168.a.xy4 minion04
 </sxh> </sxh>
  
-  * Pour faciliter l'accès inter-machines, utilisons l'accès SSH sans mot de passe via la création et l'installation d'une clé d'authentification:+  * Ubuntu a la fâcheuse manie d'effacer tout ce qui se trouve dans le fichier ''/etc/hosts''  pour y mettre ses propres entrées à chaque mise à jour :-( Il faut lui dire de ne pas faire ça! Ouvrer le fichier ''cloud.cfg''  qui se trouve sous ''/etc/cloud'': 
 +<sxh bash>  
 +% sudo nano /etc/cloud/cloud.cfg  
 +</sxh>
  
 +  * Éditer le fichier en mettant un dièse (''#'') devant cette ligne et sauvegarder le fichier:
 +
 +<sxh bash> 
 +# Cette ligne… 
 +manage_etc_hosts: true 
 +# …devient: 
 +#manage_etc_hosts: true
 +</sxh>
 +
 +  * Pour faciliter l'accès inter-machines, utilisons l'accès SSH sans mot de passe via la création et l'installation d'une clé d'authentification:
 <sxh bash>  <sxh bash> 
 # Sur gru | Pas besoin d'utiliser de phrase d'accès donc simplement presser enter lorsque demandé  # Sur gru | Pas besoin d'utiliser de phrase d'accès donc simplement presser enter lorsque demandé 
Ligne 68: Ligne 80:
 </sxh> </sxh>
  
-  * Pour le bon fonctionnement de ''slurm'' et des scripts exécutés, les identificateurs d'usager (UUID) et de groupe (GUID) **doivent être identiques à ceux du serveur NFS** pour tous les RPi de la grappe. Si nécessaire, il faudra les modifier dans les fichiers ''/etc/passwd''  et ''/etc/group'' de chaque RPi. +  * Pour le bon fonctionnement de ''slurm''  et des scripts exécutés, les identificateurs d'usager (UUID) et de groupe (GUID) **doivent être identiques à ceux du serveur NFS**  pour tous les RPi de la grappe. Si nécessaire, il faudra les modifier dans les fichiers ''/etc/passwd''  et ''/etc/group''  de chaque RPi.
-</accordion-item>+
  
 +</accordion-item>
 <accordion-item title="Étape 1: Installation de MUNGE"> <accordion-item title="Étape 1: Installation de MUNGE">
  
Ligne 76: Ligne 88:
  
 <sxh bash>  <sxh bash> 
-% sudo apt install -y munge libmunge-dev+% sudo apt install -y munge libmunge-dev 
 </sxh> </sxh>
  
Ligne 82: Ligne 94:
  
   * Dans le fichier ''/etc/default/munge''  de chaque ordi de la grappe, insérer la ligne suivante dans le fichier ''/etc/default/munge''  (par ex., via ''nano'') ou retirer le dièse (#) pour décommander la ligne si elle est présente:   * Dans le fichier ''/etc/default/munge''  de chaque ordi de la grappe, insérer la ligne suivante dans le fichier ''/etc/default/munge''  (par ex., via ''nano'') ou retirer le dièse (#) pour décommander la ligne si elle est présente:
-<sxh bash>  
-OPTIONS="–syslog –key-file /etc/munge/munge.key"  
-</sxh> 
  
-  * Créer une clé d'encryption sur le contrôleur ''gru''  qui sera utilisée pour les communications entre les noeuds. L'installation de ''munge'' via ''apt'' en crée une mais je suis un tantinet parano...:+<sxh bash> OPTIONS="–syslog –key-file /etc/munge/munge.key" </sxh>
  
-<sxh bash> % sudo -u munge mungekey --force --verbose </sxh>+  * Créer une clé d'encryption sur le contrôleur ''gru''  qui sera utilisée pour les communications entre les noeuds. L'installation de ''munge''  via ''apt''  en crée une mais je suis un tantinet parano…: 
 + 
 +<sxh bash> % sudo -u munge mungekey force verbose </sxh>
  
   * Par défaut, ''mungekey''  crée une clé de 1024 bits, bien assez pour un usage de labo, sous ''/etc/munge'';-) De plus, il aura les bonnes permissions.   * Par défaut, ''mungekey''  crée une clé de 1024 bits, bien assez pour un usage de labo, sous ''/etc/munge'';-) De plus, il aura les bonnes permissions.
  
   * Démarrer/re-démarrer le service ''munge''  et vérifier qu'il fonctionne (les lignes affichées ne devraient pas contenir le mot ''ERROR''  ou ''FAILED''…):   * Démarrer/re-démarrer le service ''munge''  et vérifier qu'il fonctionne (les lignes affichées ne devraient pas contenir le mot ''ERROR''  ou ''FAILED''…):
-<sxh bash>  
-% sudo -u munge systemctl start munge && systemctl status munge  
-</sxh> 
  
-  * Il faut maintenant copier la clé d'encryption qui se trouve sur le contrôleur. +<sxh bash> % sudo -u munge systemctl start munge && systemctl status munge </sxh> 
 + 
 +  * Il faut maintenant copier la clé d'encryption qui se trouve sur le contrôleur.
  
 <sxh bash>  <sxh bash> 
 % for i in `seq 1 4`; do sudo scp /etc/munge/munge.key minion0${i}:/etc/munge/munge.key; done  % for i in `seq 1 4`; do sudo scp /etc/munge/munge.key minion0${i}:/etc/munge/munge.key; done 
-# Sur chaque minion: +# Sur chaque minion:  
-% sudo chown munge:munge /etc/munge/munge.key +% sudo chown munge:munge /etc/munge/munge.key  
-% sudo chmod 400 /etc/munge/munge.key +% sudo chmod 400 /etc/munge/munge.key  
-% sudo systemctl restart munge +% sudo systemctl restart munge  
-# Vous ne devriez pas voir de message d'erreur... +# Vous ne devriez pas voir de message d'erreur…  
-% systemctl status munge+% systemctl status munge 
 </sxh> </sxh>
  
   * Il reste à vérifier que les RPi se reconnaissent:   * Il reste à vérifier que les RPi se reconnaissent:
 +
 <sxh bash>  <sxh bash> 
 # Sur chaque minion  # Sur chaque minion 
Ligne 125: Ligne 136:
 UID: bioubuntu (1030)  UID: bioubuntu (1030) 
 GID: users (100)  GID: users (100) 
-LENGTH: 0 </sxh>+LENGTH: 0  
 +</sxh>
  
   * Pour s'assurer que le service ''munge''  soit démarré à chaque redémarrage des serveurs:   * Pour s'assurer que le service ''munge''  soit démarré à chaque redémarrage des serveurs:
  
 <sxh bash>  <sxh bash> 
-# Sur chaque RPi de la grappe +# Sur chaque RPi de la grappe  
-% sudo systemctl enable munge </sxh> +% sudo systemctl enable munge  
 +</sxh> 
 </accordion-item> </accordion-item>
  
Ligne 147: Ligne 160:
  
   * Il faut ajouter quelques paramètres dans le fichier de config ''/etc/mysql/mariadb.conf.d/50-server.cnf''; dans la section ''InnoDB'', mettre ou décommenter les lignes suivantes:   * Il faut ajouter quelques paramètres dans le fichier de config ''/etc/mysql/mariadb.conf.d/50-server.cnf''; dans la section ''InnoDB'', mettre ou décommenter les lignes suivantes:
-<sxh bash> + 
-# Sur un RPi 5 16Gb; la moitié si 8Gb +<sxh bash>  
-innodb_buffer_pool_size=8192M +# Sur un RPi 5 16Gb; la moitié si 8Gb  
-innodb_log_file_size=256M +innodb_buffer_pool_size=8192M  
-innodb_lock_wait_timeout=900+innodb_log_file_size=256M  
 +innodb_lock_wait_timeout=900 
 </sxh> </sxh>
  
   * Les premières étapes se font dans MariaDB ;-) Commençons par créer l'usager ''slurm'', qui effectuera toutes les opérations sur les bases de données de SLURM:   * Les premières étapes se font dans MariaDB ;-) Commençons par créer l'usager ''slurm'', qui effectuera toutes les opérations sur les bases de données de SLURM:
 +
 <sxh bash>  <sxh bash> 
 # On opère MariaDB comme si c'était MySQL, en tant qu'usager root de MariaDB  # On opère MariaDB comme si c'était MySQL, en tant qu'usager root de MariaDB 
Ligne 165: Ligne 180:
  
   * Ensuite on crée les bases de données nécessaires:   * Ensuite on crée les bases de données nécessaires:
 +
 <sxh bash>  <sxh bash> 
-#  +
-mysql> create database slurm_acct_db;  + mysql> create database slurm_acct_db;  
-Query OK, 1 row affected (0.04 sec) +Query OK, 1 row affected (0.04 sec) </sxh>
-#  +
-mysql> create database slurm_job_db;  +
-Query OK, 1 row affected (0.04 sec)  +
-</sxh>+
  
   * On termine la mise en place sur MySQL en donnant les permissions nécessaires à l'usager ''slurm'':   * On termine la mise en place sur MySQL en donnant les permissions nécessaires à l'usager ''slurm'':
 +
 <sxh bash>  <sxh bash> 
-#+
 mysql> grant all privileges on slurm_acct_db.* to 'slurm'@'localhost';  mysql> grant all privileges on slurm_acct_db.* to 'slurm'@'localhost'; 
-Query OK, 0 rows affected (0.02 sec)  +Query OK, 0 rows affected (0.02 sec) </sxh> 
-# + 
-mysql> grant all privileges on slurm_job_db.to 'slurm'@'localhost';  +  On installe le package ''slurmdbd''  sur ''gru''  uniquement:
-Query OK, 0 rows affected (0.03 sec)  +
-</sxh>+
  
-  * On installe le package ''slurmdbd'' sur ''gru'' uniquement: 
 <sxh>  <sxh> 
 % sudo apt install slurmdbd  % sudo apt install slurmdbd 
Ligne 190: Ligne 200:
  
   * Il faut créer un fichier de configuration pour ''slurmdbd'', appelé ''/etc/slurm/slurmdbd.conf''  avec les infos suivantes:   * Il faut créer un fichier de configuration pour ''slurmdbd'', appelé ''/etc/slurm/slurmdbd.conf''  avec les infos suivantes:
 +
 <sxh bash>  <sxh bash> 
 AuthType=auth/munge  AuthType=auth/munge 
Ligne 198: Ligne 209:
 StorageUser=slurm  StorageUser=slurm 
 # Evidemment, mettre celui que vous aurez choisi ci-dessus  # Evidemment, mettre celui que vous aurez choisi ci-dessus 
-# Ici, c'est pour l'exemple :-)+# Ici, c'est pour l'exemple :-) 
 StoragePass=bioubuntu  StoragePass=bioubuntu 
 StorageType=accounting_storage/mysql  StorageType=accounting_storage/mysql 
 LogFile=/var/log/slurm/slurmdbd.log  LogFile=/var/log/slurm/slurmdbd.log 
 PidFile=/var/run/slurmdbd/slurmdbd.pid  PidFile=/var/run/slurmdbd/slurmdbd.pid 
-SlurmUser=slurm  +SlurmUser=slurm </sxh>
-</sxh>+
  
   * Assurez-vous d'avoir les bonnes permissions:   * Assurez-vous d'avoir les bonnes permissions:
 +
 <sxh bash>  <sxh bash> 
-% sudo touch /etc/slurm/accounting_password +% sudo touch /etc/slurm/accounting_password  
-% sudo echo 'votre_mot_de_passe_mariadb_pour_usager_slurm' > /etc/slurm/accounting_password +% sudo echo 'votre_mot_de_passe_mariadb_pour_usager_slurm' > /etc/slurm/accounting_password  
-% sudo chown slurm:slurm /etc/slurm/accounting_password +% sudo chown slurm:slurm /etc/slurm/accounting_password  
-% sudo chown slurm:slurm /etc/slurm/slurmdbd.conf+% sudo chown slurm:slurm /etc/slurm/slurmdbd.conf 
 % sudo chmod 600 /etc/slurm/slurmdbd.conf  % sudo chmod 600 /etc/slurm/slurmdbd.conf 
-% sudo systemctl enable --now slurmdbd +% sudo systemctl enable now slurmdbd  
-% sudo systemctl status slurmdbd +% sudo systemctl status slurmdbd </sxh>
-</sxh>+
  
   * Vous ne devriez pas voir de message d'erreur :-)   * Vous ne devriez pas voir de message d'erreur :-)
 +
 </accordion-item> </accordion-item>
  
Ligne 223: Ligne 234:
  
   * On commence par l'installation de ''SLURM''  via ''apt''  sur tous les RPi:   * On commence par l'installation de ''SLURM''  via ''apt''  sur tous les RPi:
-<sxh bash> % sudo apt install -y slurmctld </sxh>+ 
 +<sxh bash>  
 +% sudo apt install -y slurmctld  
 +</sxh>
  
   * À la suite de cette opération, tous les RPi auront les bons répertoires avec les bonnes permissions ;-)   * À la suite de cette opération, tous les RPi auront les bons répertoires avec les bonnes permissions ;-)
Ligne 229: Ligne 243:
  
 <sxh bash>  <sxh bash> 
- +# sudo nano /etc/slurm/slurm.conf 
-sudo nano /etc/slurm/slurm.conf</sxh>+</sxh>
  
   * Il vous suffit de l'éditer pour qu'il ressemble à ceci:   * Il vous suffit de l'éditer pour qu'il ressemble à ceci:
  
 <sxh bash>  <sxh bash> 
-# Le nom de la grappe +# Le nom de la grappe  
-ClusterName=superclafoutis +ClusterName=superclafoutis  
-# Le nom du serveur sur lequel fonctionne le processus slurmctld +# Le nom du serveur sur lequel fonctionne le processus slurmctld  
-SlurmctldHost=gru +SlurmctldHost=gru  
-AuthType=auth/munge +AuthType=auth/munge  
-ProctrackType=proctrack/cgroup +ProctrackType=proctrack/cgroup  
-SchedulerType=sched/backfill +SchedulerType=sched/backfill  
-SelectType=select/cons_tres +SelectType=select/cons_tres  
-# Le nom de l'usager à qui appartient le processus slurmctld +# Le nom de l'usager à qui appartient le processus slurmctld  
-SlurmUser=slurm +SlurmUser=slurm  
-StateSaveLocation=/var/spool/slurmctld +StateSaveLocation=/var/spool/slurmctld  
-SlurmdSpoolDir=/var/spool/slurmd +SlurmdSpoolDir=/var/spool/slurmd  
-SlurmctldPidFile=/var/run/slurm/slurmctld.pid +SlurmctldPidFile=/var/run/slurm/slurmctld.pid  
-SlurmdPidFile=/var/run/slurm/slurmd.pid +SlurmdPidFile=/var/run/slurm/slurmd.pid  
-# L'information pour slurmdbd +# L'information pour slurmdbd  
-AccountingStorageType=accounting_storage/slurmdbd +AccountingStorageType=accounting_storage/slurmdbd  
-AccountingStorageHost=gru +AccountingStorageHost=gru  
-AccountingStorageUser=slurm +AccountingStorageUser=slurm  
-# Les infos sur les noeuds qui feront les tâches +# Les infos sur les noeuds qui feront les tâches  
-NodeName=minion01 Sockets=1 CoresPerSocket=4 ThreadsPerCore=1 State=UNKNOWN +NodeName=minion01 Sockets=1 CoresPerSocket=4 ThreadsPerCore=1 State=UNKNOWN  
-NodeName=minion02 Sockets=1 CoresPerSocket=4 ThreadsPerCore=1 State=UNKNOWN +NodeName=minion02 Sockets=1 CoresPerSocket=4 ThreadsPerCore=1 State=UNKNOWN  
-NodeName=minion03 Sockets=1 CoresPerSocket=4 ThreadsPerCore=1 State=UNKNOWN +NodeName=minion03 Sockets=1 CoresPerSocket=4 ThreadsPerCore=1 State=UNKNOWN  
-NodeName=minion04 Sockets=1 CoresPerSocket=4 ThreadsPerCore=1 State=UNKNOWN +NodeName=minion04 Sockets=1 CoresPerSocket=4 ThreadsPerCore=1 State=UNKNOWN  
-# On regroupe tous les noeuds dans une même partition +# On regroupe tous les noeuds dans une même partition  
-PartitionName=biobunch Nodes=ALL Default=YES MaxTime=120 State=UP +PartitionName=biobunch  
-</sxh>+Nodes=ALL  
 +Default=YES  
 +MaxTime=120  
 +State=UP </sxh>
  
-  * Remarquez que ''gru''  ne fait pas partie de la liste de noeuds de travail de la grappe. Si il y était, il recevrait des tâches ce qui le ralentirait pour le travail interactif ou bien gérant une interface graphique.  Cependant, si ''gru'' n'accomplit aucune de ces tâches, vous pourriez l'inclure. +  * Remarquez que ''gru''  ne fait pas partie de la liste de noeuds de travail de la grappe. Si il y était, il recevrait des tâches ce qui le ralentirait pour le travail interactif ou bien gérant une interface graphique. Cependant, si ''gru''  n'accomplit aucune de ces tâches, vous pourriez l'inclure.
   * Il faut terminer la configuration avec les commandes suivantes:   * Il faut terminer la configuration avec les commandes suivantes:
-<sxh bash> + 
-% sudo mkdir -p /var/spool/slurmctld +<sxh bash>  
-% sudo chown slurm:slurm /var/spool/slurmctld +% sudo mkdir -p /var/spool/slurmctld  
-% sudo chmod 755 /var/spool/slurmctld +% sudo chown slurm:slurm /var/spool/slurmctld  
-% sudo touch /var/log/slurm/slurmctld.log+% sudo chmod 755 /var/spool/slurmctld  
 +% sudo touch /var/log/slurm/slurmctld.log 
 % sudo touch /var/log/slurm/slurm_jobacct.log  % sudo touch /var/log/slurm/slurm_jobacct.log 
-% sudo touch /var/log/slurm/slurm_jobcomp.log +% sudo touch /var/log/slurm/slurm_jobcomp.log  
-% sudo chown -R slurm:slurm /var/log/slurm +% sudo chown -R slurm:slurm /var/log/slurm </sxh> 
-</sxh> + 
-  * Assurez vous maintenant de copier le fichier ''slurm.conf'' sur tous les RPi faisant partie de la liste des noeuds de travail au même endroit sous ''/etc/slurm''.+  * Assurez vous maintenant de copier le fichier ''slurm.conf''  sur tous les RPi faisant partie de la liste des noeuds de travail au même endroit sous ''/etc/slurm''.
   * Sur ''gru'', faites les commandes suivantes:   * Sur ''gru'', faites les commandes suivantes:
  
Ligne 279: Ligne 297:
 % sudo systemctl enable slurmctld  % sudo systemctl enable slurmctld 
 % sudo systemctl restart slurmctld  % sudo systemctl restart slurmctld 
-% sudo systemctl status slurmctld +% sudo systemctl status slurmctld </sxh>
-</sxh>+
  
-  * Vous ne devriez pas voir de messages d'erreur après la dernière commande.  +  * Vous ne devriez pas voir de messages d'erreur après la dernière commande.
-</accordion-item> +
-<accordion-item title="Étape 4: Installation de SLURMD sur les noeud de calcul">+
  
-  * N'oubliez pas de copier le fichier ''/etc/slurm/slurm.conf'' sur vos noeuds de travail!! Assurez-vous d'avoir les bonnes permissions: +</accordion-item> <accordion-item title="Étape 4: Installation de SLURMD sur les noeud de calcul"> 
-<sxh> + 
-# Sur chaque RPi de calcul +  * N'oubliez pas de copier le fichier ''/etc/slurm/slurm.conf''  sur vos noeuds de travail!! Assurez-vous d'avoir les bonnes permissions: 
-% sudo clown root:root /etc/slurm/slurm.conf+ 
 +<sxh>  
 +# Sur chaque RPi de calcul  
 +% sudo chown root:root /etc/slurm/slurm.conf 
 </sxh> </sxh>
 +
   * Sur chaque noeud de travail, on installe ''slurmd''  et on s'assure que ça fonctionne:   * Sur chaque noeud de travail, on installe ''slurmd''  et on s'assure que ça fonctionne:
 +
 <sxh bash>  <sxh bash> 
-% sudo apt install -y slurmd libpmix-dev+% sudo apt install -y slurmd libpmix-dev 
 % sudo systemctl enable slurmd  % sudo systemctl enable slurmd 
-% sudo systemctl restart slurmd +% sudo systemctl restart slurmd  
-% systemctl status slurmd   +% systemctl status slurmd </sxh>
-</sxh>+
  
   * Encore une fois, vous ne devriez pas voir d'erreur ;-) Sur chacun des noeuds de calcul, il faut ajuster les paramètres pour le stockage des journaux:   * Encore une fois, vous ne devriez pas voir d'erreur ;-) Sur chacun des noeuds de calcul, il faut ajuster les paramètres pour le stockage des journaux:
-<sxh> 
-% sudo chown -R slurm:slurm /var/spool/slurmd 
-% sudo chmod 755 /var/spool/slurmd 
-% sudo touch /var/log/slurm/slurmd.log 
-% sudo chown -R slurm:slurm /var/log/slurm/slurmd.log 
-</sxh>  
  
-  * Vérifier que le serveur ''gru'' voit les machines:+<sxh>  
 +% sudo chown -R slurm:slurm /var/spool/slurmd  
 +% sudo chmod 755 /var/spool/slurmd  
 +% sudo touch /var/log/slurm/slurmd.log  
 +% sudo chown -R slurm:slurm /var/log/slurm/slurmd.log </sxh> 
 + 
 +  * Vérifier que le serveur ''gru''  voit les machines:
  
 <sxh bash>  <sxh bash> 
 % sinfo  % sinfo 
-PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST +PARTITION AVAIL TIMELIMIT NODES STATE NODELIST  
-biobunch*    up    2:00:00        idle minion[01-04] +biobunch* up 2:00:00 4 idle minion[01-04] </sxh>
-</sxh>+
  
-  * Si l'état (''STATE'') d'une machine est à ''drain''  ou à ''down'', exécuter la commande suivante sur le serveur ''gru'' et refaite la commande ''sinfo''  pour vérifier le retour à la normale:+  * Si l'état (''STATE'') d'une machine est à ''drain''  ou à ''down'', exécuter la commande suivante sur le serveur ''gru''  et refaite la commande ''sinfo''  pour vérifier le retour à la normale:
  
 <sxh bash>  <sxh bash> 
-% Sur minion01 par ex.: +# Pour minion01 par ex.: 
 % sudo scontrol update nodename=minion01 state=idle </sxh> % sudo scontrol update nodename=minion01 state=idle </sxh>
  
Ligne 326: Ligne 344:
  
 <sxh bash>  <sxh bash> 
-% srun --nodelist=minion[01-04] hostname +% srun nodelist=minion[01-04] hostname 
 minion01  minion01 
 minion02  minion02 
 minion03  minion03 
 minion04  minion04 
-</sxh>  +</sxh> </accordion-item> </accordion>
-</accordion-item> +
-</accordion>+
  
  
Ligne 363: Ligne 379:
 </sxh> </sxh>
  
 +===== Comment suivre les opérations d'une grappe SLURM  =====
 +
 +  * Dans une grappe de calcul, on a le plus souvent besoin de suivre les paramètres suivants:
 +    * Suivre les ressources disponibles;
 +    * Comment s'exécute les tâches.
 +  * SLURM dispose d'outils de gestion permettant de voir ces paramètres: 
 +    * Avec ''sinfo'', on peut voir la santé des noeuds de calcul de la grappe et avoir une vue d'ensemble des ressources;
 +    * Avec ''scontrol'', on peut voir plus spécifiquement les tâches en action et les ressources disponibles pour un noeud spécifique;
 +    * Avec ''sstat'', on peut voir en temps réel les détails sur une tâche en particulier;
 +    * Avec ''squeue'', on voit les tâches en cours et les tâches en attente de manière globale.
 +  * Ces outils sont pratiques (évidemment!) mais une vue d'ensemble regroupant des informations de toutes ses applications est très utile :-) Il existe quelques solutions libres pour faire le suivi via une page web mais ce sont souvent des outils complexes en installation et qui en vaillent la peine pour de grosse grappes... Deux solutions plus rudimentaires mais tout à fait fonctionnelles sont disponibles:
 +    * Avec [[https://gitlab.com/lkeb/slurm_viewer|Slurm Viewer]], on utilise le terminal pour suivre les opération de la grappe, soir en regardant les nous, soit en suivante les tâches;
 +    * Avec [[https://github.com/hunoutl/slurmtop|slurmtop]], on fait pas mal la mème chose mais la présentation est différente.
 +    * C'est votre choix :-)
 ===== Références ===== ===== Références =====