Mineure HPC & Support au Big Data
Cours de 3ème année à Supélec

Utilisation de l'environnement OAR

Stéphane Vialle

Prise en main d'un cluster de PC avec l'environnement OAR

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).
  1. 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.
  1. 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.
  1. 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.
  1. 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.