Structure des classes batch sur Vargas
*****************************************************************************
Structure des classes sur Vargas 27 aout 2010
*****************************************************************************
1) Limites en interactif
=====================
- Monoprocessus sequentiel ou multitaches (OpenMP/Pthreads) :
Memoire pour l'ensemble du travail :
data < 4 Go et stack < 4 Go
(data + stack) < 8 Go
Duree : 30 minutes CPU
Nombre de taches max. : 8
- Multiprocessus (MPI) :
Memoire par processus MPI :
defaut data=3.2Go, stack=0.5Go
data < 3.2 Go et stack < 3.2 Go
(data + stack) < 3.7 Go
Duree : 20 minutes Elapsed
Nb. de processus max. : 32 (a l'aide de la variable MP_PROCS).
2) Structure des classes en traitement par lots
============================================
Acces aux classes monoprocessus (sequentiel) :
--------------------------------------------
T(h) ^ ELAPSED
|
100h +---------------+-----------------|
| | |
| t4 | t4L |
| | |
20h +---------------+-----------------|
| | |
| t3 | t3L |
| | |
10h +---------------+-----------------|
| | |
| t2 | t2L |
1h +---------------+-----------------|
| t1 | t1L |
0 +---------------+-----------------+--> Memoire
3.7Go 20.5Go (data + stack)
Memoire (stack + data) :
- Defaut data=3.2Go, stack=0.5Go
- Max : data < 20Go et stack < 20Go
- data + stack <= 3.7Go ==> classes "normales"
- 3.7Go < data + stack <= 20.5Go ==> classes "larges" suffixees "L"
Vous pouvez trouver ici un exemple de soumission :
http://www.idris.fr/su/Scalaire/vargas/exec_mono_batch.html
Acces aux classes OpenMP ou Pthreads (multitaches) :
--------------------------------------------------
T(h) ^ ELAPSED
|
100h +-----------+------------+------------|
| | | |
| mt8t4 | mt16t4 | mt32t4 |
| | | |
20h +-----------+------------+------------|
| | | |
| mt8t3 | mt16t3 | mt32t3 |
| | | |
10h +-----------+------------+------------|
| | | |
| mt8t2 | mt16t2 | mt32t2 |
1h +-----------+------------+------------|
| mt8t1 | mt16t1 | mt32t1 |
0 +-----------+------------+------------+--> Nombre de
8 16 32 coeurs
Memoire (stack + data) accessible a l'ensemble du travail :
- Par defaut : data=6.4Go, stack=1Go par coeur
- Max : data < 6.4 Go et stack < 6.4 Go par coeur
data+stack <= 7.4 Go par coeur.
Le nombre de coeurs reserve dans un travail (ici 5) est fixe par les
mot-clefs LoadLeveler : # @ job_type = serial
# @ parallel_threads = 5
La variable OMP_NUM_THREAD est automatiquement positionnee
a la valeur de parallel_threads.
Vous pouvez trouver un exemple de soumission ici :
http://www.idris.fr/su/Scalaire/vargas/exec_openmp_batch.html
Acces aux classes MPI ou hybrides (MPI+threads) :
-----------------------------------------------
T(h)^ ELAPSED
|
100h +--------+--------+--------|
| | | |
| c8t4 | c16t4 | c32t4 |
20h +--------+--------+--------+-------+-- .. --+---------|
| | | | | | |
| c8t3 | c16t3 | c32t3 | c64t3 | c...t3 | c1024t3 |
10h +--------+--------+--------+-------+-- .. --+---------|
| c8t2 | c16t2 | c32t2 | c64t2 | c...t2 | c1024t2 |
1h +--------+--------+--------+-------+-- .. --+---------|
| c8t1 | c16t1 | c32t1 | c64t1 | c...t1 | c1024t1 |
0 +--------+--------+--------+-------+-- .. --+---------+->
8 16 32 64,128,256,512,1024
Nombre de coeurs
Memoire (stack + data) accessible a l'ensemble du travail :
- Par defaut : data=3.2Go, stack=0.5Go par coeur
- Max : data < 3.2 Go et stack < 3.2 Go par coeur
data+stack <= 3.7 Go par coeur.
Le nombre de processus MPI demande (ici 8) dans un job est fixe par les
mot-clefs LoadLeveler: # @ job_type = parallel
# @ total_tasks = 8
Pour un job mixte le nombre de taches OpenMP/Pthreads demande par processus
MPI (ici 4) est fixe par le mot-clef : # @ parallel_threads = 4
On peut demander au maximum 32 taches par processus MPI.
Le nombre de coeurs reserves est donc total_tasks x parallel_threads :
ce job mixte demande donc 32 coeurs.
Vous pouvez trouver un exemple de soumission ici :
http://www.idris.fr/su/Scalaire/vargas/exec_mpi_openmp_batch.html
3) Remarques generales
===================
- ATTENTION : toutes les limites en temps sont exprimees en temps Elapsed
(ou temps d'horloge), le temps maximum que peut durer votre
job montre en main.
Le mot-clef LoadLeveler est # @ wall_clock_limit = hh:mm:ss
Le temps qui vous est facture est ce temps d'horloge consomme multiplie
par le nombre de coeurs reserves, ce qui correspond aux ressources
reellement utilisees.
Le temps Elapsed est susceptible de varier en fonction de la charge des
noeuds (les entrees/sorties ou les echanges de messages pour les jobs
multi-proc. peuvent surcharger le reseau InfiniBand). En consequence,
prevoyez une marge de securite au niveau de la limite maximum demandee.
- Memoire (stack + data) :
Pour modifier les valeurs par defaut, utilisez les mot-clefs
"data_limit" et/ou "stack_limit". Pour demander 2.2 Go de data, codez :
# @ data_limit=2.2gb
et pour demander 0.3 Go de stack, codez
# @ stack_limit=0.3gb,0.3gb
La valeur minimum est de 0.2 Go pour le data comme pour le stack; si vous
ne positionnez qu'une seule des deux limites, l'autre sera automatiquement
positionnee par defaut a 0.5 Go par coeur (1Go pour les classes OpenMP ou
Pthreads). Essayez d'ajuster au plus pres votre demande afin d'optimiser
l'utilisation globale de la memoire.
ATTENTION : quand vous modifiez une valeur de memoire, cette valeur
est specifiee PAR PROCESSUS. Ainsi, dans le cas d'un job OpenMP ou
Pthreads, il n'y a qu'un seul processus, aussi vous faut-il specifier
une limite memoire globale pour l'ensemble des taches. Dans le cas d'un
job MPI, la limite memoire a specifier correspond a la limite memoire de
chaque processus MPI. Dans le cas d'un job mixte reservant
nb_mpi processus MPI et nb_omp taches OpenMP, la limite memoire a specifier
correspond a la quantite maximale de memoire partagee par les nb_omp taches
associees a chaque processus MPI.
Pour plus d'information sur la gestion memoire :
http://www.idris.fr/su/Scalaire/vargas/memoire.html
- Les executions paralleles en INTERACTIF sont en competition avec les jobs
paralleles : quand les ressources demandees ne sont pas disponibles, la
demande est rejetee avec un message d'erreur. De plus, les noeuds ou ont
lieu l'execution parallele n'etant en general pas le seul noeud interactif
d'ou est faite la soumission, il ne faut pas soumettre depuis le TMPDIR
(qui est local au noeud interactif), mais plutot depuis le HOME ou le
WORKDIR, qui sont des espaces disque partages.
- de nouvelles classes sont disponibles pour faciliter la mise au point de
codes paralleles : limitees a 15mn de temps Elapsed, elles permettent
d'aller jusqu'a 64 coeurs en MPI ou hybride (MPI+threads) - classes cXt0 -
ou jusqu'a 32 coeurs en OpenMP ou Pthreads - classes mtXt0 - .
Le mot-clef LoadLeveler a specifier est : # @ class = debug
ATTENTION : ces jobs de developpement ont un impact important sur la
production de Vargas; il est necessaire de les utiliser a bon escient,
uniquement pour des tests ponctuels limites. Dans cet esprit, il est
demande de ne jamais soumettre d'autre travail depuis un job de
developpement, ni de soumettre un job de developpement a partir d'un autre
travail. Les consequences de la mise en place de ces classes sont
soigneusement monitorees par l'equipe exploitation.
- Les travaux compris entre 20h et 100h (classes t4) ne seront pas rembourses
en cas de probleme sur les noeuds de calcul. En effet, nous ne pouvons
garantir la stabilite du materiel sur une duree de pres de 5 jours.
De tels travaux devraient implementer des points de reprise.
- Le nombre de travaux presents simultanement dans les files d'attente pour
un meme login ne peut etre superieur a 50.
****************************************************************************
© CNRS - IDRIS, 13/01/2012