Cours d’architecture matérielle


TD-TP d'exploitation d'un "cluster de calcul" 

06/03/2017

Stephane Vialle

Stephane.Vialle@centralesupelec.fr


1 - Accès à un compte utilisateur sur le cluster InterCell du campus de Metz de CentraleSupélec

Vous utiliserez les comptes "hpcrise_1" à "hpcrise_20" pour utiliser le cluster "InterCell" constitué d'environ 200 PC dual-coeurs (en mars 2016) interconnectés par un switch Gigabit Ethernet, et installé sur le campus de Metz de CentraleSupélec.

La machine d'accès à ce cluster est : phome.metz.supelec.fr
Connectez vous sur cette machine et avec votre compte de TP par ssh : ssh phome.metz.supelec.fr -l hpcrise_#

Rmq : Une fois loggué sur cette machine, sous un compte hpcrise_#, exécutez la commande hostname et observez le nom réel de cette machine. Il s'agitd'une machine frontale du cluster, que vous utiliserez pour allouer des noeuds de calculs.

2 - Configuration de votre compte utilisateur sur le cluster 

2.1 - Installation de certificats

Afin de pouvoir exécuter des programmes parallèles sur des dizaines de noeuds du cluster sans avoir à donner votre password à chaque ouverture d'un shell sur un noeud, il faut installer des certificats sur votre compte hpcrise_#.

Rmq : dans ce TP cette opération sera grandement facilité par le montage automatique de votre compte sur tous les noeuds du cluster que vous allouerez! ce qui n'est pas fréquent sur les clusters de calcul.

Installation de vos certificats :
NoHostAuthenticationForLocalhost yes
StrictHostKeyChecking no

Rmq : ce fichier de configuration "non-stricte" de la connexion ssh évitera que vous soit demandé d'accepter explicitement toutes les nouvelles machines auxquelles vous vous connectez pour la première fois.

2.2 - Mise à jour des fichiers .bashrc et .profile

Complétez la configuration de votre compte hpcrise_# pour utiliser la version de OpenMPI stockée sur /opt (le répertoire /opt des noeuds de calculs contient plusieurs versions de MPI et d'autres outils).

Dans votre home directory : completez le fichier .bashrc (ou créez-le) pour pouvoir utiliser OpenMPI :
export PATH=/opt/openmpi/bin:$PATH
export LD_LIBRARY_PATH=/opt/openmpi/lib:$LD_LIBRARY_PATH

ln -s .bashrc .profile

source ~/.bashrc

ou bien déconnectez vous et reconnectez-vous à la machine frontale.

3 - Transfert de fichiers sur votre compte sur cluster et compilation

3.1 - Installation  des sources sur votre compte de TP sur cluster :
cp ~vialle/tmp/MatrixProduct-MPI-OpenMP-OpenBLAS-Dynamic.zip .

3.2 - Test de compilation des fichiers transférés
Une fois l'archive installée sur votre compte de TP à Metz, ouvrez-là (commande 'unzip') et tentez de la compiler : elle contient des fichiers sources et un Makefile.

Rmq : l'application ne peut pas se recompiler sur la machine frontale (entrez make sur la ligne de commande pour essayer), il manque une bibliothèque de calcul scientifique qui n'est installée sur les noeuds de calcul (voir plus loin).

4 - Allocation de noeuds de calculs sur le cluster InterCell, en mode interactif

Utilisation de l'environnement OAR de la communauté Grid5000 pour l'allocation des noeuds de calcul, et pour la soumission et la gestion des tâches :

oarstat [-f] : donne des informations sur les session en cours et en attente
oarsub -p "cluster='icc'" -l nodes=2,walltime=4:00:00 -I : demande 2 noeuds pour une durée de 4h, en mode interactif
oarsub -p "cluster='icc'" -l nodes=2,walltime=4:00:00 <myshell> : demande 2 noeuds pour une durée maximale de 4h, et exécute "myshell" sur le premier de ces 2 noeuds.
oardel <numéro de session> : détruit une session (il faut en être propriétaire).

