Galilée

Cluster de calcul parallèle SGI ALTIX ICE 8200/8400 EX :

340 cœurs dédiés calcul (39 noeuds reliés par Infiniband)
20 coeurs pour le travail interactif (2 noeuds de login)
2 noeuds d'administration

Mémoire RAM : environ 1,3 To (distribuée)
Espace disque : 16 To pour le /home (sécurité RAID6) et 6,4 To pour l'admin (sauvegarde)
puissance 4 Tflops

Nom machine : short_hostname.mecaflu.ec-lyon.fr
liste diffusion : short_hostname@sympa.ec-lyon.fr
(short_hostname est le nom de la machine...)

CONFIGURATION

Configuration matérielle

Le cluster comporte deux nœuds de login (galilee0 et galilee1) + 39 nœuds de calcul "diskless" situés dans un seul rack et répartis en 3 châssis (r1i0, r1i1, r1i3) :

  • nœuds de login : à utiliser pour la connexion et l'accès aux données, la compilation, la soumission de jobs (en batch),
    • galilee0 (ancien noued de login): bi-processeur Intel Xeon E5520 4C 2,26 GHZ, 36 Go DDR3 RAM
    • galilee1 (nouveau noeud de login) : bi-processeur Intel Xeon E5-2630 6C 2,30 GHZ, 64 Go DDR3 RAM

  • espaces de stockage
    • 8 disques 1To RAID5 sur galilee0 : cet espace est utilisé à des fins d'administration (sauvegarde)
    • 8 disques 3To RAID6 sur galilee1 : les homes directoires et le système + le soft

  • noeuds de calcul
    • 17 nœuds de calcul (r1i0n0, ..., r1i0n15 et r1i1n0) : processeur intel xeon E5540, 2,53 GHZ , nehalem (cache L3 : 8Mo), 8 cœurs par nœud (2P4C), mémoire RAM : 24 Go / nœud
    • 3 nœuds de calcul (r1i1n1, ..., r1i1n3) : processeur intel xeon E5550, 2,66 GHZ , nehalem (cache L3 : 8Mo), 8 cœurs par nœud (2P4C), mémoire RAM : 72 Go / nœud
    • 4 nœuds de calcul (r1i1n4, ..., r1i1n7) : processeur intel xeon E5550, 2,66 GHZ , nehalem (cache L3 : 8Mo), 8 cœurs par nœud (2P4C), mémoire RAM : 24 Go / nœud
    • 2 nœuds de calcul (r1i1n8, r1i1n9) : processeur intel xeon E5550, 2,66 GHZ , nehalem (cache L3 : 8Mo), 8 cœurs par nœud (2P4C), mémoire RAM : 48 Go / nœud
    • 6 nœuds de calcul (r1i1n10, ..., r1i1n15) : processeur intel xeon X5667, 3,06 GHZ , westmere (cache L3 : 12Mo), 8 cœurs par nœud (2P4C), mémoire RAM : 24 Go / nœud
    • 2 nœuds de calcul (r1i3n0, r1i3n1) : processeur intel xeon X5675, 3,06 GHZ , westmere (cache L3 : 12Mo), 12 cœurs par nœud (2P6C), mémoire RAM : 24 Go / nœud
    • 5 nœuds de calcul (r1i3n2, ..., r1i3n6) : processeur intel xeon X5675, 3,06 GHZ , westmere (cache L3 : 12Mo), 12 cœurs par nœud (2P6C), mémoire RAM : 48 Go / nœud
  • réseau ( passage de messages, NFS ) : 2 x infiniband 20 Gb/s

Username

Les identifiants (nom de login, mot d repasse) vous ont été transmis à la création du compte.

Cependant, dans le but d'une uniformisation des noms de login, pour les utilisateurs actifs ainsi que pour ceux qui ont un compte sur le serveur de fichiers proxima, les noms d'utilisateur (et le uid) ont été synchronisés en Décembre 2013 sur le LDAP de l'ECL (et sur proxima)

Stockage supplémentaire

