TP atelier SMAsHPC

L'objectif de ce TP est de lancer des simulations GAMA, le modèle proies-prédateurs, en mode batch (ligne de commande) sur le mésocentre.

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 predatorPrey.tgz vers le répertoire nouvellement créé
    [formationmeso@mesologin1 ~]$ cp predatorPrey.tgz kmazouzi
  5. Se placer dans le répertoire créé
    [formationmeso@mesologin1 ~]$ cd kmazouzi
  6. Extraire l'archive
    [formationmeso@mesologin1 ~]$ tar -xzvf predatorPrey.tgz
  7. Le répertoire devrait contenir
    [formationmeso@mesologin1 ~]$ ls 
       gama.sge  includes  models   predatorPrey.tgz  predatorPrey.xml
     
  • models répertoire contenant des modèles GAMA (on va utiliser le modèle Model09.gaml)
  • includes répertoire contenant des données nécessaires pour la simulation (images, GIS,…)
  • predatorPrey.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 contient les paramètres d'entrée et 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 predatorPrey.xml

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

predatorPrey.xml
<?xml version="1.0" encoding="UTF-8"?>
<Simulation id="2" sourcePath="./models/Model09.gaml" finalstep="1000" experiment="prey_predator">
  <Parameters>
    <Parameter name="nb_predators_init" type="INT" value="20" />
    <Parameter name="nb_preys_init" type="INT" value="300" />
  </Parameters>
  <Outputs>
     <Output id="1" name="main_display" framerate="5" />
     <Output id="2" name="nb_preys" framerate="1" />
     <Output id="3" name="nb_predators" framerate="1" />
 </Outputs>
</Simulation>

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

  • Le chemin relatif vers le modèle GAMA : ./models/Model09.gaml
  • Le nombre de pas de temps à exécuter finalstep=1000
  • Les paramètres d'entrée : nombre initial de prédateurs 20, nombre initial de proies 300
  • Les paramètres de sortie : snapshot du graphique chaque 5 fps ?, nombre de proies et le nombre de prédateur chaque pas de temps

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 mémoire 5G

gama.sge
#!/bin/bash -l
 
####### 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 Model09
 
### 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 predatorPrey.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 : Model09
$JOB_ID : variable d'environnement SGE, elle contient un identificateur unique

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

Soumettre le calcul avec SGE :

[formationmeso@mesologin1 kmazouzi]$ qsub gama.sge

Vérifier l'état du calcul :

[formationmeso@mesologin1 kmazouzi]$ qstat
job-ID  prior   name       user         state submit/start at     queue                          slots ja-task-ID 
-----------------------------------------------------------------------------------------------------------------
  74099 0.51000 Model09    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 le nombre de proie/prédateur en chaque pas de temps
  • 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 : Model09_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>/<Model09_123456 .

Tableaux de tâches

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 : predatorsPrey1.xml, predatorsPrey2.xml et predatorsPrey3.xml

[formationmeso@mesologin1 kmazouzi]$ cp predatorPrey.xml predatorPrey1.xml 
[formationmeso@mesologin1 kmazouzi]$ cp predatorPrey.xml predatorPrey2.xml 
[formationmeso@mesologin1 kmazouzi]$ cp predatorPrey.xml predatorPrey3.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 predatorPrey${SGE_TASK_ID}.xml ${JOB_NAME}_${JOB_ID}_task${SGE_TASK_ID}
  • enfin, lancer le script
    qsub gama2.sge

The end