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é :
ssh votre_login@curta.mcia.fr
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
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)
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))'
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