Les utilisateurs qui ont un compte sur proxima peuvent accéder directement à l'espace de stockage /store du proxima (au même chemin comme sur proxima) Pour le chemin, veuillez retrouver le message relatif aux modifications sur proxima. Si pas possible ou si autres problèmes, veuillez nous contacter.

Pour les autres utilisateurs, il convient de rappeler que cet espace supplémentaire de stockage) pourraient être obtenu en demandant un compte proxima (rubrique Demande de ressources dans le menu de gauche)

ATTENTION: Cet espace supplémentaire n'est pas à utiliser par vos jobs (on n'y accède pas depuis les noeuds de calcul)

Utilisation des noeuds de login

Un node de login a été rajouté : "galilee1" en février 2014. Etant donné qu'il est plus récent et fiable (l'ancien noeud galilee0 n'est plus sous maintenance), il convient d'utiliser ce noeud en priorité.

En résumé, désormais vous pouvez accéder à :
galilee0.mecaflu.ec-lyon.fr = galilee.mecaflu.ec-lyon.fr (en se connectant on voit "service0" au prompt)
galilee1.mecaflu.ec-lyon.fr (en se connectant on voit "service1" au prompt)

Vous pouvez avoir le même usage sur galilee0 et sur galilee1 (même système, mêmes logiciels système et compilateurs), à quelques exceptions près :

- architecture :
galille1 est équipé de processeurs plus récents (SandyBridge E5-2630) supportant des sets d'instructions et donc des options d'optimisations plus évoluées (notamment AVX) qui ne sont pas présentes sur galilee0 et sur les noueds de calcul actuels. Ainsi, si vous compilez votre code sur galilee1, il vaut mieux ne pas utiliser les options d'optimisation spécifiques à la machine sur laquelle se fait la compilation (par exemple l'option -xHost pour les compilateurs Intel). A éviter implicitement toute autre option d'optimisation agressive qui sous entendent ces options spécifiques (par exemple -fast des compilateurs Intel sous entend -xHost, entre autres). A noter que galilee0 et les noeuds de calcul actuels supportent le set d'instructions sse4_2, donc pour les compilateurs Intel l'option -xSSE4.2 y serait supportée.

- espace de stockage /home
votre home directory est désormais directement associé à galilee1, mais il est également visible sur galilee0 via montage NFS. Les opérations de lecture/écriture sur votre home directory devraient donc être sensiblement plus rapides sur galilee1 que sur galilee0. Par contre, sur les noeuds (donc pour les jobs), il n'y aurait aucune différence si on soumet depuis galilee0 ou depuis galilee1.

- espace de stockage /store/lmfa/login (actuellement seulement pour ceux qui ont un compte sur "proxima")
cet espace est monté sur galilee1 via un réseau privé - actuellement 1Gb/s, mais sera très bientôt upgradé à 10Gb/s.
cet espace est également monté sur galilee0, mais à plus faible vitesse d'accès : actuellement à 100 Mb/s (réseau LMFA), on pourra probablement le monter à 1Gb/s, mais il ne sera pas upgradé à 10Gb/s
Lorsque vous désirez effectuer des gros transferts vers/depuis cet espace, il vaut donc mieux se connecter sur service1

Bref, bonne utilisation de galilee1 (et, comme réserve, de galilee0) !

Configuration logicielle

Software "système"

Une réinstallation complète des systèmes Linux a été faite en février 2014 sur les noeud de login et de calcul. Actuellement ils sont sous SLES 11SP3.

Les outils SGI ont été également réinstallés, et en particulier MPT (la distribution MPI de SGI, qui est la distribution recommandée à utiliser).

Compilateurs

  • Env. Dev. Intel Cluster toolkit
  • licences :
    • 2 licences pour les anciennes versions (Intel 11) et
    • 5 licences pour les nouvelles versions (>Intel 14) mutualisées avec Kepler qui est serveur de licence)
  • Compilateurs GNU

Bibliothèques

  • bibliothèque scient. Intel MKL
  • bibliothèque gestion parallélisme Intel MPI, MPT, PVM

