Le cluster Baobab

Baobab est un cluster de calcul de l'Université de Genève

Utilisation

Pour vous connecter au cluster :

ssh username@baobab.unige.ch

Si vous souhaitez utiliser des applications graphiques sur baobab, vous pouvez vous y connecter de la façon suivante :

ssh -Y username@baobab.unige.ch

Modules

Afin de pouvoir compiler du code MPI et CUDA et de disposer d'un compilateur récent, il faut charger les modules foss/2016a et CUDA, cela se fait via la commande :

module load foss/2016a CUDA

Vous pouvez ajouter cette ligne dans le fichier .bashrc se trouvant à la racine de votre dossier utilisateur afin que les modules soient chargés à chaque connexion.

Soumettre un job

Job MPI

Baobab utilise le système de queuing slurm. Pour soumettre un job, vous pouvez utiliser la commande srun ou écrire un script spécifiant la configuration d'exécution que vous soumettrez avec sbatch.

Il ne faut JAMAIS exécuter un programme sur une machine partagée sans passer par le système de queuing.
Lorsque vous êtes connecté à baobab, rappelez vous de TOUJOURS utiliser la commande sbatch et JAMAIS la commande mpirun ou mpiexec directement.

Voici un exemple de script pour sbatch :

#!/bin/sh
#SBATCH --job-name=NomDuJob
#SBATCH --output=NomOutput.o%j
#SBATCH --ntasks=20
#SBATCH --partition=shared,cui
#SBATCH --time=01:00:00

echo $SLURM_NODELIST

srun ./MonProgramme

Si vous enregistrez ce script dans un fichier nommé script.sh, vous pouvez le soumettre sur le cluster avec la commande :

sbatch script.sh

Monitorer et gérer les jobs

Afin de voir les jobs en attente et en cours d'exécution, vous pouvez utiliser la commande squeue. Pour limiter l'affichage à vos jobs, vous pouvez utiliser

squeue -u username

Pour supprimer un job, vous pouvez utiliser la commande scancel. Soit avec

scancel jobid

ou

scancel jobname 

ou encore

scancel -u username 

pour terminer tous vos jobs.

Il existe également une interface web disponible ici qui vous permet de voir l'état du cluster et des jobs.

Mesure de performances

Dans le cas où vous souhaitez effectuer des mesures de performance, il faut se limiter à des noeuds de même génération. C'est le cas des noeuds 173 à 201 comme indiqué ici http://baobabmaster.unige.ch/enduser/src/enduser/enduser.html. L'exemple de script suivant permet d'imposer cette limitation :

#!/bin/sh
#SBATCH -J heat
#SBATCH -o heat.o%j
#SBATCH --ntasks=20
#SBATCH -p shared,cui
#SBATCH -t 01:00:00
#SBATCH --constraint=E5-2630V4

echo $SLURM_NODELIST

srun ./laplace 2000 2000 1000 /scratch/heat.dat

Pour finir, vous remarquez que le résultat est écrit dans la partition /scratch/. Cette partion est locale à chaque noeud, ceci permet donc de mesurer des temps d'écriture sans dépendre de l'utilisation du stockage partagé.

Partition debug

Il existe une partition debug qui compte deux noeuds et dont le temps d'exécution est limité à 15 minutes. Cette partition est pratique car elle vous permet d'effectuer des tests rapides de votre code avant de l'envoyer pour exécution sur la partition shared.

Exemple d'utilisation de la partition debug :

#!/bin/sh
#SBATCH -J heat
#SBATCH -o heat.o%j
#SBATCH --ntasks=16
#SBATCH -p debug
#SBATCH -t 00:15:00

echo $SLURM_NODELIST

srun ./laplace 2000 2000 1000 /scratch/heat.dat

Job threads

#!/bin/sh
#SBATCH -J heat
#SBATCH -o heat.o%j
#SBATCH --ntasks=1
#SBATCH --nodes=1
#SBATCH --cpus-per-task=4
#SBATCH -p shared,cui
#SBATCH -t 01:00:00

echo $SLURM_NODELIST

srun ./laplace_threads 2000 2000 1000 /scratch/heat.dat $SLURM_CPUS_PER_TASK

Dans le cas d'un job utilisant des threads, il faut changer légérement la configuration d'exécution. En effet, dans ce cas slurm ne doit créer qu'un seul processus (d'où le paramètre ntasks=1) et le programme créera plusieurs threads. Il faut transmettre cette information à slurm pour qu'il puisse faire l'allocation correctement. Ici, on met le paramètre cpus-per-task à 4 et on transmet cette information à l'executable via la variable d'environnement $SLURM_CPUS_PER_TASK.