Skip to content

Espace de travail des jobs

Sur le cluster de calcul, chaque noeud possède son propre espace de travail pour les jobs situé dans /storage/scratch/ . À la soumission d'un job, on indique la quantité d'espace disque nécessaire dans cet espace de travail pour que le job se déroule correctement. Cela permet d'éviter l'exécution du job sur un noeud de calcul où tout l'espace de travail serait déjà occupé par un autre job. Le paramètre de soumission sbatch/srun est --tmp=10G par exemple pour demander 10 Go d'espace de travail.

Conjointement à cela, il faut donc s'assurer que le job dépose ses fichiers temporaires de travail dans un répertoire situé sous /storage/scratch/ et non pas dans /tmp/. Deux cas de figure se présentent alors :

  • soit les outils utilisés dans le job permettent cette configuration via un paramètre sur leur ligne de commande lors du lancement ;
  • soit les outils utilisés par le job ne le permettent pas et une astuce avec des variables d'environnement permet de modifier le comportement de l'outil.

Pour répondre à cela, le modèle suivant est proposé :

#!/bin/bash
#SBATCH --job-name=simple-example
#SBATCH --partition=normal
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --mem=16g
#SBATCH --mail-type=ALL
#SBATCH --mail-user=user.email@uca.fr
#SBATCH --time=02:00:00
#SBATCH --tmp=10G

# Prepare working directory on node
WORKDIR=/storage/scratch/$LOGNAME/$SLURM_JOB_ID
TMPDIR=$WORKDIR/tmp
mkdir -p $WORKDIR
mkdir -p $TMPDIR

# Tell programs to use $TMPDIR instead of /tmp/ when creating temporary files
# (/tmp/ is small, /storage/scratch/ offers more space)
export TMPDIR

# Reminder : we requested 10GB as scratch space, the total amount of data in
# $WORKDIR should not exceed that size.

# Manage data, perform whatever the job is supposed to compute.
...
mytool --input-data=... --output-directory=... --working-directory=$TMPDIR ...
...

# Don't forget to copy selected output files into a durable storage
# Clean-up the working directory
rm -rf $WORKDIR

# end of script

De cette manière, le système répondra aux outils demandant un espace ou un fichier temporaire avec le stockage /storage/scratch/ . On peut même créer un espace pour les données en entrée du job, et inclure une phase de récupération des données avant l'exécution de l'outil, ainsi qu'un espace de sortie :

#!/bin/bash
#SBATCH --job-name=simple-example
#SBATCH --partition=normal
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --mem=16g
#SBATCH --mail-type=ALL
#SBATCH --mail-user=user.email@uca.fr
#SBATCH --time=02:00:00
#SBATCH --tmp=10G

# Prepare working directory on node
WORKDIR=/storage/scratch/$LOGNAME/$SLURM_JOB_ID
TMPDIR=$WORKDIR/tmp
INPUTDIR=$WORKDIR/input
OUTPUTDIR=$WORKDIR/output
mkdir -p $WORKDIR
mkdir -p $TMPDIR
mkdir -p $INPUTDIR
mkdir -p $OUTPUTDIR

# Tell programs to use $TMPDIR instead of /tmp/ when creating temporary files
# (/tmp/ is small, /storage/scratch/ offers more space)
export TMPDIR

# Manage input data, from a web source, your HOME directory, or the Mesocentre S3 storage service
INPUTFILE=$INPUTDIR/genome.fasta
wget "http://biodatabanks.example/files/genome.fasta" -O $INPUTFILE
...

# Reminder : we requested 10GB as scratch space, the total amount of data in
# $WORKDIR should not exceed that size.

# Perform whatever the job is supposed to compute.
mytool --input-data=$INPUTFILE --output-directory=$OUTPUTDIR --working-directory=$TMPDIR ...

# Copy selected output files into a durable storage, for instance the user HOME directory,
# an external storage service, or the Mesocentre S3 storage facility
cp $OUTPUTDIR/genome.analysis.txt $HOME/output/
...

# Clean-up the working directory
rm -rf $WORKDIR

# end of script

Dans cet exemple précédent :

  • un job multithread avec 4 CPU est demandé
  • avec 16Go de RAM
  • 10Go d'espace de travail
  • sur la partition normal
  • ne durant pas plus de 2h
  • avec notifications par mail sur tous les événements liés au job