TP atelier SMAsHPC

L'objectif de ce TP est de lancer des simulations GAMA, le modèle épidémie campagnol, en mode batch sur le mésocentre.

Mode batch : lancer des programmes en ligne de commandes et en mode asynchrone en utilisant le gestionnaire de ressources Grid engine (SGE)

Ordonnanceur et gestionnaire de ressources.

En pratique :

  • L’utilisateur soumet un job avec des paramètres spécifiques
  • Le système de batch (GE) lancera alors le job dès que les ressources requises par l’utilisateur seront disponibles

Connexion aux mésocentre

  1. Se connecter au nœud de login
    ssh -XC formationmeso@mesologin1.univ-fcomte.fr
  2. Se placer dans le répertoire de travail
    [formationmeso@mesologin1 ~]$ cdw
  3. Créer un répertoire personnel unique en utilisant votre nom de famille, par exemple :
    [formationmeso@mesologin1 ~]$ mkdir kmazouzi
  4. Copier l'archive epidemicVol.zip vers le répertoire nouvellement créé
    [formationmeso@mesologin1 ~]$ cp epidemicVol.zip kmazouzi
  5. Se placer dans le répertoire créé
    [formationmeso@mesologin1 ~]$ cd kmazouzi
  6. Extraire l'archive
    [formationmeso@mesologin1 ~]$ unzip epidemicVol.zip
  7. Le répertoire devrait contenir
    [formationmeso@mesologin1 ~]$ ls 
       gama.sge  epidemicVol.xml  includes  models  workspace
     
  • models répertoire contenant des modèles GAMA
  • includes répertoire contenant des données nécessaires pour la simulation (images, GIS,…)
  • epidemicVol.xml fichier XML contenant la liste des paramètres de la simulation
  • gama.sge script SGE pour lancer la simulation

Préparer les données de simulation

GAMA permet de lancer des simulations en ligne de commande. Le programme s'appelle gama-headless.sh. Il prend en paramètres :

  1. Un fichier XML qui contenant les paramètres d'entrée et de sortie de la simulation
  2. Un nom d'un répertoire où stocker les résultats

Avant de lancer les simulations on va s'intéresser au fichier XML epidemicVol.xml

Ouvrir le fichier en utilisant votre éditeur de texte préféré (gedit,vim,emacs,nano)

epidemicVol.xml
<?xml version="1.0" encoding="UTF-8"?>
<Simulation id="2" sourcePath="./models/epidemicVols.gaml" 
                   finalstep="100" experiment="epidemicVols">
 
 <Parameters>
   <Parameter name="nb_burrow" type="INT" value="100" />
   <Parameter name="nb_vol_per_squareMeter" type="FLOAT" value="0.1" />
 </Parameters>
 
 <Outputs>
   <Output id="1" name="map" framerate="5" />
   <Output id="2" name="number of killed vols per fox" framerate="5" />
   <Output id="3" name="number of scat par fox per day" framerate="5" />
   <Output id="4" name="number of infected fox" framerate="5" />    
   <Output id="5" name="number of scats" framerate="5" />    
 </Outputs>
</Simulation>

Le fichier décrit une simulation epidemicVols, on trouve :

  • Le chemin relatif vers le modèle GAMA : ./models/epidemicVols.gaml
  • Le nombre de pas de temps à exécuter finalstep=1000
  • Les paramètres d'entrée : nombre initial de nb_burrow 100, nombre initial nb_vol_per_squareMeter 0.1
  • Les paramètres de sortie : map un snapshot du graphique chaque 5 fps et d'autres valeurs comme par exemple number of scats

Lancer la simulation

Le fichier gama.sge est le script SGE, il contient un ensemble de paramètres SGE et la commande pour lancer GAMA en mode ligne de commande.

Généralement on demande des ressources : CPU (ici 1 coeurs) et de la mémoire (6G)

gama.sge
#!/bin/bash
 
####### DEBUT OPTIONS SGE #############
### on choisit la file d'attente
#$ -q formation.q
 
### On demande 6 G par coeur  
#$ -l h_vmem=6G
 
 
### Nom du job, visible dans qstat
#$ -N epidemic_votreNom
 
### Fichier où stocker la sortie standard 
#$ -o $JOB_NAME.$JOB_ID.out
 
###### FIN OPTIONS SGE ##############
 
 
## On charge Gama
module tools/gama/1.6.1
 
## On lance Gama en mode batch
gama-headless.sh epidemicVol.xml ${JOB_NAME}_${JOB_ID}

Nous utilisons ${JOB_NAME}_${JOB_ID} comme répertoire de sortie, avec :
$JOB_NAME : variable d'environnement SGE, elle contient le nom attribué au job : epidemic_kmazouzi
$JOB_ID : variable d'environnement SGE, elle contient un identificateur unique

On peut donc s'attendre à epidemic_votreNom_74099 comme répertoire de sortie.

Soumettre le calcul avec SGE :

[formationmeso@mesologin1 kmazouzi]$ qsub gama.sge

Vérifier l'état du calcul :

$qstat
job-ID    name      user        state submit/start at     queue         slots 
-----------------------------------------------------------------------------
  74099  epidemic  formationmes r     07/07/2014 21:32:18 all.q@node1-15   1

Explorer les résultats dans le répertoire de sortie.

Le répertoire de sortie contient les fichiers résultats :

  • simulation-outputs0.xml, fichier contenant les paramètres de sortie
  • snapshot, répertoire contenant les images de la simulation pour chaque pas temps.

On peut générer une animation en utilisant les commandes animate ou convert (logiciel ImageMagick)

Récupérer les résultats sur le poste du travail

On souhaite, par exemple, récupérer le répertoire : epidemic_123456

1. En utilisant un outils graphique : filezella, …

2. En ligne de commande, ouvrir un terminal sur votre machine local :

$ scp -r formationmeso@mesologin1.univ-fcomte.fr:WORK/<votreNom>/<epidemic_123456 .

Explorer plusieurs modèles

Question : On souhaite lancer plusieurs simulations avec différents paramètres, comment faire ?

Solution 1 : lancer autant de scripts que de simulations ! et si on dispose de 1000 simulation ?
Solution 2 : utiliser la notion de tableaux de tâche SGE.

Tableaux de tâche : technique SGE permettant de lancer plusieurs simulation en utilisant un seul script.

prérequis : Il faut préparer les paramètres pour les différentes simulations : avoir plusieurs fichier XML

Exemple : lancer 3 simulations, dans notre exemple il nous faut préparer 3 fichiers :epidemicVol1.xml, epidemicVol2.xml et epidemicVol3.xml

[formationmeso@mesologin1 kmazouzi]$ cp epidemicVol.xml  epidemicVol1.xml 
[formationmeso@mesologin1 kmazouzi]$ cp epidemicVol.xml  epidemicVol2.xml 
[formationmeso@mesologin1 kmazouzi]$ cp epidemicVol.xml  epidemicVol3.xml  

Méthodes :

  • rajouter, dans le script SGE, l'option suivante #$ -t 1-3 : lancer un tableau de 3 tâches par exemple
  • utiliser la variable d'environnement $SGE_TASK_ID pour identifier les tâches et le répertoire de sortie
  • modifier le script SGE pour lancer GAMA comme suite :
    gama-headless.sh epidemicVol${SGE_TASK_ID}.xml ${JOB_NAME}_${JOB_ID}_task${SGE_TASK_ID}
  • enfin, lancer le script
    qsub gama2.sge

The end