Turing : travaux multi-étapes avec transferts de fichiers avec Ergon

Attention : cette rubrique ne concerne que des travaux effectuant des transferts de fichiers avec le serveur d'archives Ergon. 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 Ergon, une phase de calcul parallèle, puis une phase d'archivage avec recopie des fichiers de résultats sur Ergon.

Il serait dommage de monopoliser des centaines de processeurs Blue Gene/Q 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 Ergon, l'exécution d'un programme MPI sur 1024 cœurs puis l'archivage des résultats dans une dernière étape. Le fichier de soumission, appelons-le job_multi_tranfert.ll, est le suivant :

job_multi_tranfert.ll
#=========== 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
#@ queue
 
#=========== Step 2 directives ===========
#============= Parallel step =============
#@ step_name  = parallel_step
#@ dependency = (sequential_preprocessing == 0)
# (executed only if step 1 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) && (sequential_preprocessing == 0)
# (executed even if step 2 completed with an error but only if step 1 is successful)
#@ job_type   = serial
#@ class      = archive
#@ 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
    runjob --ranks-per-node 32 --np 2048 --mapping ABCDET : $LOADL_STEP_INITDIR/exe/my_exec my_args
    ;;
 
  #============ 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 Ergon 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 Ergon. Tout autre usage est prohibé.

Au contraire des classes standards, la classe archive peut être mise en pause par l'IDRIS lorsque la machine Ergon 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 Ergon. 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 Ergon, vous pouvez vous référer à ceux-ci pour l'explication de leur usage.