# Exemple avec wget (remplacez l'URL par la version choisie !)
wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh
environment.yml)
Installer des logiciels scientifiques et leurs nombreuses dépendances peut vite devenir un casse-tête, surtout sur un environnement partagé comme un cluster de calcul (HPC). Comment s’assurer d’avoir la bonne version de Python, de R, ou de cette bibliothèque bioinformatique cruciale sans interférer avec les installations des autres utilisateurs ? Conda est un outil extrêmement populaire qui répond à ces questions en vous permettant de gérer à la fois les paquets logiciels et des environnements isolés. Cette documentation/cours vous guidera pas à pas pour utiliser Conda efficacement sur le cluster HPC IO d’ISDM-MESO, en privilégiant la distribution Miniforge et le canal communautaire conda-forge, afin d’éviter les restrictions de licence potentielles liées à la distribution Anaconda standard.
ISDM-MESO remercie chaleureusement Raphaël Flores, Rémy Decoupes et Pierre Poulain pour leurs recommandations faites suite au changement de licence d’anaconda.
"L’enfer des dépendances" (Dependency Hell) : Le logiciel A a besoin de la bibliothèque X version 1, mais le logiciel B a besoin de la bibliothèque X version 2… Comment faire cohabiter les deux ?
Conflits de Versions : Vous avez besoin de Python 3.8 pour un vieux projet, mais de Python 3.11 pour un nouveau. Les installer globalement peut causer des problèmes.
Reproductibilité : Comment être sûr que votre script donnera le même résultat dans 6 mois, ou quand un collègue essaiera de le lancer avec des versions de bibliothèques potentiellement différentes ?
Permissions : En tant qu’utilisateur sur cluster IO, vous n’avez pas les droits pour installer des logiciels dans les répertoires système (comme /usr/local).
Restrictions de Licence : L’utilisation de certains canaux de la distribution Anaconda standard est soumise à des conditions d’utilisation qui peuvent être restrictives en milieu académique ou pour certaines organisations Anaconda Blog Post.
Conda est un système open-source qui fait deux choses principales :
Gestionnaire de Paquets : Il installe des logiciels (appelés "paquets"). Il ne se limite pas à Python ou R, il peut aussi installer des outils en ligne de commande, des bibliothèques C/C++, etc. Il gère automatiquement les dépendances (si le paquet A a besoin du paquet B, Conda installe les deux).
Gestionnaire d’Environnements : Il crée des espaces isolés (des "environnements") où vous pouvez installer des ensembles spécifiques de paquets. Chaque environnement est indépendant des autres et de votre système principal.
Analogie : Imaginez que chaque projet scientifique est une recette de cuisine différente. Conda vous permet de créer une "cuisine séparée" (un environnement) pour chaque recette, avec exactement les bons ingrédients (paquets) aux bonnes quantités (versions), sans que les ingrédients d’une cuisine n’interfèrent avec ceux d’une autre. Votre cuisine principale (le système de base) reste propre.
Anaconda Distribution : Une énorme distribution qui inclut Conda, Python, des centaines de paquets pré-installés (NumPy, SciPy, Pandas, Jupyter…), et une interface graphique (Anaconda Navigator). C’est pratique mais volumineux, et utilise par défaut les canaux Anaconda (defaults) qui sont soumis aux nouvelles conditions d’utilisation qui font qu’on ne peut les utiliser gratuitement.
Miniconda : Une version minimale qui inclut seulement Conda, Python, et le strict nécessaire pour que Conda fonctionne. C’est à vous d’installer les autres paquets. Il utilise aussi les canaux defaults par défaut, donc là aussi soumis à licence.
Miniforge : Une alternative minimale, similaire à Miniconda, mais maintenue par la communauté (conda-forge). Sa particularité cruciale est qu’elle est pré-configurée pour utiliser le canal conda-forge par défaut et n’inclut pas les canaux defaults. C’est LA distribution recommandée par ISDM-MESO et par une grande partie de la communauté scientifique pour une expérience sans contrainte de licence et un accès à un vaste catalogue de paquets communautaires.
La sociétée Anaconda repère les adresses IP qui utilisent les canaux defaults et demande a posteriori des régularisations de plusieurs dizaines de milliers d’euros. Si vous utilisez les canaux defaults sans abonnement à Anaconda (plus de 50$/mois), ISDM-MESO recevra une demande de régularisation.
|
⇒ Nous nous concentrerons donc sur l’utilisation de Miniforge.
Environnements : Les "cuisines" ou "boîtes à outils" isolées. Vous avez toujours au moins un environnement, appelé base (celui créé par l’installation de Miniforge). Il est fortement déconseillé d’installer beaucoup de paquets directement dans base. Il faut créer des environnements nommés pour chaque projet ou groupe de tâches.
Paquets (Packages) : Les "ingrédients" ou "outils" (logiciels, bibliothèques). Exemples : python, numpy, r-base, pandas, matplotlib, samtools, gcc…
Canaux (Channels) : Les "magasins" ou "fournisseurs" où Conda cherche les paquets. Chaque canal est une URL pointant vers un dépôt de paquets.
conda-forge : LE canal communautaire le plus large et le plus actif. Contient des milliers de paquets scientifiques, outils, bibliothèques… C’est le canal que nous allons privilégier.
bioconda : Un canal spécialisé (qui dépend souvent de conda-forge) pour les logiciels bioinformatiques. Très populaire dans ce domaine.
defaults : Les canaux maintenus par la société Anaconda. ISDM-MESO interdit de les utiliser pour éviter les problèmes de licence.
D’autres canaux existent (privés, institutionnels…).
Gestionnaire : La commande conda elle-même, que vous tapez dans votre terminal pour interagir avec les environnements et les paquets.
Vous pouvez connaitre les différentes versions de miniforge installées sur le cluster avec la commande module avail miniforge. Chosisez la version désirée et chargez-la (module load …). Voilà, vous pouvez commencer à utiliser Miniforge !
Si, et seulement si, les versions déjà installées sur le cluster IO ne vous conviennent pas, vous pouvez installer Miniforge dans votre home
|
Télécharger l’installeur :
Allez sur la page des releases de Miniforge : https://github.com/conda-forge/miniforge#miniforge3
Trouvez le lien pour Linux x86_64 (le plus courant sur les clusters HPC). Le nom ressemble à Miniforge3-Linux-x86_64.sh.
Copiez le lien et téléchargez-le sur le cluster (directement sur le nœud de login) en utilisant wget ou curl.
# Exemple avec wget (remplacez l'URL par la version choisie !)
wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh
1 Exécuter l’installeur :
* Lancez le script téléchargé avec bash.
bash Miniforge3-Linux-x86_64.sh
L’installeur vous posera plusieurs questions :
License Agreement : Lisez (appuyez sur Espace pour défiler) et tapez yes pour accepter.
Installation Location : Par défaut, il propose ~/miniforge3 en racine de votre HOME. Vous pouvez aussi choisir de l’installer dans ~/bin (répertoire qui pourrait regrouper tous les programmes que vous installez) ou dans un de vos workspace. Appuyez sur Entrée pour accepter ou spécifiez un autre chemin dans votre $HOME.
Initialize Conda? Il demandera s’il doit exécuter conda init. Répondez yes. Cela modifiera votre fichier ~/.bashrc pour que la commande conda soit disponible automatiquement au prochain démarrage de session.
2 Activer les Changements :
Une fois l’installation terminée, les changements dans votre .bashrc ne sont pas actifs immédiatement dans votre session courante. Vous avez deux options :
Fermez votre session SSH et reconnectez-vous.
Ou sourcez votre fichier de configuration : source ~/.bashrc
Vous devriez maintenant voir (base) au début de votre prompt, indiquant que l’environnement Conda de base est actif.
# Exemple de prompt après initialisation (base) [monuser@login-node ~]$
Miniforge utilise conda-forge par défaut, mais s’assurer de sa priorité, configurons Conda explicitement. Ces commandes modifient votre fichier de configuration Conda global (~/.condarc).
# 1. Assurer que conda-forge est le canal principal (il l'est déjà avec Miniforge, mais ça ne fait pas de mal) conda config --add channels conda-forge # 2. Ajouter le canal bioconda (si vous faites de la bioinfo, sinon optionnel) conda config --add channels bioconda # 3. Définir la priorité des canaux comme stricte. # Conda cherchera d'abord dans le canal le plus prioritaire (conda-forge ici) # et n'ira voir les autres QUE si le paquet n'y est pas. Très important. conda config --set channel_priority strict # 4. Ajouter 'nodefaults' à la liste des canaux. # Ceci dit explicitement à Conda de NE JAMAIS chercher dans les canaux 'defaults' d'Anaconda. # Même si Miniforge ne les configure pas, cette ligne garantit qu'ils ne seront pas utilisés. conda config --add channels nodefaults # Vérifier la configuration (optionnel) echo "--- Configuration Conda Actuelle ---" conda config --show channels conda config --show channel_priority echo "---------------------------------" # Vous devriez voir 'conda-forge', 'bioconda' (si ajouté), et 'nodefaults' listés. # Et 'channel_priority: strict'.
Cette configuration garantit que vous utiliserez principalement les paquets fournis par la communauté via conda-forge (et bioconda), sans dépendre des canaux defaults d’Anaconda.
N’installez pas tous vos outils dans l’environnement (base) ! Créez des environnements dédiés pour chaque projet ou type d’analyse.
conda create Syntaxe : conda create -n <nom_environnement> [paquets_initiaux…]
-n <nom_environnement> : Spécifie le nom de votre nouvel environnement (ex: analyse_rna, plots, deeplearning).
[paquets_initiaux…] : Optionnel. Vous pouvez lister des paquets à installer directement lors de la création. Vous pouvez spécifier des versions avec =.
# Crée un environnement nommé 'stats_env' avec python 3.10, numpy, pandas, etc. conda create -n stats_env python=3.10 numpy pandas matplotlib seaborn scipy # Conda va lister les paquets qu'il va installer (y compris les dépendances) # et vous demander de confirmer (y/n). Tapez 'y'. # ... Attendre la fin de l'installation ...
conda create -n projet_vide # Confirmer avec 'y'
conda activate Pour utiliser un environnement, vous devez l’activer. Cela modifie votre PATH et d’autres variables pour que le shell utilise les paquets de cet environnement spécifique.
# Activer l'environnement créé précédemment conda activate stats_env # Remarquez que le prompt change ! # (stats_env) [monuser@login-node ~]$ # Vérifier la version de Python DANS cet environnement python --version # Devrait afficher Python 3.10.x # Vérifier où se trouve l'exécutable python utilisé which python # Devrait pointer vers un chemin dans .../envs/stats_env/bin/python
conda deactivate Pour revenir à l’environnement précédent (souvent l’environnement base).
# Depuis l'environnement (stats_env) conda deactivate # Le prompt revient à (base) ou à votre prompt système normal # (base) [monuser@login-node ~]$ # Vérifier la version de Python (celle de l'environnement 'base' maintenant) python --version
conda env list Montre tous les environnements que vous avez créés.
conda env list # Ou : conda info --envs # Exemple de sortie : # # conda environments: # # # base * /home/monuser/miniforge3 # projet_vide /home/monuser/miniforge3/envs/projet_vide # stats_env /home/monuser/miniforge3/envs/stats_env # L'astérisque (*) indique l'environnement actuellement actif.
conda env remove Supprime complètement un environnement et tous les paquets qu’il contient.
| Cette action est irréversible ! Assurez-vous de ne plus avoir besoin de l’environnement. |
# D'abord, désactiver l'environnement si vous êtes dedans # conda deactivate # Supprimer l'environnement 'projet_vide' conda env remove -n projet_vide # Confirmer avec 'y'
Une fois un environnement activé, vous pouvez y ajouter, mettre à jour ou supprimer des paquets.
conda install Installe un ou plusieurs paquets dans l’environnement actuellement actif.
scikit-learn à stats_env# D'abord, s'assurer que l'environnement cible est actif conda activate stats_env # Installer scikit-learn (Conda trouvera la version compatible) conda install scikit-learn # Confirmer avec 'y'
numpyconda activate stats_env # Tenter d'installer numpy version 1.23 (Conda vérifiera la compatibilité) conda install numpy=1.23 # Si c'est incompatible avec d'autres paquets, Conda proposera une solution # ou affichera une erreur. Lisez attentivement les messages.
conda list Affiche les paquets (et leurs versions) installés dans l’environnement actif.
conda activate stats_env conda list # Pour chercher un paquet spécifique dans la liste : conda list | grep numpy
conda update Met à jour des paquets vers les versions les plus récentes compatibles avec les autres paquets de l’environnement.
conda activate stats_env # Mettre à jour un paquet spécifique (ex: pandas) conda update pandas # Mettre à jour tous les paquets de l'environnement (prudent !) conda update --all # Confirmer avec 'y' après avoir vérifié les changements proposés
| Attention, mettre à jour les paquets de votre environnement peut altérer les résultats de vos analyses. Par exemple, si vous devez traiter 1000 fichiers de données, il est très très fortement déconseillé de mettre à jours vos logiciels au milieu du traitement de ces fichiers. En effet, vous auriez 500 fichiers traités avec la versions A et 500 traités avec la version B de vos logiciels. Aucun reviewer ne l’acceptera ! |
conda search Cherche si un paquet existe dans les canaux configurés et quelles versions sont disponibles.
# Chercher le paquet 'requests' (pour faire des requêtes HTTP) conda search requests # Chercher une version spécifique de R conda search r-base=4.2
conda remove Supprime un paquet de l’environnement actif.
conda activate stats_env # Supprimer seaborn (installé précédemment) conda remove seaborn # Confirmer avec 'y'
environment.yml)Un fichier décrit le contenu d’un environnement pour pouvoir le recréer ailleurs ou plus tard.
Utiliser et maintenir son ou ses environment.yml est le minimum vital de la reproductibilité avec Conda. En science, c’est plus qu’une bonne pratique, c’est indispensable !
|
Crée un fichier YAML listant les paquets et les canaux utilisés dans l’environnement actif.
stats_env# Activer l'environnement à exporter conda activate stats_env # Exporter la description dans un fichier conda env export > stats_env_20270423.yml # Regarder le contenu du fichier (exemple simplifié) cat stats_env.yml # name: stats_env # channels: # - conda-forge # - bioconda # Si ajouté # - nodefaults # dependencies: # - python=3.10.4=xxx_cf # Version exacte avec hash de build # - numpy=1.23.5=xxx_cf # - pandas=1.5.3=xxx_cf # - matplotlib=3.7.0=xxx_cf # - seaborn=0.12.2=xxx_cf # - scipy=1.10.0=xxx_cf # - scikit-learn=1.2.1=xxx_cf # Si ajouté # - pip: # Liste aussi les paquets installés via pip # - some-pip-package==1.0 # prefix: /home/denise/miniforge3/envs/stats_env
Pensez à dater et historiser à chaque changement (ajout, suppression ou mise à jour de logiciel) vos fichiers environment.yml. Vous devez garder la tracabilité de vos environnements logiciels !
|
Pour la reproductibilité : Le fichier exporté par défaut contient les versions exactes (avec le hash de build).
Pour plus de flexibilité (moins reproductible) : Parfois, et si c’est vraiment indispensable, on veut juste la liste des paquets principaux sans les versions exactes pour installer les dernières compatibles :
conda activate stats_env
conda env export --from-history > stats_env_history.yml
# Ce fichier ne contiendra que les paquets que VOUS avez explicitement installés
# (ex: python=3.10, numpy, pandas...) sans les dépendances et souvent sans les versions exactes.
environment.ymlPrend un fichier environment.yml et crée un nouvel environnement avec les paquets spécifiés.
# (Assurez-vous qu'aucun environnement 'stats_env' n'existe si vous voulez le nom exact) # conda env remove -n stats_env # Si besoin de le supprimer avant # Créer l'environnement à partir du fichier exporté précédemment conda env create -f stats_env_20270423.yml # Cela crée un nouvel environnement nommé 'stats_env' (le nom est dans le fichier .yml) # avec exactement les mêmes paquets que ce que vous avez le 23 avril 2027.
environment.ymlSi vous modifiez le fichier environment.yml (ex: ajoutez un paquet, changez une version), vous pouvez mettre à jour un environnement existant pour qu’il corresponde.
# Activer l'environnement à mettre à jour conda activate stats_env # Mettre à jour l'environnement basé sur le fichier (modifié) # --prune supprime les paquets de l'environnement qui ne sont PLUS dans le fichier conda env update -f stats_env.yml --prune
Workflow Recommandé :
Créez un environnement pour votre projet (conda create -n …).
Installez les paquets nécessaires (conda install …).
Exportez l’environnement dans un fichier environment.yml (conda env export > …).
Ajoutez ce fichier environment.yml à votre dépôt Git avec votre code ou de votre projet d’analyse afin de l’historiser.
Quand vous (ou un collègue) récupérez le projet, créez l’environnement à partir du fichier (conda env create -f …).
Il faut s’assurer que votre script SLURM exécute vos commandes dans le bon environnement Conda.
Cette méthode demande que l’interpréteur de commandes utilisé par SLURM puisse trouver et exécuter la commande conda activate.
conda activate#!/bin/bash #SBATCH --job-name=CondaSlurmActivate #SBATCH --output=conda_activate_%j.out #SBATCH --error=conda_activate_%j.err #SBATCH --time=00:15:00 #SBATCH --nodes=1 #SBATCH --ntasks=1 #SBATCH --cpus-per-task=1 #SBATCH --mem=2G # --- Configuration --- CONDA_ENV_NAME="stats_env_20270423" # L'environnement Conda à utiliser PYTHON_SCRIPT="$SLURM_SUBMIT_DIR/mon_script_stats.py" # Le script Python à lancer INPUT_FILE="$SLURM_SUBMIT_DIR/input_data.csv" # --- Initialiser Conda pour ce script --- # l'activation de miniforge peut varier si vous l'avez installé par vous même module load miniforge # adaptez la version # --- Activer l'environnement spécifique --- echo "Activation de l'environnement Conda: $CONDA_ENV_NAME" conda activate "$CONDA_ENV_NAME" # Vérifier si l'activation a réussi if [ $? -ne 0 ]; then echo "ERREUR: Échec de l'activation de l'environnement $CONDA_ENV_NAME" exit 1 fi echo "Environnement activé. Python utilisé :" which python python --version # --- Lancer le calcul --- echo "Lancement du script Python: $PYTHON_SCRIPT" python "$PYTHON_SCRIPT" --input "$INPUT_FILE" # --- Désactivation (bonne pratique à la fin du script) --- conda deactivate echo "Job terminé."
L’étape d’initialisation (source …/conda.sh ou module load …) est absolument essentielle pour que la commande conda activate soit reconnue dans l’environnement d’exécution du job SLURM. Le chemin exact dépend de l’installation de Miniforge.
|
conda run (Souvent Plus Simple)conda run permet d’exécuter une commande directement dans un environnement spécifié, sans avoir besoin de l’activer/désactiver explicitement dans le script. Cela peut être plus robuste dans les scripts.
conda run#!/bin/bash #SBATCH --job-name=CondaSlurmRun #SBATCH --output=conda_run_%j.out #SBATCH --error=conda_run_%j.err #SBATCH --time=00:15:00 #SBATCH --nodes=1 #SBATCH --ntasks=1 #SBATCH --cpus-per-task=1 #SBATCH --mem=2G # --- Configuration --- CONDA_ENV_NAME="stats_env_20270423" # L'environnement Conda à utiliser PYTHON_SCRIPT="$SLURM_SUBMIT_DIR/mon_script_stats.py" # Le script Python à lancer INPUT_FILE="$SLURM_SUBMIT_DIR/input_data.csv" # --- Initialiser Conda pour ce script --- # l'activation de miniforge peut varier si vous l'avez installé par vous même module load miniforge # adaptez la version echo "--- Lancement du Job SLURM avec Conda Run ---" echo "Date: $(date)" echo "Noeud: $(hostname)" echo "Job ID: $SLURM_JOB_ID" echo "Lancement de $PYTHON_SCRIPT dans l'environnement $CONDA_ENV_NAME via 'conda run'" echo "---------------------------------------------" # Lancer la commande python directement dans l'environnement spécifié conda run -n "$CONDA_ENV_NAME" \ python "$PYTHON_SCRIPT" --input "$INPUT_FILE" STATUS=$? # Récupérer le code de retour de la commande lancée par conda run echo "---------------------------------------------" if [ $STATUS -ne 0 ]; then echo "ERREUR: La commande via conda run "$CONDA_ENV_NAME" python "$PYTHON_SCRIPT" --input "$INPUT_FILE" a échoué avec le code $STATUS" exit $STATUS else echo "Exécution terminée avec succès." fi echo "--- Fin du Job SLURM ---"
conda run est souvent plus simple car il évite les complexités liées à l’activation/désactivation correcte de l’environnement dans des scripts non interactifs.
|
Conda, et en particulier la distribution Miniforge avec le canal conda-forge, est un outil populaire pour gérer les logiciels scientifiques sur un cluster HPC.
Récapitulatif :
Conda gère les paquets et les environnements isolés.
Miniforge + conda-forge est l’approche recommandée (communauté, pas de restrictions defaults).
Commandes clés : conda create, conda activate, conda install, conda list, conda env export, conda env create -f.
Utilisation dans SLURM : Activez l’environnement (via source + conda activate) ou utilisez conda run -n <env> ….
Avantages :
Résout les conflits de dépendances.
Facilite l’installation de paquets complexes.
Permet le minimum pour reproductibilité (via environment.yml).
Permet à chaque utilisateur de gérer ses propres outils sans interférer avec les autres.
Bonnes Pratiques :
Utilisez Miniforge (chargez un module Conda/Miniforge fourni par le cluster IO).
Configurez vos canaux pour prioriser conda-forge et exclure defaults.
Créez un environnement par projet ou par type d’analyse. Évitez d’installer dans (base).
Utilisez des fichiers environment.yml pour documenter et partager vos environnements. Versionnez-les avec Git ou nommez les avec la date !
Assurez-vous que Conda est correctement initialisé dans vos scripts SLURM (via source ou module load) avant d’utiliser conda activate ou conda run.
Gardez vos environnements à jour (conda update --all) mais prudemment (testez après mise à jour) et surtout pas à n’importe quel moment de votre projet.
| Commande | Description |
|---|---|
|
Affiche la version de Conda. |
|
Affiche des informations sur l’installation Conda. |
|
Affiche la liste et l’ordre des canaux configurés. |
|
Définit la priorité stricte des canaux. |
|
Crée un nouvel environnement nommé |
|
Active un environnement. |
|
Désactive l’environnement courant. |
|
Liste tous les environnements disponibles. |
|
Supprime un environnement. Attention ! |
|
Installe des paquets dans l’environnement actif. |
|
Liste les paquets installés dans l’environnement actif. |
|
Met à jour un paquet spécifique dans l’environnement actif. |
|
Met à jour tous les paquets dans l’environnement actif. |
|
Recherche des paquets disponibles dans les canaux configurés. |
|
Supprime un paquet de l’environnement actif. |
|
Exporte la description de l’environnement actif dans un fichier YAML. |
|
Exporte seulement les paquets explicitement installés (souvent sans version exacte). |
|
Crée un nouvel environnement à partir d’un fichier YAML. |
|
Met à jour l’environnement actif à partir d’un fichier YAML ( |
|
Exécute une commande directement dans l’environnement spécifié sans l’activer globalement. |