5 - Test de compilation sur un noeud du cluster, et test d'exécution interactive sur plusieurs noeuds du cluster

L'application de test est un programme MPI (Message Passing Interface, le standard de la programmation sur cluster) + OpenMP (Open Memory Programming, un standard de programmation multithreads sur processeurs multicores). A l'exécution, cette application sera déployée sous la forme d'un ensemble de processus installés sur des noeuds différents (les PCs d'un cluster), et chaque processus créera plusieurs threads qui s'installeront sur les différents coeurs de son noeud.

5.1 - Principes de compilation de l'application de test

Cette application multiplie des matrices carrées dont la longueur du côté doit être précisé à l'exécution, et doit être divisible par le nombre de processus MPI déployés (c-a-d le nombre de PC utilisés).
De plus, par défaut l'application sera compilée pour utiliser au mieux chaque noeud du cluster InterCell quand on l'exécute :
Rmq : cette configuration peut se changer en précisant des options de fonctionnement à l'application ... non exploitées dans ce TP.

Pour compiler l'application :

5.2 - Execution d'un produit de 8192x8182 éléments (au format 'double') sur 4 PCs

Dans la session OAR sur 4 noeuds que vous avez demandée précédemment (section 4)
Exécutez : sort -u $OAR_NODEFILE > mach.txt.

Rmq : vous devez regénérer ce fichier de machines chaque fois que vous ré-allouez des machines (chaque fois que vous faites un 'oarsub').
Exécutez : mpirun  --mca btl ^openib  -np 4  -machinefile mach.txt  ./MatrixProduct -lc 8192
Rmq : un exécution avec un seul processus et l'option "-h" vous indiquera toutes les options de MatrixProduct :
mpirun  --mca btl ^openib  -np 1  -machinefile mach.txt  ./MatrixProduct -h

5.3 - Mesure des performances d'un produit de matrices de 8192x8182 sur 1 à 4 PCs

Refaites très simplement les étapes de la section précédente pour mesurer les performances de votre produit de matrices de 8192x8192 sur 1 et 2 PCs. Completez le fichier Excel (onglet 'Amdahl').

Rappel : on fait cette étude en installant chaque processus sur un PC différent, c-a-d : on déploie 1 seul processus MPI par noeud de calcul (et on ne dépasse pas le nombre de PC alloués).


6 - Compilation et exécution parallèle en mode "batch" sur plusieurs noeuds du cluster 

Objectifs : completer l'étude de performances du produit de matrices de 8192x8192 sur 8, 16, 32, 64 et 128 noeuds de calculs, puis faire une étude similaire avec des matrices de 16384x16384 éléments.  Comme il n'est pas possible d'allouer plus de 4 noeuds en interactif (il n'y en aurait pas assez pour tout le monde), vous allez écrire un shellscript 'launch' et lancer ces calculs sous OAR en mode 'batch'.

Rmq
: Les éditeurs "nano", "vi" et "emacs" sont disponibles sur les noeuds du cluster pour une édition alphanumérique à distance. Ou bien, modifiez des fichiers sur le poste de travail (à Gif) et transportez-les à Metz par "scp" (visez 'phome.metz.supelec.fr') ou "ftp" (visez 'ftp.metz.supelec.fr').

6.1 - Principes du shellscript pour une exécution en 'batch' sans arguments
Une exécution en mode 'batch' se commande depuis la machine frontale (vous vous deloguerez du noeud ic_xxx où vous étiez) : il vous faudra indiquer à 'oarsub' d'exécuter le shellscript 'launch' au lieu de terminer par l'option "-I" :

Exemple d'allocation de 8 noeuds et d'exécution du shellscript 'launch' sur un des noeud : oarsub -l nodes=8 './launch'