Debugger parallèle

  • GNU gdb
  • Intel idb (applications MPI et OpenMP)
  • Alinea DDT

ATTENTION : Le debugger parallèle DDT ne fonctionne plus depuis la mise à jour système de février 2014 : la version existante avant l'upgrade ne marche plus (licence périmée=>pas de mise à jour possible dans l'immédiat). Veuillez utiliser le même outil sur Kepler ou bien le debbuger Intel (idb - graphique ou idvc - en ligne de commande)

Outils d’optimisation et analyse de performances de codes parallèles

  • Intel trace analyser

Les outils Intel

Les outils Intel existantes avant la mise à jour de février 2014 peuvent être encore utilisés. Cependant, depuis cette date, des nouvelles versions de produits Intel ont été installés : __~~

service0:~> module avail

...

------------------------------------- /usr/local/soft/modulefiles --------------------------------------
cmkl/10.2.0.013        intel/itac/9.0.2       intel-fce-11/11.1.038  mpt/1.26-0
intel/Compiler/14.0.0  intel/mkl/10.2.5.035   intel-idbe-11/11.1.038 mpt/1.26-p10691
intel/Compiler/14.0.1  intel/mkl/10.2.6.038   itac/7.2.1.008         mpt/2.09
intel/Compiler/15.0.1  intel/mkl/11.1.0       mkl/10.2.0.013         perfsuite/1a5.3
intel/impi/4.1.1       intel/mkl/11.1.1       mpi/3.2.1.009
intel/impi/5.0.2       intel/mkl/11.2.1       mpt/1.23
intel/itac/8.1.3       intel-cce-11/11.1.038  mpt/1.25

Recommandation: si possible utiliser ces compilateurs/bibliothèques dans les modules correspondants :

  • intel/Compiler/15.0.1 (ifort, icc, icpc)
  • intel/mkl/11.2.1 (pour Blas, Lapack, FFT, nombres aleatoires, etc.)
  • mpt/2.09 (distribution MPI de SGI)

Softwares spécifiques (codes "maison", ...)

Une bonne partie des codes compilés avant la mise à jour système de février 2014 devraient encore fonctionner. Cependant, si ce n'est pas le cas ou pour mieux profiter des nouvelles optimisations et librairies, une récompilation des codes est recommandée (voire même nécessaire), de préférence avec les nouvelles versions (outils Intel + SGI).

Gestionnaire de files d’attente

EN PRATIQUE

Création de compte

Remplir le formulaire de demande d’ouverture de compte sur ce site.

Quota disque

Le volume de stockage (home directory, système et software) est d'environ 16 To utiles en RAID6. Les quotas utilisateurs sont en place. Ils seront attribués en fonction des besoins des utilisateurs.
Un volume de stockage plus ancien d'environ 6,3 To utiles est également présent sur le noeud de login ancien (galilee0). Il est utilisé à des fins d'administration (sauvegarde de /home)
Un espace de stockage supplémentaire peut vous être créé (pour cela, faites une demande de compter sur la machine proxima). Cet espace serait visible depuis les noeuds de login de Galilee (et depuis Kepler pour ceux qui ont un compte).

Accès au cluster

  • Depuis le réseau LMFA
ssh user_login@hostname

  • Depuis l'extérieur du réseau LMFA, vous pouvez atteindre le réseau ECL, via le OpenVPN ou via la passerelle ssh de l'ECL

Suite à la mise à jour de février 2014

Si vous aviez un compte avant la mise à jour de février 2014, à la 1ère connexion ssh, il est normal qu'un message de ce type apparaît :

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
ab:70:ed:71:09:c1:84:d8:d2:41:7e:c2:cb:f6:74:09.
Please contact your system administrator.
Add correct host key in /Users/dancaligaru/.ssh/known_hosts to get rid of this message.
Offending key in /Users/dancaligaru/.ssh/known_hosts:5
RSA host key for galilee has changed and you have requested strict checking.
Host key verification failed.

