superuser, capable d'utiliser la commande sudo./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)./etc/hosts:
# Sur gru % sudo hostnamectl set-hostname gru # Sinon, sur chaque noeud de calcul: % sudo hostnamectl set-hostname minion0x
/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):
# Super Clafoutis 192.168.a.xy0 gru 192.168.a.xy1 minion01 192.168.a.xy2 minion02 192.168.a.xy3 minion03 192.168.a.xy4 minion04
/etc/hosts pour y mettre ses propres entrées à chaque mise à jour cloud.cfg qui se trouve sous /etc/cloud:
% sudo nano /etc/cloud/cloud.cfg
#) devant cette ligne et sauvegarder le fichier:
# Cette ligne… manage_etc_hosts: true # …devient: #manage_etc_hosts: true
# Sur gru | Pas besoin d'utiliser de phrase d'accès donc simplement presser enter lorsque demandé
% ssh-keygen -t rsa
# On copie la clé sur chaque minion
% for i in {1..4}; do ssh-copy-id monUsager@minion0$i;done
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.
% sudo apt install -y munge libmunge-dev
munge sera créé sur chaque système, le processus munged sera démarré par cet usager et les permissions nécessaires seront données au répertoire /etc/munge et /etc/default/munge/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:
OPTIONS="–syslog –key-file /etc/munge/munge.key"
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…:
% sudo -u munge mungekey –force –verbose
mungekey crée une clé de 1024 bits, bien assez pour un usage de labo, sous /etc/mungemunge et vérifier qu'il fonctionne (les lignes affichées ne devraient pas contenir le mot ERROR ou FAILED…):
% sudo -u munge systemctl start munge && systemctl status munge
% for i in `seq 1 4`; do sudo scp /etc/munge/munge.key minion0${i}:/etc/munge/munge.key; done
# Sur chaque minion:
% sudo chown munge:munge /etc/munge/munge.key
% sudo chmod 400 /etc/munge/munge.key
% sudo systemctl restart munge
# Vous ne devriez pas voir de message d'erreur…
% systemctl status munge
# Sur chaque minion # A faire pour tous les minions pour s'assurer que ça fonctionne entre tout le monde. % ssh minion01 munge -n | unmunge # Vous devriez voir une sortie au terminal qui ressemble à ça: STATUS: Success (0) ENCODE_HOST: minion01 (192.168.1.xy1) ENCODE_TIME: 2022-07-02 10:36:24 -0400 (1656772584) DECODE_TIME: 2022-07-02 10:36:30 -0400 (1656772590) TTL: 10 CIPHER: aes128 (4) MAC: sha256 (5) ZIP: none (0) UID: bioubuntu (1030) GID: users (100) LENGTH: 0
munge soit démarré à chaque redémarrage des serveurs:
# Sur chaque RPi de la grappe % sudo systemctl enable munge
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.mysql_secure_installation, choisissez les paramètres les plus robustes tel que:root (faire attention: root de MySQL n'est pas le même que root du système);anonymous;root;test./etc/mysql/mariadb.conf.d/50-server.cnf; dans la section InnoDB, mettre ou décommenter les lignes suivantes:
# Sur un RPi 5 16Gb; la moitié si 8Gb innodb_buffer_pool_size=8192M innodb_log_file_size=256M innodb_lock_wait_timeout=900
slurm, qui effectuera toutes les opérations sur les bases de données de SLURM:
# On opère MariaDB comme si c'était MySQL, en tant qu'usager root de MariaDB % mysql -u root -p # On entre dans MariaDB et le prompt mysql> vous le démontre! # Evidemment, le mot de passe est à votre discrétion… Ici, ce n'est que pour # des fins de démonstration; vous êtes averti… mysql> CREATE USER 'slurm'@'localhost' IDENTIFIED BY 'bioubuntu'; Query OK, 0 rows affected (0.16 sec)
# mysql> create database slurm_acct_db; Query OK, 1 row affected (0.04 sec)
slurm:
# mysql> grant all privileges on slurm_acct_db.* to 'slurm'@'localhost'; Query OK, 0 rows affected (0.02 sec)
slurmdbd sur gru uniquement:
% sudo apt install slurmdbd
slurmdbd, appelé /etc/slurm/slurmdbd.conf avec les infos suivantes:
AuthType=auth/munge AuthInfo=/var/run/munge/munge.socket.2 DbdHost=localhost DbdAddr=localhost StoragePort=3306 StorageUser=slurm # Evidemment, mettre celui que vous aurez choisi ci-dessus # Ici, c'est pour l'exemple :-) StoragePass=bioubuntu StorageType=accounting_storage/mysql LogFile=/var/log/slurm/slurmdbd.log PidFile=/var/run/slurmdbd/slurmdbd.pid SlurmUser=slurm
% sudo touch /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/slurmdbd.conf % sudo chmod 600 /etc/slurm/slurmdbd.conf % sudo systemctl enable –now slurmdbd % sudo systemctl status slurmdbd
SLURM via apt sur tous les RPi:
% sudo apt install -y slurmctld
slurm.conf sous /etc/slurm.
# sudo nano /etc/slurm/slurm.conf
# Le nom de la grappe ClusterName=superclafoutis # Le nom du serveur sur lequel fonctionne le processus slurmctld SlurmctldHost=gru AuthType=auth/munge ProctrackType=proctrack/cgroup SchedulerType=sched/backfill SelectType=select/cons_tres # Le nom de l'usager à qui appartient le processus slurmctld SlurmUser=slurm StateSaveLocation=/var/spool/slurmctld SlurmdSpoolDir=/var/spool/slurmd SlurmctldPidFile=/var/run/slurm/slurmctld.pid SlurmdPidFile=/var/run/slurm/slurmd.pid # L'information pour slurmdbd AccountingStorageType=accounting_storage/slurmdbd AccountingStorageHost=gru AccountingStorageUser=slurm # Les infos sur les noeuds qui feront les tâches NodeName=minion01 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=minion04 Sockets=1 CoresPerSocket=4 ThreadsPerCore=1 State=UNKNOWN # On regroupe tous les noeuds dans une même partition PartitionName=biobunch Nodes=ALL Default=YES MaxTime=120 State=UP
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.
% sudo mkdir -p /var/spool/slurmctld % sudo chown slurm:slurm /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
slurm.conf sur tous les RPi faisant partie de la liste des noeuds de travail au même endroit sous /etc/slurm.gru, faites les commandes suivantes:
% sudo systemctl enable slurmctld % sudo systemctl restart slurmctld % sudo systemctl status slurmctld
/etc/slurm/slurm.conf sur vos noeuds de travail!! Assurez-vous d'avoir les bonnes permissions:
# Sur chaque RPi de calcul % sudo chown root:root /etc/slurm/slurm.conf
slurmd et on s'assure que ça fonctionne:
% sudo apt install -y slurmd libpmix-dev % sudo systemctl enable slurmd % sudo systemctl restart slurmd % systemctl status slurmd
% 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
gru voit les machines:
% sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST biobunch* up 2:00:00 4 idle minion[01-04]
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:
# Pour minion01 par ex.: % sudo scontrol update nodename=minion01 state=idle
% srun –nodelist=minion[01-04] hostname minion01 minion02 minion03 minion04
Page man pour srun: Manuel
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.
% srun hostname minion01 % srun --nodelist=minion02 hostname minion02 % srun --nodelist=minion0[1,2] hostname minion02 minion01
Page man pour sbatch: Manuel
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.
À venir...
sinfo, on peut voir la santé des noeuds de calcul de la grappe et avoir une vue d'ensemble des ressources;scontrol, on peut voir plus spécifiquement les tâches en action et les ressources disponibles pour un noeud spécifique;sstat, on peut voir en temps réel les détails sur une tâche en particulier;squeue, on voit les tâches en cours et les tâches en attente de manière globale.Building a Slurm HPC Cluster with Raspberry Pi’s: Step-by-Step Guide
Building a Raspberry Pi cluster: Part I - The basics
Building a Raspberry Pi cluster: Part II - Some simple jobs
Building a Raspberry Pi cluster: Part III - OpenMPI, Python, and Parallel Jobs
SLURM in Ubuntu clusters - Part 1
SLURM in Ubuntu clusters - Part 2
Slurm Setup the Easy Way on Ubuntu 24.04: A practical guide to building your first HPC Cluster