Modules Python et IA
Les environnements Python pour le deep learning sont disponibles sous forme de modules pré-installés sur Nova. Ils contiennent PyTorch, TensorFlow et leurs dépendances, compilés pour les GPU H100.
Le bon réflexe
Avant d'installer quoi que ce soit avec conda ou pip, vérifiez si un module existe déjà :
bash
module avail
module spider pytorch
Modules disponibles
| Module | Contenu principal | Python | CUDA |
|---|---|---|---|
pytorch/2.6.0-cu124 |
PyTorch 2.6.0 + transformers, datasets, scikit-learn... | 3.11 | 12.4 |
tensorflow/2.16.1-cu124 |
TensorFlow 2.16.1 + keras | 3.11 | 12.4 |
rapids/24.08-cu124 |
cuDF, cuML, cuGraph — pandas/sklearn sur GPU | 3.11 | 12.4 |
miniforge/24.9.2-0 |
conda + pip — pour créer vos propres environnements | 3.12 | — |
Pour voir la liste complète des packages d'un module :
module load pytorch/2.6.0-cu124
pip list
conda list
Pour obtenir de l'aide sur un module :
module help pytorch/2.6.0-cu124
Pour voir ce que le module modifie dans votre environnement (PATH, variables...) :
module show pytorch/2.6.0-cu124
Utiliser PyTorch
Chargement du module
module load pytorch/2.6.0-cu124
Le chargement du module active automatiquement les dépendances : CUDA 12.4, cuDNN, NCCL.
# Vérification — à faire depuis un nœud GPU
python -c "
import torch
print('PyTorch :', torch.__version__)
print('CUDA dispo :', torch.cuda.is_available())
print('GPU :', torch.cuda.get_device_name(0))
"
Packages inclus
torch 2.6.0+cu124
torchvision 0.21.0+cu124
torchaudio 2.6.0+cu124
numpy scipy, pandas, matplotlib, seaborn
transformers datasets, accelerate, tokenizers
scikit-learn tensorboard, wandb, mlflow
jupyterlab ipykernel, ipywidgets
einops timm, tqdm
Dans un job Slurm
#!/bin/bash
#SBATCH --job-name=pytorch_train
#SBATCH --partition=gpu_h100
#SBATCH --qos=normal
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=8
#SBATCH --gres=gpu:nvidia_h100_pcie:1
#SBATCH --mem=32G
#SBATCH --time=24:00:00
#SBATCH --output=/data/%u/logs/%x_%j.out
#SBATCH --error=/data/%u/logs/%x_%j.err
source /etc/profile.d/z00_lmod.sh
module load pytorch/2.6.0-cu124
python mon_script.py
Ajouter des packages
Trois options selon votre besoin.
Option A — Demander à l'admin (recommandé si plusieurs utilisateurs en ont besoin)
Envoyez un email à hpc-support@monlabo.fr en précisant le nom du package et la version souhaitée. Il sera ajouté dans l'environnement partagé et disponible pour tous.
Option B — Installer dans votre home (usage personnel, rapide)
module load pytorch/2.6.0-cu124
pip install --user monpackage
Le package est installé dans ~/.local/lib/python3.11/. Il est disponible uniquement quand le module pytorch/2.6.0-cu124 est chargé.
Attention aux conflits
N'installez jamais torch via pip install --user torch. Cela crée une version locale qui prend le dessus sur le module et provoque des erreurs CUDA. Si vous avez fait cette erreur :
bash
pip uninstall torch torchvision torchaudio
Option C — Créer votre propre environnement conda (usage avancé)
Pour des besoins très spécifiques : version différente de PyTorch, packages incompatibles entre eux, isolation complète d'un projet.
module load miniforge
# Créer l'environnement
conda create -n mon_projet python=3.11 -y
conda activate mon_projet
# Installer PyTorch dans votre env perso
pip install torch==2.6.0 torchvision torchaudio \
--index-url https://download.pytorch.org/whl/cu124
# Ajouter vos packages
pip install monpackage autrepackage
# Vérifier
python -c "import torch; print(torch.__version__)"
Vos environnements sont stockés dans ~/conda-envs/ — ils sont persistants sur NFS et accessibles depuis tous les nœuds.
Module et environnement conda personnel sont incompatibles
Il n'est pas possible d'activer à la fois un module (module load pytorch) et un environnement conda personnel (conda activate mon_projet). Choisissez l'un ou l'autre. Pour passer de l'un à l'autre :
bash
conda deactivate
module purge
module load <autre_module>
Entraînement multi-GPU
DDP sur un nœud (2 GPU)
#!/bin/bash
#SBATCH --job-name=train_ddp
#SBATCH --partition=gpu_h100
#SBATCH --qos=normal
#SBATCH --nodes=1
#SBATCH --ntasks=2
#SBATCH --cpus-per-task=8
#SBATCH --gres=gpu:nvidia_h100_pcie:2
#SBATCH --mem=64G
#SBATCH --time=48:00:00
#SBATCH --output=/data/%u/logs/%x_%j.out
source /etc/profile.d/z00_lmod.sh
module load pytorch/2.6.0-cu124
# torchrun gère automatiquement le DDP
torchrun \
--nproc_per_node=2 \
--nnodes=1 \
train_ddp.py
DDP multi-nœuds (2 nœuds × 2 GPU)
#!/bin/bash
#SBATCH --job-name=train_ddp_multi
#SBATCH --partition=gpu_h100
#SBATCH --qos=long
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=2
#SBATCH --cpus-per-task=8
#SBATCH --gres=gpu:nvidia_h100_pcie:2
#SBATCH --mem=64G
#SBATCH --time=7-00:00:00
#SBATCH --output=/data/%u/logs/%x_%j.out
source /etc/profile.d/z00_lmod.sh
module load pytorch/2.6.0-cu124
export MASTER_ADDR=$(scontrol show hostnames "$SLURM_JOB_NODELIST" | head -1)
export MASTER_PORT=29500
export WORLD_SIZE=$SLURM_NTASKS
srun torchrun \
--nproc_per_node=2 \
--nnodes=2 \
--node_rank=$SLURM_NODEID \
--master_addr=$MASTER_ADDR \
--master_port=$MASTER_PORT \
train_ddp.py
Utiliser le scratch NVMe (recommandé pour les datasets volumineux)
Le scratch NVMe local (/scratch) est 5 à 10× plus rapide que NFS pour les I/O. Il est automatiquement nettoyé à la fin du job.
#!/bin/bash
#SBATCH --partition=gpu_h100
#SBATCH --qos=normal
#SBATCH --gres=gpu:nvidia_h100_pcie:1
#SBATCH --time=24:00:00
#SBATCH --output=/data/%u/logs/%x_%j.out
source /etc/profile.d/z00_lmod.sh
module load pytorch/2.6.0-cu124
# Activer le scratch local
source /apps/slurm/scratch_env.sh
# $SCRATCH = /scratch/$SLURM_JOB_ID
# Copier le dataset sur le NVMe local
cp -r /data/$USER/mon_dataset $SCRATCH/data/
# Entraînement sur le scratch (I/O rapides)
python train.py \
--data $SCRATCH/data/mon_dataset \
--output $SCRATCH/checkpoints/
# Sauvegarder les résultats sur NFS avant la fin du job
cp -r $SCRATCH/checkpoints/ /data/$USER/resultats/$SLURM_JOB_ID/
echo "Résultats : /data/$USER/resultats/$SLURM_JOB_ID/"
Le scratch est temporaire
Le contenu de $SCRATCH est supprimé automatiquement à la fin du job. Pensez toujours à copier vos résultats vers /data/$USER/ avant la fin.
Utiliser TensorFlow
module load tensorflow/2.16.1-cu124
python -c "
import tensorflow as tf
print('TensorFlow :', tf.__version__)
print('GPU :', tf.config.list_physical_devices('GPU'))
"
Dans un job Slurm :
#!/bin/bash
#SBATCH --partition=gpu_h100
#SBATCH --qos=normal
#SBATCH --gres=gpu:nvidia_h100_pcie:1
#SBATCH --time=24:00:00
#SBATCH --output=/data/%u/logs/%x_%j.out
source /etc/profile.d/z00_lmod.sh
module load tensorflow/2.16.1-cu124
python mon_script_tf.py
Commandes de référence
# Lister les modules disponibles
module avail
# Chercher un module
module spider pytorch
# Charger un module
module load pytorch/2.6.0-cu124
# Voir les modules chargés
module list
# Voir les packages installés dans le module actif
pip list
conda list
# Aide sur un module
module help pytorch/2.6.0-cu124
# Voir ce que fait le module (variables, PATH)
module show pytorch/2.6.0-cu124
# Décharger un module
module unload pytorch/2.6.0-cu124
# Décharger tous les modules
module purge
FAQ
Puis-je charger pytorch et tensorflow en même temps ?
Non. Chaque module active un environnement conda — deux environnements conda ne peuvent pas être actifs simultanément. Pour changer de module :
conda deactivate
module purge
module load tensorflow/2.16.1-cu124
Mon script Python ne trouve pas torch alors que le module est chargé ?
Vérifiez que votre script n'est pas pollué par une installation dans ~/.local/ :
python -c "import torch; print(torch.__file__)"
# Doit afficher : /apps/envs/pytorch-2.6.0-cu124/lib/python3.11/site-packages/torch/__init__.py
# Si vous voyez ~/.local/... → pip uninstall torch
J'ai besoin d'un package qui n'est pas dans le module. Que faire ?
- Vérifiez d'abord avec
pip list— il est peut-être déjà là - Si c'est un besoin ponctuel :
pip install --user monpackage - Si c'est un besoin récurrent partagé : écrivez à hpc-support@monlabo.fr
- Si vous avez besoin d'isolation complète : créez un environnement conda personnel (voir Option C)
Comment savoir quelle version de CUDA est utilisée ?
module load pytorch/2.6.0-cu124
python -c "import torch; print(torch.version.cuda)"
nvidia-smi # version du driver sur le nœud
Support
Email : hpc-support@monlabo.fr
Merci d'inclure dans votre message : votre login, le nom du module chargé (module list), et le message d'erreur complet.