Un cluster de calcul possède toujours
un environnement d'allocation/gestion de ses noeuds de calculs, et de
lancement et gestion de programmes batch ou de sessions interactives.
Dans le cas des clusters du
Data Center d'Enseignement de CentraleSupélec il s'agit de l'environnement "OAR" de la
communauté GRID'5000 (grille d'expérimentation française).
- Constitution des clusters :
- Sarah est un cluster de 32 PCs contenant chacun 2 processeurs Intel Haswell octo-coeurs hyperthreadés, et
installés sous Linux. Les 32 "noeuds de calcul" sont interconnectés
par un unique switch 10-Gigabit Ethernet standard.
- Kyle est un cluster de 66 PCs contenant chacun 2 processeurs Intel Skylake octo-coeurs hyperthreadés, et
installés sous Linux. Les 32 "noeuds de calcul" sont interconnectés
par deux switchs 10-Gigabit Ethernet standard.
Vous vous
connecterez par ssh sur la frontale 'vera.ic', et vous ne vous connecterez PAS sur les noeuds de calcul par ssh, mais seulement grace aux commandes OAR.
- Utilisation d'OAR pour créer des sessions de travail interactives :
- La commande 'oarstat' permet de voir les 'sessions' en cours d'exécution et en attente sur le cluster.
- Sur le cluster Kyle la commande 'oarsub -p "cluster='Kyle'" -l nodes=8,walltime=5:00:00 -I' permet d'allouer 8 PCs (8 "noeuds de calcul").
S'il reste bien 8 noeuds de disponibles, OAR va vous allouer une
session et vous logguer automatiquement sur le premier de ses 8 noueds.
Par défaut OAR alloue un seul noeuds pour seulement 2h... pensez donc à
préciser le nbr de noeuds voulus et
la durée de session voulue! Quand une session se termine les processus
en cours d'exécution dans cette session sont tués.
- Ouvrez deux
terminaux sur la frontale, puis faite une demande de session
interactive par oarsub, et ensuite une commande oarstat. Vous devez observer votre session dans la
liste des sessions en cours d'exécution.
- La commande
'oardel #numéro_de_session' permet de supprimer une de vos sessions en
cours d'exécution (depuis une machine frontale). Mais un simple CTRL-D
entré dans la session interactive vous delogguera du premier coeur
alloué, et supprimera votre session.
- Génération de la liste des machines disponibles :
- Depuis
n'importe quel noeud de calcul alloué par oarsub, vous disposez de la
variable d'environnement : 'OAR_NODEFILE', qui indique le nom
d'un fichier qui contient la liste des ressources de la session.
- Entrez 'more $OAR_NODEFILE'
est observez la liste des ressources du cluster qui vous sont alloués
(habituellement ces ressources sont les coeurs logiques du CPU).
- Pour
générer un fichier contenant la liste des PC disponibles (la liste des
"noeuds" de calcul disponibles), où chaque noeud n'est listé qu'une
seule fois, exécutez la commande :
sort -u $OAR_FILE_NODES
> machinefile.txt
- Entrez 'more machinefile.txt' est observez la liste des noeuds du cluster qui vous sont alloués.
- Utilisation d'OAR pour exécuter des pgms (parallèles) en "batch" :
- La
commande 'oarsub' permet d'allouer des ressources, et d'y exécuter aussi une
"session batch" : exécuter un pgm (parallèle) sur les noeuds de calcul
depuis la frontale. On exécute alors un "shellscript" qui inclut la
génération du fichier 'machinefile.txt' puis l'exécution de la commande
'mpirun ...'. Les résultats normalement affichés à l'écran seront
alors disponibles dans un fichier 'OAR.#numero_de_session.stdout', ou dans un
fichier'OAR.#numero_de_session.stderr' en cas d'erreur.
Une
'session batch' peut très bien être mise en file d'attente si les
ressources demandées ne sont pas disponibles, et être exécutée
automatiquement plus tard. En revanche, la moindre erreur dans le
shellscript mettra fin à la session batch! Il est impératif d'avoir
testé le bon fonctionnement du programme parallèle et du shellscript
en mode interactif avant de lancer de gros calculs en 'batch'.
- Pour
lancer une session batch, on utilise toujours 'oarsub', mais on termine
la commande par le nom du shellscript et ses arguments à la place de '-I'. Ex :
oarsub -l nodes=8,walltime=5:00:00 './MatrixProduct.sh 4'
avec un fichier 'MatrixProduct.sh' contenant par exemple :
sort -u $OAR_FILE_NODES > machinefile.txt
mpirun -np $1 -map-by ppr:1:sockey -rank-by socket -bind-to socket -machinefile machinefile.txt ./MatrixProduct
rm -f machinefile.txt
- Rmq : pour que l'exemple précédent fonctionne il faut :
- que le shellscript soit un fichier exécutable : entrez 'chmod 700 ./MatrixProduct.sh' pour le rendre exécutable.
- que
la commande 'oarsub' soit entrée depuis un terminal qui est dans le
répertoire où se trouvent 'MatrixProduct.sh' et 'MatrixProduct', sinon
il faudra préciser le bon chemin d'accès à ces fichiers.