Documentation (non officielle) de l'outil de Karim (ATLPROD) de gestion des jobs Grille
écrit par JS

Karim Bernardet a écrit un outil qui permet de gérer l'execution de vos jobs sur la grille. Dans cette page, je vais décrire:
- comment installer ATLPROD. Celui-ci n'est pas installé de façon centralisée car il doit stocker les informations de vos jobs;
- comment utiliser ATLPROD. Nous ferons tourner dans cette partie 20 jobs "HelloWorld";
- un mot du fichier config.txt;
- comment utiliser vos scripts dans ATLPROD. L'outil de Karim permet en effet facilement de faire tourner vos propres scripts.
- exemple de l'analyse des AODs
- tout ce que je ne sais pas faire avec l'outil de Karim. Si vous trouvez comment faire ça, n'oubliez pas de m'en faire part pour améliorer cette documentation !

Comment installer ATLPROD
- créez un répertoire prod chez vous sur l'UI;
- copiez l'outil de Karim dans cette zone (il s'agit d'un fichier tar que j'ai réalisé à partir du code de Karim + des exemples de scripts à moi. Il fait 27 Mo: ya ptet du ménage à faire...): cp /home/jerome/atlas/grid/atlprod.tar.gz .
- gunzip atlprod.tar.gz
- tar cvf atlprod.tar
- éditez les 2 fichiers setup.csh dans les répertoires atlprod-client et atlprod-server, et modifiez la ligne setenv ATLPROD_ROOT ... pour y mettre le chemin de votre répertoire prod

Comment utiliser ATLPROD
- se logguer sur l'UI (node02.datagrid.cea.fr) et aller dans votre répertoire prod;
- grid-proxy-init (attention, mettre un temps assez long pour que les jobs aient le temps de se finir);
- effacer au besoin le contenu des 2 repertoires jobs (sous atlprod-server et atlprod-client). Attention: ne faire cela que pour refaire une prod de zero. Lorsque vous (re)lancez ATLPROD, vous pouvez en effet continuer en principe à monitorer les jobs lancés les jours précédents (mais je n'ai pas beaucoup d'expérience avec ça);
- xterm& (ouvrir une 2e fenetre pour le client);
- dans le répertoire prod, lancer le serveur: ./run;
- dans la 2e fenêtre, lancer le client: cd atlprod-client; source setup.csh; ./client;
- vous devez avoir une fenêtre ATLAS PROD qui ressemble à ceci:
 


- aller dans l'onglet Production;
- dans le menu déroulant Production, choisir le nom du script à lancer. Dans cet exemple, choisir le script test;
- il apparaît 2 champs Proceed et Prefix sous le menu déroulant. Le champ Proceed contient les numéros des jobs à lancer. Par défaut, il s'agit dans notre exemple des jobs 1 à 20, mais vous pouvez changer ça (en fait tous les jobs seront identiques dans l'exemple test);
- cliquer sur Refresh dans la partie Connected sites;
- dans le menu déroulant, il apparait lcg, cliquer dans cette case, effacer le "g" et remettez-le: il apparait en dessous des cases Requirements, Output et Error;
- cliquer sur Submit. Cette action ne lance pas les jobs sur la grille, mais les soumet au "serveur" ATLPROD;
- dans la fenêtre My jobs, faire Refresh. Les jobs se trouvent dans l'état Waiting;
- sélectionner les jobs à lancer (éventuellement avec les touches shift et ctrl, comme dans Windows), et faire (Re)submit;
- refaire Refresh. Au bout d'un moment, les jobs sont dans l'état Sent2Client, puis dans l'état submitted;
- l'état submitted signifie que le job a été envoyé du serveur ATLPROD au client. Il persiste tant que le job est sur la grille, quel que soit son état sur celle-ci. Pour avoir des détails sur l'état d'un job, il faut manuellement aller dans atlprod-client/jobs et regarder le fichier jobs_running. Celui-ci contient la liste des jobIds. Un petit coup de edg-job-status <jobId> permet de connaitre l'état du job;
- lorsqu'un job est terminé, l'état done est affiché dans la colonne "Finish state", comme dans la figure ci-dessous. Les outputs du job sont automatiquement récupérés dans atlprod-client/jobs/jobX;
 

