- Table of contents
- Motivations et fonctionnalités
- 'Parachute Method' avec APCScheduler
- Exemple de code APCScheduler du type Monte-Carlo
Motivations et fonctionnalités¶
- APCScheduler a pour but de simplifier la soumission de jobs sur la grille de calcul configurée en gLite/WMS (ie commandes commençant par 'glite-wms-...') et de suppléer aux difficultés suivantes d'utilisation :
- taux de réussite d'un job moins important que sur un cluster :
- re−soumission de jobs submit NOK, Aborted ou ne passant jamais en mode RUNNING.
- absence d'installation sur les Compute Element (CE) de librairies spécifiques à un exécutable:
- technique du parachute et tarball automatique copiant les librairies présentes sur l'User Interface (UI) nécessaires à l'exécutable
- un CE ne peut pas écrire les fichiers résultats directement sur espace disque local à l'UI:
- système de répertoire boite aux lettres (BAL) dont le contenu est copié du CE vers l'UI via le Storage Element (SE).
- Syntaxe JDL
- génération automatique du fichier JDL
- taux de réussite d'un job moins important que sur un cluster :
- APCScheduler simplifie l'utilisation des Storage Element pour les manipulations les plus courantes grâce à des commandes proches de celles utilisées en UNIX
- apcgrid−ls
- apcgrid−mkdir
- apcgrid−cp, récursive option -r et filtrage par expression régulière option -e
- apcgrid−rm, récursive option -r et filtrage par expression régulière option -e
La Virtual Organisation (VO), le SE et le catalogue sont stockées dans un fichier de configuration créé par la procédure apcgrid-init. Ces informations n'apparaissent pas explicitement dans les commandes apcgrid-xxx pour ne pas alourdir la syntaxe. Ainsi la commande apcgrid−ls peut être appelé sans argument et le répertoire par défaut est la racine du catalogue:
apcui01:~>apcgrid−ls drwxrwxr−x 0 75 10539 0 Dec 18 2007 atelier drwxrwxr−x 5 155 10539 0 Apr 29 11:58 colley drwxrwxr−x 11 68 10539 0 Jul 08 2008 generated drwxrwxr−x 5 71 10539 0 Jan 18 15:57 public apcui01:~>apcgrid−cp temp se:colley/test −r −e '.*.ps' cp temp/Res_CorFunc.ps cp temp/Res_ModArg.ps cp temp/Res_Mod.ps cp temp/Res_ReIm.ps cp temp/simuplanck.ps apcui01:~>apcgrid−ls colley/test −rw−rw−r−− 1 155 10539 897971 Apr 29 13:11 Res_CorFunc.ps −rw−rw−r−− 1 155 10539 560021 Apr 29 13:11 Res_Mod.ps −rw−rw−r−− 1 155 10539 555922 Apr 29 13:11 Res_ModArg.ps −rw−rw−r−− 1 155 10539 823566 Apr 29 13:11 Res_ReIm.ps −rw−rw−r−− 1 155 10539 263809 Apr 29 13:11 simuplanck.ps apcui01:~>apcgrid−rm colley/test −e '.*Mod.*' rm colley/test/Res_Mod.ps rm colley/test/Res_ModArg.ps apcui01:~>apcgrid−ls colley/test −rw−rw−r−− 1 155 10539 897971 Apr 29 13:11 Res_CorFunc.ps −rw−rw−r−− 1 155 10539 823566 Apr 29 13:11 Res_ReIm.ps −rw−rw−r−− 1 155 10539 263809 Apr 29 13:11 simuplanck.ps
- APCScheduler permet de soumettre un job sur la grille en une ligne avec la commande apcgrid-run qui distingue 3 sortes d'applications:
- exécutable, apcgrid-run mettra en place la techinque du parachute
- tarball sur un SE, voir paragraphe "'Parachute Method' avec APCScheduler"
- simple script comme un déclencheur de parachute, exemple avec la commande echo affichant le nom du Compute Element de la grille sur lequel il y a été exécuté :
apcui01:~>apcgrid-run echo -p 'Hello from $HOSTNAME' Submit echo_7HlqC4 on wms ipngrid28.in2p3.fr is ok. echo_7HlqC4 status is Waiting echo_7HlqC4 status is Waiting echo_7HlqC4 status is Scheduled echo_7HlqC4 status is Running echo_7HlqC4 status is Running echo_7HlqC4 status is Running echo_7HlqC4 status is Running echo_7HlqC4 status is Done Hello from polgrid132.in2p3.fr apcui01:~>
- APCScheduler permet aussi de soumettre des jobs sur le cluster du CCIN2P3 via Grid Engine
- Détermination de la classe séquentielle ou parallèle suivant les options MPI renseignées
- Vérification que les ressources demandées correspondantes à une classe existante (sinon GE laisse le job en attente sans avertir l'utilisateur)
- APCScheduler permet aussi de soumettre des jobs en local (le job est un simple process UNIX).
- en vue qu'une utilisation sur son ordinateur personnel ou sur un noeud de calcul pour réaliser une chaine de traitement de données
- APCScheduler propose pour tous les sites (grille gLite, cluster CCIN2P3, local) un mécanisme de soumission et de surveillance d'un ensemble de jobs de manière régulée afin de ménager les ressources systèmes, voir paragraphe 'Exemple de code APCScheduler du type Monte-Carlo' de ce wiki.
'Parachute Method' avec APCScheduler¶
APCScheduler permet de créer automatique un tarball afin de mettre en place la technique du parachute. Le 'déclenchement du parachute' s'effectue de manière transparente pour l'utilisateur. La commande apcgrid-tarball crée un tarball à partir d'un exécutable compilé sur l'User Interface (UI).
apcui01:~/Grid/demo>apcgrid-dotarball -h usage: apcgrid-dotarball executable -t se:user/myTarBall [options] Help: apcgrid-dotarball -h Comment: apcgrid-dotarball do a tarball can be call by apcgrid-run Example, do tarball with 'testConvolFFT' binary executable,used 'script_loop.sh' to call it and save it on SE 'user/tarballtest' apcgrid-dotarball testConvolFFT -t se:user/tarballtest -s script_loop.sh options: -h, --help show this help message and exit -t TARBALL, --tarball-name=TARBALL Mandatory. tarball name on SE, exemple: se:user/tardir/tarballAppli . -l LIBPATH, --lib-path=LIBPATH Library path for exe. Alternative LD_LIBRARY_PATH solution -s MAINSCRIPT, --main-script=MAINSCRIPT Instead call exe, apcgrid will call this script. This script can do a loop on exe and copy at the end output in toUI directory -i INPUT Input file and directory for tarball. Used "" for several inputs. Example : -i "/data/maps/mask /data/maps" --se_out=SE_OUTDIR Storage element output directory, like 'user/exe_output'. -v VERBOSE, --verbose=VERBOSE Verbosity level [0..20] -k Keep tarball in current directory --se=SE Storage Element name, like 'node12.datagrid.cea.fr'.
L'environnement sur le Compute Element (CE) étant le même que sur l'UI, l'exécutable est utilisable sur un CE. Il faut cependant importé les librairies non système utilisées, pour exemple :
apcui01:~/Grid/demo>ldd testConvolFFT libtoto.so => /home/colley/Grid/install/src/lib/libtoto.so (0x00002b9c257b6000) libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000031fe400000) libm.so.6 => /lib64/libm.so.6 (0x000000392e800000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000031fdc00000) libc.so.6 => /lib64/libc.so.6 (0x000000392dc00000) libfftw3.so.3 => /home/colley/Grid/install/fftw-3.2.1/.libs/libfftw3.so.3 (0x00002b9c258eb000) /lib64/ld-linux-x86-64.so.2 (0x000000392d800000)
testConvolFFT utilise libtoto.so et libfftw3.so.3.
Des fichiers ou répertoires contenant des données doivent aussi être inclus au tarball, par exemple un répertoire data
apcui01:~/Grid/demo>ls data F_tables_old.txt HeraldEventsAllReduced.txt pdg_table.txt Probas1Mpc.txt Ptrues.txt sigmaPions.txt F_tables.txt MyIntLength.txt Probas10Mpc.txt Probas.txt RadioNuclides.txt
La commande apcgrid-dotarball permet de créer ce tarball et de le copier sur un Storage Element (SE)
apcui01:~/Grid/demo> apcgrid-dotarball testConvolFFT -t se:user/MyTarBall -k -i data guid:4d733285-efe7-4697-bfb8-864407cc7ca5
Visualisation du tarball créé
apcui01:~/Grid/demo>mkdir tarball/ apcui01:~/Grid/demo>tar -xzf testConvolFFT_ckRyCs.tar.gz -C tarball/ apcui01:~/Grid/demo>tree tarball/ tarball/ |-- data | |-- F_tables.txt | |-- F_tables_old.txt | |-- HeraldEventsAllReduced.txt | |-- MyIntLength.txt | |-- Probas.txt | |-- Probas10Mpc.txt | |-- Probas1Mpc.txt | |-- Ptrues.txt | |-- RadioNuclides.txt | |-- pdg_table.txt | `-- sigmaPions.txt |-- lib | |-- libfftw3.so.3 | `-- libtoto.so |-- python | `-- APCScheduler.py |-- tarballScript.py |-- testConvolFFT |-- toSE `-- toUI
Dans le répertoire lib, on trouve les 2 librairies non système, le répertoire data a été entièrement copié. Les 2 répertoires toUI et toSE dit "boite aux lettres" permettent le rappatriement des fichiers vers l'UI ou le SE, pour plus d'information voir documentation APCScheduler. Ce tarball est utilisable par apcgrid-run ou un script python APCScheduler, comme dans l'exemple suivant.
Exemple de code APCScheduler du type Monte-Carlo¶
Voici un exemple de code APCScheduler python lancant 1000 jobs avec des paramètres différents de manière régulée pas plus de 200 jobs running à la fois. Dans cet exemple APCScheduler répartit lui-même les jobs sur les workers disponibles, et exclura le WMS grid25.xxx.in2p3.fr. L'exécutable est défini par un tarball 'se:dupont/TarExeTest' construit avec la commande UNIX apcgrid-tarball. Les fichiers resultats présents dans le répertoire toUI du tarball de chaque CE seront copiés automatiquement vers le répertoire de travail de l'UI /home/dupont/Grid/Run/test/24. Lorsque tous les jobs seront terminés un mail résumé sera envoyé à l'utilisateur.
#! /usr/bin/python from APCScheduler import * # work directory setRepository('/home/dupont/Grid/Run/test/24') setVerboseLevel(1) # specifie my gLite scheduler MyGLITE = SchedulerGLITE() MyGLITE.loadBalancingCE() MyGLITE.excludeWMS('grid25.xxx.in2p3.fr') # define a run ie a set of job Run = MultiJobsClass('Monte-Carlo test') for i in range(1000): MyExe = AppliParachute('se:dupont/TarExeTest', label='test_%d'%i) MyExe.setArg('%d'%i) Job = JobClass(MyExe, MyGLITE) Run.append(Job) Run.submitAndWaitAll(MaxRunning=200) Run.sendMailResult()
Les informations concernant la Virtual Organisation (VO), le Storage Element sur lequel transite les fichiers à destination de l'UI sont stockées dans un fichier de configuration créé par la procédure UNIX apcgrid-init. Si ces informations ne sont pas explicitement déclarées dans le script python, APCSheduler consultera le fichier de configuration, ce qui allège l'écriture du script et le rend plus portable.