Exemple de Batch : Job simple

Ce premier exemple montre l'exécution d'un traitement simple (un seul Step, implicite, d'une seule Task, implicite).

Description du Job :

Encodage d'un fichier vidéo. L'encodage sera "multi-threadé" en utilisant "ffmpeg" et l'option "-threads".

Contenu du Batch (job.sh) :

# Options SBATCH :

#SBATCH --job-name=Encode-Simple    # Nom du Job  
#SBATCH --cpus-per-task=4           # Allocation de 4 threads par Task

#SBATCH --mail-type=END             # Notification par email de la
#SBATCH --mail-user=prenom.nom@aniti.fr    # fin de l'exécution du job.

#SBATCH --partition=CPU-Nodes

# Traitement
module purge                        # élimine de l'environnement tous les modules chargés

module load ffmpeg/0.6.5            # charge le module ffmpeg version 0.6.5

ffmpeg -i video.mp4 -threads $SLURM_CPUS_PER_TASK [...] video.mkv

Remarques :

  • Le multithreading étant activé sur les serveurs de la partition 'CPU-Nodes', le paramètre --cpus-per-task correspond au nombre de threads à allouer par task, et doit être un multiple de deux.
  • Il n'est pas obligatoire de spécifier la mémoire nécessaire par CPU dans le batch. Par défaut, chaque Job dispose automatiquement d'une allocation RAM qui est variable suivant la partition utilisée :
    • Allocation RAM de 5120 Mo par thread demandé (soit 5 Go) pour les nœuds de calcul de la partition CPU-Nodes (4 threads donneront droit à 5120*4 = 20480 Mo ≈ 20 Go)
    • Allocation RAM de 10240 Mo par CPU demandé (soit 10 Go) pour les nœuds de calcul de la partition GPU-Nodes (4 CPUs donneront droit à 10240*4 = 40960 Mo ≈ 40 Go)
  • L'option SBATCH "ntasks" n'est ici pas nécessaire car 1 est la valeur par défaut.
  • La sélection de la partition à utiliser se fait avec l'option SBATCH "partition" :
    #SBATCH --partition=CPU-Nodes
    
  • La variable d'environnement "SLURM_CPUS_PER_TASK" contient la valeur de l'option SBATCH "cpus-per-task" et est transmise à ffmpeg de manière à toujours utiliser autant de threads pour l'encodage que de CPUs disponibles pour le Job. D'autres variables d'environnement Slurm sont disponibles ! (liste complète)
Variable d'environnement Valeur (Option #SBATCH correspondante)
SLURM_JOB_PARTITION Partition utilisée (--partition)
SLURM_JOB_NAME Nom du Job (Attention,contrairement aux options output/error, les variables %j%N... ne sont pas remplacées!)
SLURM_NTASKS Nombre de tasks (--ntasks)
SLURM_CPUS_PER_TASK Nombre de CPUs par task (--cpus-per-task)
SLURM_JOB_NUM_NODES Nombre de noeuds demandés/déduits (--nodes)
SLURM_JOB_NODELIST Liste des noeuds utilisés (--nodelist)

Exécution du batch :

Le Batch est transmis à Slurm via la commande "sbatch" qui, sauf erreur ou refus, crée un Job et le place dans la file d'attente.

[prenom.nom@cr-login-1 ~]#  sbatch job.sh`