Le fichier config.txt
Dans atlprod-client, le fichier config.txt contient certaines informations utiles:
- maxNumberOfJobs=10: c'est le nombre maximum de jobs que le client va soumettre sur la grille en meme temps. Tant que ce nombre est sur la grille, le client ne demande pas de nouveau job au serveur. Pour des grosses prods (centaines de jobs), il faut sans doute augmenter ce nombre;
- askForJobsTime=60: c'est le temps entre deux demande de jobs du client au serveur. Karim déconseille de trop diminuer ce nombre;

Faire tourner vos propres scripts
ATLPROD vous permet de faire tourner vos propres scripts (qu'ils aient ou non d'ailleurs un rapport avec ATLAS). Pour faire tourner le script mon_test.sh, il faut:
- dans atlprod-client/scripts, créer un répertoire mon_test;
- mettre votre script (mon_test.sh) dans ce répertoire;
- dans le répertoire atlprod-serveur/production, créer un fichier mon_test.xml, avec les lignes suivantes:
 

<?xml version="1.0"?>

<!-- <!DOCTYPE menu SYSTEM "production.dtd"> -->

<menu name="mon_test">

<smenu name="Proceed" parmTag="NO">
<parmvalues>
<parmvalue val="1-20" />
<parmvalue val="1,2,5-10,23" />
</parmvalues>
</smenu>

<smenu name="Prefix">
<parmvalues>
<parmvalue val="mon_test"/>
</parmvalues>
</smenu>

</menu>

 
Ce fichier permet de définir les paramètres qui sont affichés (et modifiables) sous le menu déroulant Production. Ils sont passés à votre script sous la forme NOM=valeur, où NOM est le nom après parmTag= (on verra un exemple dans la section sur l'analyse des AODs);
- ajouter prodName=mon_test; dans le fichier production.txt;
- relancer le tout, et vérifier que mon_test apparait dans le menu déroulant Production de l'onglet du même nom.

Analyse des AODs
J'ai fait marcher via ATLPROD mon script d'analyse des AODs (celui qui est disponible sous /home/jerome/atlas/grid/exemple_aod). Il se trouve dans le répertoire atlprod-client/scripts/exemple_aod. Je l'ai modifié pour:
- récupérer les paramètres dans des variables d'environnement;
- pouvoir processer dans un même job un nombre d'AODs défini par la variable NAOD;
- passer en paramètre le numéro du sample de Rome à processer;
- récupérer mon code d'analyse (à compiler) sur la grille (fichier lfn:jerome@dapnia.cea.fr_exemple_aod_files.tar.gz): il n'est en effet pas possible avec ATLPROD d'envoyer sur la grille (via l'InputSandBox) d'autres fichiers que le script;
- mettre les histos d'output sur la grille (n'oubliez pas de modifier le nom si vous voulez essayer, sinon il dira que le fichier existe déjà);
- j'ai aussi modifié les lignes du genre source $VO_ATLAS_SW_DIR/software/10.0.1/setup.sh en y ajoutant "" à la fin sinon les paramètres du script (NAOD et tout ça) sont transmis à setup.sh, ce qui pose des problèmes;

Tout ce que je ne sais pas faire
Il y a certaines choses que je ne sais pas (encore) faire (ou qui ne sont pas possibles) avec ATLPROD:
- auto-refresh de la fenêtre principale;
- avoir les infos sur l'état des jobs sur la grille. En particulier, il serait utile, je pense, d'avoir le CE sur lequel le job a tourné: si certains CE posent des problèmes systématiquement, on pourrait les enlever via les Requirements;
- au fait, modifier les Requirements. On doit pouvoir le faire via les fichiers qui se trouvent dans atlprod-server/sites, mais je n'ai pas essayé;
- vérifier que le job a tourné correctement;
-...