Skip to content

Conda

Objectif

Utiliser conda sur le cluster à l'aide de l'installation déjà existante. Si vous utilisez votre propre installation de conda, le support ne vous aidera pas, mais vous trouverez néanmoins de l'information utile ici.

Liens utiles

Description

Le logiciel conda est un gestionnaire de paquets. Il est développé par Anaconda, Inc. qui fournit une distribution nommée Anaconda, mais il en existe d'autres comme miniconda ou miniforge.

Ce tutoriel ne concerne que la version de conda installée par genotoul-bioinfo. Néanmoins, si vous utilisez une version de conda que vous avez installé, ce tutoriel peut tout de même contenir des informations utiles.

Warning

Si vous avez installé votre propre version de conda et vous voulez utiliser la version du cluster, elles peuvent interférer l'une sur l'autre. Controllez bien vos variables d'environnements (commande env, fichier ~/.bashrc, ...) et le fichier de configuration conda ~/.condarc.

Support

Nous ne faisons de support que pour la version installée par genotoul-bioinfo, sans interférence avec une version de conda que vous auriez installée vous même.

Configurer conda

Par défaut, conda stocke les paquets et les environnements dans votre $HOME. Si vous le laissez en l'état, vous allez rapidement dépasser votre quota et bloquer votre accès au cluster. Nous allons donc faire en sorte que ces fichiers soient stockés sur le work.

Déplacer conda sur le work

On vérifie s'il existe pas déjà un dossier ~/.conda.

ls -als ~/.conda

Si le dossier existe, on le déplace sur work:

mv ~/.conda ~/work/

Sinon, on le crée

mkdir ~/work/.conda

Ensuite on crée un lien symbolique pour maintenir la compatibilité.

ln -s ~/work/.conda ~/

Solutions alternatives (pour expert)

Nous n'apporterons aucun support à ces solutions. Vous devez savoir ce que vous faites.

Si vous êtes un·e utilisateur/trice avancé·e vous pouvez configurer ces chemins en modifiant vos fichiers de configuration utilisateur ou à l'aide des variables d'environnement.

Désactiver l'environnement base

Par défaut, conda active un environnement nommé base par défaut. Il peut interférer avec les logiciels du système (par exemple, surcharger - c.-à-d. changer - le python par défaut). Nous recommandons de le désactiver par défaut. Cela n'empêchera pas l'utilisation des commandes conda pour gérer les environnements, ni d'accéder à l'environnement base sur demande.

Il suffit d'exécuter les commandes suivantes pour cela.

module load devel/Miniconda/Miniconda3-init
conda config --set auto_activate_base true
conda deactivate

Utiliser conda sur le cluster

Le programme conda est installé dans un module. Nous cherchons donc les modules permettant son utilisation.

$ module search conda
------------------ /tools/modulefiles ------------------
devel/Miniconda/Miniconda3: loads the devel/Miniconda/Miniconda3 environment
devel/Miniconda/Miniconda3-init: loads the devel/Miniconda/Miniconda3-init environment

Nous chargeons le module Miniconda3-init qui permet de sauter l'étape d'initialisation de conda contrairement au module Miniconda3

$ module load devel/Miniconda/Miniconda3-init

Toute commande conda nécessite d'avoir chargé ce module à priori.

Ajouter les canaux pour la bioinfo

Afin d'installer les paquets dédiés à la bioinfo, nous allons utiliser le canal bioconda qui se configure comme suit:

conda config --add channels defaults
conda config --add channels bioconda
conda config --add channels conda-forge
conda config --set channel_priority strict

Le dernier canal ajouté est prioritaire

Ces commandes modifient le fichier de configuration ~/.condarc.

$ cat ~/.condarc
auto_activate_base: false
channels:
  - conda-forge
  - bioconda
  - defaults
channel_priority: strict

Rechercher un paquet

Le plus simple est d'aller sur https://anaconda.org pour faire une recherche.

Il est aussi possible d'utiliser la commande suivante:

conda search pkg_name

Gérer les environnements

N'hésitez pas à consulter la documentation de conda.

Lister les environnements conda

conda env list

ou pour les plus anciens:

conda info --envs

Créer un environnement

Il existe plusieurs manières de créer un environnement.

Environnement de zéro

Si vous souhaiterez créer un environnement de zéro.

conda create -n <env_name> <pkg1> <pkg2>

ou

conda create -p env_path <pkg1> <pkg2>

Ces commandes diffèrent de la façon suivante:

  • -n va écrire dans le dossier envs par défault de l'installation de conda, c'est à dire /home/<user>/.conda/envs sur le cluster (/home/<user>/miniconda3/envs si vous installez miniconda sur votre poste personnel avec la configuration par défaut)
  • -p va créer l'environnement au chemin donné:
  • utile pour installer et mutualiser un env dans un espace projet.

Fichier d'environnement

Si vous avez un fichier d'environnement <env_file.yml>. Vous devez utiliser la commande conda env create

conda env create -f <env_file.yml> 

Par défaut, l'environement est stocké ~/.conda/envs et porte le nom défini dans le fichier <env_file.yml>. Il est possible de changer le nom ou le chemin d'installation en ajoutant respectivement les options -n ou -p.

ressources: - https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html

Activer un environnement

conda activate <env>

