Skip to content

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 ?

  1. Vérifiez d'abord avec pip list — il est peut-être déjà là
  2. Si c'est un besoin ponctuel : pip install --user monpackage
  3. Si c'est un besoin récurrent partagé : écrivez à hpc-support@monlabo.fr
  4. 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.