Version 2 (modified by 13 years ago) (diff) | ,
---|
OarUtils - Ensemble d'outils lié à OAR et au calcul en particulier
OAR est un gestionnaire de ressources et de tâches dont la fonction première est de gérer l'ordonnancement des travaux (job) sur un cluster.
OAR fonctionne globalement très bien, nous avons cependant détecté des points qui peuvent s'avérer pénalisant mais dont nous avons trouvé des solutions au final asse simple.
Toutes les sources sont disponibles sur la forge du LEGI
http://servforge.legi.grenoble-inp.fr/svn/soft-trokata/trunk/oar
Variable d'environnement
Il peut y avoir un soucis avec les jobs MPI lorsque ceux-ci s'étendent sur plus
d'une machine.
La connexion inter-machine ne fonctionnant pas directement avec ssh
il faut utiliser le wrapper oarsh
fournit.
Cependant, celui-ci ne transmet pas toutes les variables d'environnements...
ce qui empêche le bon fonctionnement de nombreux code.
Nous avons donc développé deux solutions
- un wrapper de wrapper du nom d'
oar-envsh
; - un fonction bash utilisant l'option -x de
mpirun
de nomoar_envmpirun
.
Outils
Nous avons la problématique de lancer des milliers de petits jobs séquentiels en parallèle. OAR supporte actuellement mal la charge d'avoir 20000 jobs dans la file d'attente.
Pour se faire, nous avons développé deux outils complémentaire :
mpilauncher
, un petit code MPI en C++ qui divise le nombre de travaux par le nombre de coeur du job maître. Chaque job est placé dans un thread MPI et lancé à la queue le leu. A noter quempilauncher
n'a aucune dépendance directe envers OAR.
oar-parexec
, un petit code en Perl utilisant Coro. Chaque job est distribué de manière asynchrone et viaoarsh
, sur un des coeurs attribués au processus maître. A noter qu'oar-parexec
distribue de manière optimale les jobs sur un cluster non homogène, ou si ces jobs n'ont pas un temps de calcul homogène.
Un troisième outil viens compléter le dispositif afin de gérer des processus pas forcément séquentiels. Cet outil laisse OAR faire tout le travail d'ordonnancement et de placement...
oar-dispatch
, un petit code en Perl utilisant aussi Coro. Commeoar-parexec
, le code est donc aysnchrone. Cependant, il prend en entrée une liste de job OAR dont il limitera le nombre dans la file d'attente d'OAR. Pour fonctionner, cette commande doit être lancée soit sur une frontale, soit dans un container OAR. Les sous jobs étant des job OAR à part entière (CPUSET...), il faut leur définir des ressources et peuvent donc être eux-mêmes parallèles...