Replacez <env> par le nom de l'environnement s'il a été installé avec l'option -n ou par son chemin (option -p)

Exporter un env

Export normal

Export pour un papier

Supprimer un env

conda env remove -n <env_name>
conda env remove -p <env_path>

Alternative

Pour les plus anciens

conda remove -n  <env_name> --all

Gestion des paquets

Installer des paquets

  • Dans l'environnement actif (après un conda activate ...)

    conda install <pkg1> <pkg2> ...
    

  • Dans un autre environnement

    conda install -n <env_name> <pkg1> <pkg2> ...
    

L'option -n peut être remplacée par l'option -p.

Spécifier les canaux

Success

Cette option est également utilisable avec la commande conda create

conda install -n <env_name> -c <channel1> -c <channel2> <pkg1> <pkg2> ...

Exemple: Installer deseq2 venant du canal bioconda et R (dépendance) venant du canal conda-forge.

conda install -c conda-forge -c bioconda bioconductor-deseq2

Warning

La priorité décroît de gauche à droit: conda-forge est prioritaire sur bioconda si un paquet existe dans les deux canaux.

Spécifier une version particulière de paquet

Success

Ces contraintes de versions sont également utilisables avec la commande conda create

Il est possible d'utiliser les notations =, ==, !=, <=, <, >= et > pour cibler des paquets. Par exemple:

  • pour installer une version 3.6.x de R

    conda install r-base=3.6
    

  • pour installer dernière version de python 2

    conda install "python<3"
    

  • pour installer une version de numpy comprise entre les versions 1.2 (inclue) et 1.2.3 (exclue)

    conda install "pkg1>=1.2,<1.2.3"
    

Warning

Faites bien attention à utiliser des " lorsque vous utilisez les caractères > et <.

Supprimer des paquets

Aide au dépanage

Diagnostic

conda info

Alternativement, on peut utiliser la commande conda config qui est bien plus verbeuse.

conda config --show

check ~/.bashrc and ~./condarc content

La résolution des paquets est lente

Dans conda, le solveur qui résoud les dépendances entre les paquets est très lent. La solution consiste à utiliser un solveur alternatif qui est plus rapide.

Utiliser mamba

Il est possible d'utiliser mamba, une alternative à conda qui résoud les dépendances plus vite. Il suffit de remplacer la commande conda par mamba:

mamba install ...

Utiliser ponctuellement le solveur de mamba avec conda

Il est aussi possible d'indiquer ponctuellement à conda d'utiliser le solver de mamba en utilisant l'option --solveur (recommandé)

conda install --solver libmamba ...

ou en éditant la variable d'environnement CONDA_SOLVER (non recommandé)

CONDA_SOLVER="libmamba" conda install ...

Utiliser définitivement le solveur de mamba avec conda

Il est possible de définir le solveur de mamba comme solveur par défaut de conda. Il suffit de faire une fois la commande suivante:

$ conda config --set solver libmamba

De vérifier qu'elle est bien appliquée,

  • Soit avec conda config

    $ conda config --show | grep solver
    ...
    solver: libmamba
    ...
    

  • Soit en regardant le fichier de config

    $ cat ~/.condarc
    ...
    solver: libmamba
    

Il est aussi possible de revenir à l'ancien solveur

$ conda config --set solver classic

Conda init

-You need to run conda init -> Vous avez chargé le module Miniconda3 au lieu du module Miniconda3-init

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/usr/local/bioinfo/src/Miniconda/Miniconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/usr/local/bioinfo/src/Miniconda/Miniconda3/etc/profile.d/conda.sh" ]; then
        . "/usr/local/bioinfo/src/Miniconda/Miniconda3/etc/profile.d/conda.sh"
    else
        export PATH="/usr/local/bioinfo/src/Miniconda/Miniconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<

Activate conda dans un script

Normalement, le module Miniconda3-init gère cela correctement, mais parfois le conda activate ne fonctionne pas dans les scripts

  • conda activate in scripts https://pythonspeed.com/articles/activate-conda-dockerfile/
Alors plusieurs choses:

1- Le quota du home est trop limité pour recevoir des installations conda. Il faut déplacer le répertoire /home/<login> /.conda dans le work et faire un lien symbolique:
voir notre FAQ https://bioinfo.genotoul.fr/index.php/faq/software_faq/ -> Default directory for some software and /home overquota.

2- Pour installer un environnement

module load system/Miniconda3
conda env create -v --file path/environment.yml -n env-name

3- Pour charger cet environnement avec "conda activate", conda demande de faire un conda init. Ce qui crée un chargement automatique d'un environnement dans le fichier /home/<login>/.bashrc et ce à chaque connexion!
C'est embetant parce que cela crée par la suite beaucoup de conflits.

La bonne pratique à ce sujet peut être de faire ça: https://kb.iu.edu/d/axgp#conda-init

Sinon effacez ou commentez le contenu du fichier /home/<login>/.bashrc et pour charger votre environnement, utilisez "source activate " au lieu de "conda activate"

module load system/Miniconda3
source activate <votre env>


Marie-Stéphane Trotard
INRAE- Unité MIAT
24 Chemin de Borde Rouge - Auzeville
CS 52 627
31326 Castanet Tolosan cede
(absente le vendredi)