Vous récupérerez alors deux fichiers 'OARxxxxx.stderr' et 'OARxxxxxx.stdout' dans le répertoire où vous aurez lancé l'exécution en mode batch. Ils contiendront la trace de votre exécution parallèle. Au final le fichier 'stderr' ne devrait rien contenir.

Ecrivez un shellscript 'launch' qui va réaliser UNE exécution d'un  produit de matrices de 8192x8192 sur 8 PCs. Votre script devra :
Attention, vous devez rendre votre shellscript exécutable à l'aide de la commande : chmod 700 launch

Testez votre shellscript en soumettant votre calcul en 'batch' à OAR 
: oarsub -l nodes=8 './launch'. Vérifier l'état de votre batch par oarstat, et attendez qu'il soit terminé et disparaisse des jobs listés par oarstat.

6.2 - Création d'un  shellscript paramétrable (avec des arguments)
Modifiez votre shellscript pour que l'on puisse spécifier la taille du coté des matrices et le nombre de processus MPI en paramètre sur la ligne de commande.
Exemple d'exécution sur 8 noeuds avec le nouveau shellscript : oarsub -l nodes=8 './launch 8192 8'

Vérifiez le bon fonctionnement de votre script.

6.3 - Préparation et exécution de calculs en mode batch, pour des matrices de 8192x8192
ATTENTION : demandez toujours à OAR le nombre de noeuds de calcul STRICTEMENT NECESSAIRES. Demandez 16 noeuds pour une exécution en 16 processus sur 16 machines, et ne demandez que 2 noeuds pour une exécution en 2 processus sur 2 machines. Sur un cluster de production on ne demande jamais de machines pour ne rien faire (ne demandez pas 128 noeuds pour une exécution sur 16 noeuds!).

ATTENTION : Vous allouez bien des noeuds de calculs sur lesquels vous serez seul, mais vous partagez le switch avec les autres utilisateurs. Donc vos performances peuvent fluctuer d'une exécution à l'autre, même avec des configurations identiques.
Rmq : Sur un cluster de production, plus on demande de noeuds et moins on est prioritaire. Le 'job' soumis peut même être automatiquement mis dans une file d'attente qui ne passe que la nuit, ou que les week ends! Mieux vaut donc éviter de demander "trop" de noeuds.

6.4 - Calculs en mode batch sur des matrices de 16384x16384 ( = 16*1024)

Reprenez l'étude précédente avec des matrices de 16x1024 = 16384 éléments de côté.

7 - Etude du passage à l'échelle à temps d'exécution constant

Un "passage à l'échelle" signifie habituellement que l'on augmente à la fois la taille du problème et le nombre de noeuds de calculs : on traite un plus gros problème sur un plus gros cluster. Une démarche classique consiste à maintenir le temps d'exécution constant : profiter d'une plus grosse machine de calcul pour traiter un problème plus gros (ou plus précisément) dans le même laps de temps. Ex : faire des calculs de météo plus précis, mais toujours communiquer les résultats pour 20h le soir.

Ecrivez un script qui enchaîne les tests nécessaire pour remplir les tables de l'onglet "Gustafson" du fichier Excel.

Obtenez vous un temps d'exécution à peu près constant ?

Regardez dans le fichier comment sont estimés les performances "idéale" que l'on devrait observer. Vous en éloignez vous beaucoup ? Est-il simple d'estimer la taille de problème traitable dans le même temps sur un nombre donné de noeuds de calculs (est-il possible de "conseiller un utilisateur")?

8 - Récupération des fichiers de résultats sur le poste de travail à Gif

A partir d'une commande de type "ftp" (visez ftp.metz.supelec.fr) ou "scp" (WinSCP) (visez phome.metz.supelec.fr) : rapatriez les fichiers de trace d'exécution (OARxxxxx.yyyy) sur votre poste de travail à Gif.

En général on aime archiver ce genre de fichier de trace d'exécution.