Sur votre machine de bureau, veuillez supprimer la ligne correspondante dans le fichier ....ssh/known_hosts (dans l'exemple ci-dessus il s'agit de la ligne 5). Avec vi, ceci peut être fait en tapant :

vi +5 ....ssh/known_hosts      puis   dd    puis    :wq

Puis réessayer la connexion ssh.

Environnement de travail

Par défaut les comptes utilisateurs sont placés sous bash.
Actuellement, l'environnement par défaut donne accès aux outils gnu.

Liste de diffusion

pour les échanges avec les utilisateurs de ce serveur, utiliser la liste short_hostname@sympa.ec-lyon.fr (remplacer _et_ par...)

UTILISATION BASIQUE

COMPILATION

Chargement des outils (commande "module")

Les compilateurs Fortran et C/C++ d'Intel (version 11.1.038) et de gnu (4.1.2) sont disponibles sur le cluster. Actuellement, les compilateurs gnu (gcc pour C/C++ et gfortran pour Fortran) sont accessibles par défaut (/usr/bin).

Pour effectuer des développements en parallèle, la bibliothèque OpenMP ou la bibliothèque MPI de SGI (MPT) peuvent être utilisées.

L'accès aux outils Intel/SGI se fait en chargeant les modules correspondants. Les commandes et variables d'environnement associées sont accessibles dans:

export MODULESHOME=/usr/share/modules
. $MODULESHOME/init/bash
  • Pour connaître la liste des modules:
module avail

  • Pour charger un module:
module load <nom_du_module>

  • Pour retirer un module de son environnement de travail:
module unload <nom_du_module>

  • Pour tout effacer :
module purge

  • Pour connaître ce qui a été chargé :
module list

Si la commande "modules avail" ne retourne pas tous les modules, veuillez rajouter dans votre fichier .bashrc :

export MODULEPATH=$MODULEPATH:/usr/local/soft/modulefiles

La compilation, exemples

Les exemples de compilation seront donnés avec les compilateurs Intel (ifort pour Fortran et icc/icpc pour C/C++). En parallèle, les compilateurs Intel sont associés à la bibliothèque MPI de SGI (MPT) en faisant le lien avec -lmpi ou en utilisant les wrappers mpicc ou mpiifort après avoir chargé le module MPI d'Intel IntelMPI.

  • Exemple de compilation monoprocesseur:
    • Compilation C/C++
icc -o a.out code.c

    • Compilation Fortran
ifort -o a.out code.f

Le deboguage se fait avec l'option -g et l'optimisation avec -O2 ou -O3

  • Exemple de compilation multiprocesseurs:
    • Avec MPI:

Si MPT (SGI MPI) est choisie, -lmpi doit être utilisé pour le link.
Si IntelMPI est choisie, les wrappers (mpicc, mpiifort) doivent être utilisés pour pouvoir faire le lien avec la bibliothèque IntelMPI.

      • Compilation C/C++
MPT: icc -lmpi -o a.out code.c

IntelMPI: mpicc -o a.out code.c

      • Compilation Fortran
MPT: ifort -lmpi -o a.out code.f
IntelMPI: mpiifort -o a.out code.f

    • Avec OpenMP:

Si OpenMP pour la parallélisation, l’option -openmp doit être passée au compilateur intel.

      • Compilation C/C++
icc -openmp -o a.out code.c

      • Compilation fortran
ifort –openmp -o a.out code.f

Note : depuis la version 15 des compilateurs Intel, aux options commençant par la lettre "o" (en minuscule), il faut rajouter un q, par exemple ex :

-openmp devient donc -qopenmp

EXECUTION D’UN CODE PARALLELE

Les commandes mpirun, mpiexec et mpiexec_mpt permettent de lancer les applications parallèle avec MPI ou hybride OpenMP/MPI. mpiexec et mpiexec_mpt se lancent dans un job PBS *.

Pour exécution d’un programme MPI avec MPT

Les commandes mpiexec et mpiexec_mpt (disponibles une fois que le module mpt soit chargé) se lancent dans un job PBS (en session batch ou interactive) de la façon suivante :

