Python et intelligence artificielle
Python est largement utilisé sur eXplor-v2 pour l’analyse de données, le calcul scientifique, la visualisation et l’apprentissage automatique. Cette page présente les méthodes recommandées pour créer un environnement Python reproductible, utiliser les bibliothèques scientifiques et exploiter les GPU avec les principaux frameworks d’IA.
Python sur eXplor-v2
Python peut être utilisé de plusieurs façons :
- Modules système : versions de Python installées globalement ;
- Environnements Conda : environnements isolés, adaptés aux projets Python et recommandés pour la reproductibilité ;
- Conteneurs Apptainer : environnements complets pour les dépendances complexes ou les piles logicielles spécialisées.
Pour un projet, privilégiez un environnement Conda dédié ou un conteneur Apptainer. Consultez Python et Conda pour les instructions de création, d’activation et d’export d’environnements.
Créer un environnement scientifique
Les bibliothèques scientifiques usuelles comprennent :
- NumPy : calcul numérique et tableaux multidimensionnels ;
- SciPy : optimisation, intégration, interpolation et algorithmes scientifiques ;
- pandas : manipulation et analyse de données tabulaires ;
- scikit-learn : apprentissage automatique classique ;
- Matplotlib et Seaborn : visualisation de données ;
- Jupyter : notebooks interactifs.
Exemple d’environnement Conda :
conda create -n science \
python=3.11 \
numpy \
scipy \
pandas \
scikit-learn \
matplotlib \
seaborn \
jupyter
conda activate science
Exportez l’environnement pour le versionner et le recréer ultérieurement :
conda env export --from-history > environment.yml
Frameworks d’intelligence artificielle
PyTorch
PyTorch est utilisé pour l’apprentissage profond, la vision par ordinateur, le traitement du langage et de nombreux projets de recherche en IA.
Exemple d’installation avec prise en charge CUDA, à adapter à la version CUDA compatible avec votre environnement :
conda create -n pytorch \
python=3.11 \
pytorch \
torchvision \
torchaudio \
pytorch-cuda=12.4 \
-c pytorch \
-c nvidia
conda activate pytorch
Vérifiez le GPU dans une allocation Slurm GPU :
python -c "import torch; print(torch.__version__); print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0) if torch.cuda.is_available() else 'GPU indisponible')"
TensorFlow
TensorFlow est un framework d’apprentissage profond utilisé pour la conception, l’entraînement et l’inférence de modèles.
conda create -n tensorflow python=3.11 tensorflow -c conda-forge
conda activate tensorflow
Vérifiez les périphériques GPU visibles :
python -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"
JAX
JAX est une bibliothèque de calcul numérique et d’apprentissage automatique, particulièrement adaptée à l’accélération GPU et au calcul vectorisé.
conda create -n jax python=3.11 jax jaxlib -c conda-forge
conda activate jax
Vérifiez les périphériques détectés :
python -c "import jax; print(jax.devices())"
Transformers
La bibliothèque Transformers de Hugging Face permet d’utiliser et d’entraîner des modèles pré-entraînés pour le langage, la vision et l’audio.
conda create -n transformers \
python=3.11 \
transformers \
datasets \
accelerate \
pytorch \
-c conda-forge \
-c pytorch
conda activate transformers
Utiliser un GPU
Pour exécuter Python sur GPU, votre job Slurm doit réserver un GPU avec --gres=gpu:1. Le framework utilisé doit être compatible avec le pilote NVIDIA et CUDA présents sur le nœud attribué.
Vérifiez toujours le GPU attribué avant d’exécuter un entraînement ou un calcul coûteux :
nvidia-smi
echo "GPU visibles : ${CUDA_VISIBLE_DEVICES:-non défini}"
Slurm peut rendre visibles uniquement les GPU réservés à votre job. Même si le nœud possède plusieurs cartes, voir un seul GPU via nvidia-smi ou CUDA_VISIBLE_DEVICES est normal lorsqu’un seul GPU a été demandé.
Exemple de job CPU
Créez un script, par exemple python-cpu.slurm :
#!/bin/bash
#SBATCH --job-name=python-cpu
#SBATCH --partition=compute
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --mem=8G
#SBATCH --time=01:00:00
#SBATCH --output=logs/%x-%j.out
#SBATCH --error=logs/%x-%j.err
set -euo pipefail
mkdir -p logs
cd "$SLURM_SUBMIT_DIR"
module purge
module load python/VERSION
# Activez l'environnement correspondant à votre projet.
# Adaptez ce chemin à votre installation Conda.
source "$HOME/.conda/envs/science/bin/activate"
python mon_script.py
Soumettez le job :
sbatch python-cpu.slurm
Exemple de job GPU
Créez un script, par exemple python-gpu.slurm :
#!/bin/bash
#SBATCH --job-name=python-gpu
#SBATCH --partition=gpu
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=8
#SBATCH --mem=32G
#SBATCH --gres=gpu:1
#SBATCH --time=02:00:00
#SBATCH --output=logs/%x-%j.out
#SBATCH --error=logs/%x-%j.err
set -euo pipefail
mkdir -p logs
cd "$SLURM_SUBMIT_DIR"
module purge
module load python/VERSION
# Activez l'environnement contenant PyTorch, TensorFlow ou JAX.
source "$HOME/.conda/envs/pytorch/bin/activate"
nvidia-smi
python entrainement.py
Soumettez le job :
sbatch python-gpu.slurm
Bonnes pratiques
- Créez un environnement Conda par projet pour éviter les conflits entre dépendances.
- Versionnez
environment.yml,requirements.txt, les scripts Python et les scripts Slurm avec votre projet. - Chargez une version explicite de Python dans les scripts lorsque le centre fournit des modules versionnés.
- Installez les dépendances dans votre environnement personnel ou projet, jamais avec
pip install --userdans le Python système. - Testez votre script avec un jeu de données réduit avant une soumission longue.
- Vérifiez
torch.cuda.is_available(),jax.devices()ou les périphériques TensorFlow dans une allocation GPU. - Demandez seulement le nombre de CPU, GPU et la quantité de mémoire réellement nécessaires.
- Utilisez
$SCRATCHpour les données temporaires volumineuses, les caches et les sorties intermédiaires ; conservez les résultats importants dans l’espace projet.