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/14 10:24] – [Protocole d'installation] foisysfr:install:clafoutis:ubuntu_cluster_install [2025/09/07 16:40] (Version actuelle) – [Protocole d'installation] foisys
Ligne 22: Ligne 22:
       * Un système physique d'installation des RPi, ou bien en rack ou en bloc.       * Un système physique d'installation des RPi, ou bien en rack ou en bloc.
         * 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?
 +    * 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.
 +    * 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...
  
 ===== Configuration logicielle en pré-requis ===== ===== Configuration logicielle en pré-requis =====
Ligne 53: Ligne 58:
 192.168.a.xy4 minion04  192.168.a.xy4 minion04 
 </sxh> </sxh>
 +
 +  * 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...
 +update_etc_hosts: true
 +# ...devient:
 +#update_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:   * 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:
Ligne 129: Ligne 147:
 </accordion-item> </accordion-item>
  
-<accordion-item title="Étape 2: Installation des logiciels mariadb et slurmdbd ">+<accordion-item title="Étape 2: Installation des logiciels MariaDB et SLURMDBD ">
  
   * Une grappe de calcul est la plupart du temps une ressource partagée par un ensemble. Pour assurer le suivi des opérations et de l'usage fait d'une grappe, il est nécessaire d'avoir des fonctions de journalisation spécifiques aux programmes de la suite SLURM: c'est le programme ''sacct''. Dans une grappe Super-Clafoutis, surtout destinée à une recherche individuelle, ''sacct''  est aussi très utile car c'est avec lui qu'il est possible de comprendre pourquoi des tâches ne pourraient avoir été exécutées ou complétées.   * Une grappe de calcul est la plupart du temps une ressource partagée par un ensemble. Pour assurer le suivi des opérations et de l'usage fait d'une grappe, il est nécessaire d'avoir des fonctions de journalisation spécifiques aux programmes de la suite SLURM: c'est le programme ''sacct''. Dans une grappe Super-Clafoutis, surtout destinée à une recherche individuelle, ''sacct''  est aussi très utile car c'est avec lui qu'il est possible de comprendre pourquoi des tâches ne pourraient avoir été exécutées ou complétées.
Ligne 164: Ligne 182:
 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)
- 
-mysql> create database slurm_job_db;  
-Query OK, 1 row affected (0.04 sec)  
 </sxh> </sxh>
  
Ligne 174: Ligne 189:
 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) 
-# 
-mysql> grant all privileges on slurm_job_db.* to 'slurm'@'localhost';  
-Query OK, 0 rows affected (0.03 sec)  
 </sxh> </sxh>
  
Ligne 215: Ligne 227:
 </accordion-item> </accordion-item>
  
-<accordion-item title="Étape 3: Installation de SLURM sur le noeud contrôleur">+<accordion-item title="Étape 3: Installation de SLURMCTLD sur le noeud contrôleur">
  
   * 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:
Ligne 231: Ligne 243:
 <sxh bash>  <sxh bash> 
 # Le nom de la grappe # Le nom de la grappe
-ClusterName=biobunch+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
Ligne 257: Ligne 269:
 </sxh> </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.  Il faut terminer la configuration avec les commandes suivantes:+  * 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:
 <sxh bash> <sxh bash>
 % sudo mkdir -p /var/spool/slurmctld % sudo mkdir -p /var/spool/slurmctld
 % sudo chown slurm:slurm /var/spool/slurmctld % sudo chown slurm:slurm /var/spool/slurmctld
 % sudo chmod 755 /var/spool/slurmctld % 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_jobcomp.log
 +% 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''.
Ligne 274: Ligne 291:
   * 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>
-<accordion-item title="Étape 4: Installation de SLURM sur les noeud de calcul">+<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:   * N'oubliez pas de copier le fichier ''/etc/slurm/slurm.conf'' sur vos noeuds de travail!! Assurez-vous d'avoir les bonnes permissions:
Ligne 289: Ligne 306:
 </sxh> </sxh>
  
-  * Encore une fois, vous ne devriez pas voir d'erreur ;-)+  * 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:   * Vérifier que le serveur ''gru'' voit les machines:
Ligne 320: Ligne 343:
  
  
 +===== Comment utiliser SLURM pour exécuter des tâches sur une grappe de calcul  =====
 +==== En utilisant la commande srun ====
 +
 +Page man pour ''srun'': [[https://manpages.ubuntu.com/manpages/noble/man1/srun.1.html|Manuel]]
 +
 +  * La commande ''srun'' exécutée sur le noeud contrôleur (dans notre cas, ''gru'') délèguera l'exécution d'une //commande// à un des noeuds de calcul. À moins que le noeud soit spécifié, l'exécution se fera via SLURM en choisissant un noeud selon la configuration utilisée par ''slurmctld''.
 +  *  Un exemple banal:
 +<sxh bash>
 +% srun hostname
 +minion01
 +% srun --nodelist=minion02 hostname
 +minion02
 +% srun --nodelist=minion0[1,2] hostname
 +minion02
 +minion01
 +</sxh>
 +
 +==== En utilisant la commande sbatch ====
 +
 +Page man pour ''sbatch'': [[https://manpages.ubuntu.com/manpages/noble/man1/sbatch.1.html|Manuel]]
 +
 +  * La commande ''sbatch'' exécutée sur le noeud contrôleur (dans notre cas, ''gru'') délèguera l'exécution d'un //script//; c'est un nuance importante car le script est capable de permettre l'exécution d'une série complexe de commandes. À moins que le noeud soit spécifié, l'exécution se fera via SLURM en choisissant un noeud selon la configuration utilisée par ''slurmctld''.
 +  *  Un exemple simple de script:
 +<sxh bash>
 +À venir...
 +</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 =====
 +
 +[[https://medium.com/@hghcomphys/building-slurm-hpc-cluster-with-raspberry-pis-step-by-step-guide-ae84a58692d5|Building a Slurm HPC Cluster with Raspberry Pi’s: Step-by-Step Guide]]
  
 [[https://glmdev.medium.com/building-a-raspberry-pi-cluster-784f0df9afbd|Building a Raspberry Pi cluster: Part I - The basics]] [[https://glmdev.medium.com/building-a-raspberry-pi-cluster-784f0df9afbd|Building a Raspberry Pi cluster: Part I - The basics]]