qsub -I –l select=2:ncpus=8:mpiprocs=4 –l walltime=00:05:00

lance une session interactive en allouant 2 noeuds à 8 coeurs avec 4 processus mpi par noeud pour maximum 5 minutes de calcul.

Avec la bibliothèque MPT, l'exécutable peut être lancé par la commande

mpiexec_mpt ./a.out

Le logiciel PBSPro (de soumission en batch) est décrit plus bas.

Pour exécuter un programme OpenMP

qsub -I –l select=2:ncpus=8:mpiprocs=4 –l walltime=00:05:00

reserve 2 noeuds avec 4 processus mpi par noeud pour maximum 5 minutes de calcul. Sur chaque noeud, les 8 coeurs sont reservés.

L’exécution d’un binaire utilisant OpenMP se déroule de la même façon qu’un exécutable série excepté le fait qu’il faut spécifier le nombre de threads utilisés (nombre maximum de threads = 8) :

export OMP_NUM_THREADS = number_of_threads

Lancement du programme

./a.out

Pour exécuter un programme hybride OpenMP/MPI

L’exemple suivant concerne l’exécution en interractif d’une application avec 4 tâches MPI par nœud et 2 threads OpenMP par tâche MPI :

qsub –I –l select=2:ncpus=8:mpiprocs=4 –l walltime=00:05:00

 export OMP_NUM_THREADS = 2

 /usr/pbs/default/bin/mpiexec ./a.out

SOUMISSION DE TRAVAUX EN BATCH

Les jobs sont soumis en batch via PBS (en interactif ou en non-interractif)

Le lancement de calculs directement sur le noeud de login n'est pas autorisé.

Les ressources requises dans le script PBS sont interprêtées automatiquement par le système de batch pour placer les jobs dans la file d'attente correspondante.

Pour accéder aux commandes associées (qsub, qstat, etc.), il faut tout d’abord définir le chemin suivant dans son environnement de travail (dans votre fichier .bashrc dans votre compte sur galilee):

export PATH=$PATH:/opt/pbs/default/bin:/opt/pbs/default/sbin:/usr/local/soft/allinea/ddt/bin

Des exemples de script PBS sont donnés ci-dessous dans la section b. Exemple de scripts

Commandes Batch PBS

  • Soumission d’un travail :
qsub job.pbs

Cette commande retourne l’id du job (ex : 3778.service0)

  • Voir mes jobs :
qstat –u $user

  • Etat du job :
qstat –f 3778

  • Arrêt du job :
qdel jobid

Exemple de scripts

Soumission en batch un programme MPI avec MPT

#PBS -S /bin/bash
#PBS -N a833
#PBS -j oe
#PBS -l walltime=00:15:00
#PBS -m ae -M votre_adresse_email
#PBS -l select=9:ncpus=8:mpiprocs=8
#PBS -l place=excl:scatter

. $MODULESHOME/init/bash
module purge
module load mpt/1.23
cat $PBS_NODEFILE
cd $PBS_O_WORKDIR
#np=$(wc -l $PBS_NODEFILE)
np=`wc -l $PBS_NODEFILE  | awk '{print $1}'`
cd ma833
#time mpiexec ./a.out
#time mpirun -np $np -machinefile $PBS_NODEFILE ./a.out
time mpiexec_mpt -np $np dplace -s1 -c0,1,2,3,4,5,6,7 ./a.out
#time mpiexec_mpt -np 8 dplace -s1 -c0,1,2,3,4,5,6,7 ./a.out

Voici une brève explication de ces lignes:

#PBS -S /bin/bash
permet de transmettre à PBS l’environnement utilisé

#PBS -N a833
permet de definir le nom du job

#PBS -j oe
redirige les sorties et les erreurs dans le même fichier

#PBS -l walltime=00:15:00
défini le temps maximum alloué demandé pour le calcul (format : HH:MIN:SEC)

#PBS -m ae -M votre_adresse_mail
Pour récupérer le fichier de log sous un compte mail : option –m a/b/e
a : en cas d’arrêt avant la fin d’exécution du job
b : en début d’exécution
e : à la fin de l’exécution

