IMB > cellule > Calcul et Développement

MCIA - Calculer au mésocentre régional (curta)

Tous les membres de l’IMB (et plus largement de l’université) peuvent demander l’ouverture d’un compte sur les machines de calcul du mésocentre Aquitain (MCIA).

Un compte permet d’accéder à toutes les ressources offertes par le mésocentre :

Cliquez ici pour demander un compte

Actuellement un seul cluster est en activité :

Spécificités IMB sur Curta

Sur Curta, l’IMB dispose de 28 machines dédiées, [rouge]accessibles aux personnes appartenant au groupe unix imb[/rouge] (ex : si votre groupe est inria vous pouvez demander à changer) via la partition imb-resources, option :

... -p imb-resources ...

[rouge]Important : contrairement aux autre machines, ces machines imb-resources sont configurées avec le mode turbo boost activé ce qui veut dire que si vous n’utilisez pas tous les coeurs de calculs, la fréquences CPU sera la fréquence maximale possible des coeurs.[/rouge]

Pour maximiser vos chances de démarrage de votre jobs, vous avez interêts à utiliser l’option suivante, permettant de choisir automatiquement la première partition disponible :

... -p imb,imb-resources ...

Pour ne plus avoir à préciser cette option, si vous souhaitez toujours soumettre dans ces files, vous pouvez également ajouter dans votre .bashrc :

export SLURM_PARTITION=imb,imb-resources

Note Curta

Pas de flag --exclusive

Sur curta, le flag ’--exclusive’ n’est pas autorisé. Pour le simuler, il faut demander (avec ’-n’) précisément un nombre de tache multiple de 32 (car il y a 32 coeurs sur chaque noeuds du cluster principal) et de noeuds (avec ’-N’). On doit avoir : n=32*N. ex : pour réserver 3 noeuds entiers, mettre les options ’-N3 -n96’ dans les commandes slurm.

Réserver plus de mémoire par cœur

Pour disposer de plus de mémoire par processus (par défaut, 96Go/32= 3Go), une solution consiste à réserver des noeuds entiers mais ne pas utiliser tous les coeurs de calcul en lançant moins de processus. On utilise ici l’option ’-c’ permettant de préciser combien de cœurs sont dédiés à chaque processus. ex : pour lancer un total de 6 processus sur 3 nœuds. 3x32/6=16 cœurs par processus. on utilisera les options ’-n6 -N3 -c16’ des commandes slurm. Chaque processus aura donc 48Go disponible (16*3Go)

Utilisations classiques

keras et tensorflow sur GPU

Note : les modules keras et tensorflow (et surtout les modules Nvidia cuda et cuDNN) ne sont disponibles que sur les nœuds gpu.
Il faut donc commencer par se placer sur un nœud gpu, puis charger les modules adhoc.

"--gres=gpu:1" permet de réserver une carte GPU sur les deux présentes.

"--gres=gpu:2" permet de réserver les deux cartes GPU.

Ce qui a pour effet de définir les variables d’environnement suivantes (cas avec 2 GPU demandées) :

SLURM_STEP_GPUS=0,1
CUDA_VISIBLE_DEVICES=0,1
GPU_DEVICE_ORDINAL=0,1

Pour charger uniquement tensorflow : module load tensorflow-gpu/1.13.1

Le module keras inclus le module tensorflow

srun -p gpu  --gres=gpu:1 --pty bash
module load cuda/10.0 cuDNN/7.5.0 keras/2.3.0
python -c 'import tensorflow as t;h=t.constant("hi");s=t.Session();print(s.run(h))'

On peut aussi vouloir les dernières versions de modules ptyhon, en les reinstallant dans son environnement utilisateur :

srun -p gpu  --gres=gpu:1 --pty bash
module load cuda/10.0 cuDNN/7.5.0
pip3.6 install --upgrade --user tensorflow-gpu keras
python -c 'import tensorflow as t;h=t.constant("hi");s=t.Session();print(s.run(h))'

Utilisations particulières

calcul hétérogène avec un gros calcul (premier noeud) + plein de petits (nœuds suivants)

Premier processus (programme-big avec 2 arguments) sur un noeud bigmem avec une tache de 64 coeurs, et 64 processus (programme-small avec 2 arguments) sur 4 cœurs.

srun --time=1:0:0 -C bigmem  --mem=2935Go -n1  -c64  programme-big arg1 arg2 :  -C compute --mem=93Go   -n64 -c4   programme-small arg1 arg2

ou en mode sbatch :

#! /bin/bash
#SBATCH --time=1:0:0
#SBATCH -C bigmem  --mem=2935Go -n1 -c64  programme-big arg1 arg2
#SBATCH packjob
#SBATCH -C compute --mem=93Go   -n64 -c4  programme-small arg1 arg2

srun -C bigmem  --mem=2935Go -n1  -c64  programme-big arg1 arg2 :  -C compute --mem=93Go   -n64 -c4   programme-small arg1 arg2