Babel : travaux multi-étapes avec transferts de fichiers avec Gaya

Attention : cette rubrique ne concerne que des travaux effectuant des transferts de fichiers avec le serveur d'archives Gaya. Dans le cas contraire, référez vous à la page sur les travaux multi-étapes.

Un job comprend souvent une phase de récupération de fichiers sur Gaya, une phase de calcul parallèle, puis une phase d'archivage avec recopie des fichiers de résultats sur Gaya.

Il serait dommage de monopoliser des centaines de processeurs Blue Gene/P pendant les phases purement séquentielles de transferts de fichiers. C'est pour cela qu'il est obligatoire d'utiliser la notion d'étape (ou step) de LoadLeveler.

Voici un exemple de travail enchaînant la récupération de données sur Gaya, l'exécution d'un programme MPI sur 256 coeurs puis l'archivage des résultats dans une dernière étape. Le fichier de soumission, appelons-le job_multi_tranfert.ll, est le suivant :

#=========== Global directives ===========
#@ shell    = /bin/bash
#@ job_name = test_multi-steps
#@ output   = $(job_name).$(step_name).$(jobid)
#@ error    = $(output)

#=========== Step 1 directives ===========
#======= Sequential preprocessing ========
#@ step_name = sequential_preprocessing
#@ job_type  = serial
#@ class     = archive
#@ cpu_limit = 0:15:00
#@ queue

#=========== Step 2 directives ===========
#============= Parallel step =============
#@ step_name  = parallel_step
#@ dependency = (sequential_preprocessing == 0)
# (submit only if previous step completed without error)
#@ job_type   = bluegene
#@ bg_size    = 64
#@ wall_clock_limit = 1:00:00
#@ queue

#=========== Step 3 directives ===========
#======= Sequential postprocessing =======
#@ step_name  = sequential_postprocessing
#@ dependency = (parallel_step >= 0)
# (submit even if previous step completed with an error)
#@ job_type   = serial
#@ class      = archive
#@ cpu_limit  = 0:15:00
#@ queue

case $LOADL_STEP_NAME in
  #============ Step 1 commands ============
  #======= Sequential preprocessing ========
  sequential_preprocessing )
    set -ex
    cd $tmpdir

    mfget input_par/parameters.nml
    mfget inputs/big_data.in
    ;;

  #============ Step 2 commands ============
  #============= Parallel step =============
  parallel_step )
    set -x
    cd $tmpdir
    mpirun -mode VN -np 256 -mapfile TXYZ $LOADL_STEP_INITDIR/exe/my_exec
    ;;

  #============ Step 3 commands ============
  #======= Sequential postprocessing =======
  sequential_postprocessing )
    set -x
    cd $tmpdir
    mfput big_result.tar outputs/big_result.tar
    ;;
esac

Pour soumettre ce travail à trois étapes, placez-vous dans le répertoire contenant job_multi_tranfert.ll et tapez :

llsubmit job_multi_tranfert.ll

La seule différence avec les travaux multi-étapes sans transferts de fichiers avec gaya est l'utilisation dans les étapes séquentielles de la directive LoadLeveler :

# @ class = archive

Celle-ci sert à préciser que ces étapes séquentielles s'exécuteront dans une classe particulière. Cette dernière est strictement réservée à l'utilisation des commandes de transferts de fichiers mfput et mfget avec Gaya. Tout autre usage est prohibé.

Au contraire des classes standards, la classe archive peut être mise en pause par l'IDRIS lorsque la machine Gaya est indisponible. Cela permet de gérer au mieux les transferts avec cette machine et d'éviter de perdre des travaux en cas d'absence de la machine Gaya. Une fois la situation rétablie, cette queue est remise en marche et les travaux peuvent continuer à s'écouler normalement.

Le fonctionnement de ces travaux étant similaire à celui des travaux multi-étapes sans transferts de fichiers avec Gaya, vous pouvez vous référer à ceux-ci pour l'explication de leur usage.