#PBS -l select=9:ncpus=5:mpiprocs=5
ici, 45 coeurs sont réservés pour le calcul avec 1 tâche MPI par cœur.

#PBS -l place=excl:scatter
rend exclusif l'utilisation des cores reservés
. $MODULESHOME/init/bash
module purge
module load mpt/1.23
initialise les variables d'environnement dans le script (à placer éventuellement dans son environnement de travail)

cat $PBS_NODEFILE
liste les noeuds requis par PBS

np=`wc -l $PBS_NODEFILE  | awk '{print $1}'`
compte les noeuds 

cd $PBS_O_WORKDIR
descend dans le répertoire d'où le script est lancé

mpiexec_mpt -np 9 dplace -s1 -c0,1,2,3,4 ./a.out
lance le programme en plaçant de façon optimale les coeurs par noeud.

Utilisation exclusive ou combinée des noeuds à 8 coeurs et à 12 coeurs

Depuis octobre 2015, une modification de la configuration du PBS (rajout de l'option "node12c" à valeur booléenne) permet de préciser plus finement cette demande :

  • si vous ne voulez ne pas avoir alloués des noeuds à 12 coeurs, rajouter node12c=False dans le script PBS, p. ex :
#PBS -l select=1:ncpus=8:mpiprocs=8:node12c=False

  • si vous ne voulez QUE de noeuds à 12 coeurs, rajouter node12c=True dans le script PBS, p.ex :
#PBS -l select=2:ncpus=8:mpiprocs=8:node12c=True

  • si vous voulez une utilisation mixte, avec un nombre bien donné de noeuds à 8 coeurs et un autre à 12 coeurs, il faut utiliser une combinaison de ce qui précède, p.ex pour 4 noeuds à 12 coeurs et 2 noeuds à 8 coeurs (64 C en tout) :
#PBS -l select=4:ncpus=12:mpiprocs=12:node12c=True+2:ncpus=8:mpiprocs=8:node12c=False

- enfin, si cela vous est indifférent : ne rien préciser quant à l'option node12c

Bien sûr, en plus de cela, il faut utiliser vos autres arguments habituels (p.ex. mem=... si besoin de préciser la mémoire)

TABLEAU QUEUES BATCH

Imposer certaines limites dans l'utilisation de la machine est une nécessité afin d'assurer un partage équitable des ressources entre les utilisateurs actifs. Le tableau ci-dessous regroupe les principales règles de configuration du gestionnaires des queues (PBS Pro) :

Queues de production

Queue No. de coeurs Durée max. No. max. jobs / queue No. max. jobs / user
pivoine 1 à 8 10 h 5 2
camelia 9 à 32 12 h 4 2
magnolia 33 à 64 24 h 4 1
hortensia 65 à 128 24 h 1 1
dahlia72 1 à 24 120 h 3-- 1--

Pour ces queues de production, il n'est pas nécessaire d'indiquer la queue à PBS (se choix se fera automatiquement).
La queue dahlia72, autrefois associés à 3 noeuds (r1i1n1, r1i1n2, r1i1n3) à plus large mémoire (72 GB), a été éliminée du système de batch.

Queue de debug et tests

Queue No. de coeurs Durée max. No. max. jobs / queue No. max. jobs / user
debug 1 à 24 3 h 6 1

Pour utiliser cette queue, il faut l'indiquer explicitement à PBS (option -q debug).

Queues spéciales

Des queues spécifiques peuvent être temporairement définies et utilisée (en accès restreint), en fonctions de besoins plus ou moins ponctuelles des utilisateurs et qui ne peuvent pas être satisfaites par les autres queues.

Limite globale

Une limite globale (toutes queues confondues) est définie :

nombre max de coeurs alloués par utilisateur = 128

Remarques :

  • Pour une meilleure flexibilité (remplissage, besoins ponctuels), ces limites sont susceptibles de modifications temporaires
  • Pour tout question/demande spécifique, merci de contacter l'équipe support