Sommaire
Gestion de l'environnement python et R avec Conda
Python 2 et 3 ainsi que R sont installés par défaut sur le cluster summit2 avec un ensemble restreint de librairies associées. Pour offrir plus de flexibilité aux utilisateurs de ces outils, notamment pour l'installation de librairies ou paquetages manquants ou l'installation de versions spécifiques, nous avons mis en place l'outil de gestion conda. Cet outil de gestion de paquets python (ou R) fait partie de la suite logicielle Anaconda qui inclut tout un ensemble de paquets/librairies python et R (occupant près de 5Go sur disque).
Sur summit2, nous avons préféré installer Miniconda3 qui tout en étant une version très allégée de Anaconda (< 200Mo), offre les mêmes fonctionnalités.
Aux spécialistes d'Anaconda : nul besoin de l'installer sur summit2 !!!
Cela évitera d'encombrer inutilement l'espace disque.
Se référer aux explications ci-dessous pour CLONER un environnement existant.
1. Préparer votre environnement pour Conda
Pour accéder à la commande conda, rajouter dans votre fichier $HOME/.bashrc sur summit2 :
# Miniconda source /home/admin/miniconda3/etc/profile.d/conda.sh
Vérifier le bon fonctionnement de la commande, après déconnexion/reconnexion à summit2, avec :
conda info
qui doit retourner normalement plusieurs informations dont notamment la version courante de conda.
2. Commandes conda de base
Ci-dessous, quelques commandes utiles. Pour plus de détails, se référer à la documentation officielle de Conda.
Afficher l'aide :
conda -h
liste les différentes commandes
conda <cmd> -h
affiche la doc de <cmd>
Activer/désactiver un environnement :
conda activate myenv
activer l'environnement myenv
conda deactivate
désactiver l'environnement courant
Aux spécialistes d'Anaconda :
Préférer la commande 'conda activate...' à la commande 'source activate...' qui échoue sur summit2.
Noter qu'une fois qu'un environnement est activé, son nom apparaît toujours entre parenthèses en préfixe du shell prompt jusqu'à sa désactivation :
gazdi@summit2:~> conda activate pangeo-env_summit2 (pangeo-env_summit2) gazdi@summit2:~> (pangeo-env_summit2) gazdi@summit2:~> which python /home/admin/miniconda3/envs/pangeo-env_summit2/bin/python (pangeo-env_summit2) gazdi@summit2:~> conda deactivate gazdi@summit2:~> gazdi@summit2:~> which python /usr/bin/python
Commandes fréquentes :
conda create -n myenv
créer un nouvel environnement "myenv"
conda install...
installer des paquets dans un environnement
conda info -e
lister les environnements disponibles
conda env list
conda search...
rechercher des paquetages
conda search -h
affiche l'aide et des exemples de recherche
conda remove -n myenv ...
supprimer des paquets de l'environnement myenv
conda remove -n myenv --all
suprimer entièrement l'environnement myenv
3. Environnements Conda prédéfinis sur summit2
Au moment de l'écriture de cette page, les environnements prédéfinis sur summit2 sont les suivants :
conda info -e # conda environments: # base * /home/admin/miniconda3 pangeo-env_summit2 /home/admin/miniconda3/envs/pangeo-env_summit2 rstudio-env_summit2 /home/admin/miniconda3/envs/rstudio-env_summit2
Ils ont été définis par l'utilisateur admin qui est le seul à pouvoir les modifier (ajout/suppression de paquetage) mais n'importe quel utilisateur de summit2 peut s'en servir tel quel en les activant. Noter que l'environnement base a été mis en place lors de l'installation de Miniconda3. Il contient un ensemble restreint de paquets indispensable au bon fonctionnement de conda. Les environnements pangeo-env_summit2 et rstudio-env_summit2 ont été définis à titre d'exemple et peuvent être clonés par les utilisateurs qui désirent les modifier.
L'environnement pangeo-env_summit2 a été mis en place pour servir de bac à sable et permettre aux utilisateurs de s'initier à Pangeo. Pour plus de renseignements voir PangeoEnv.
4. Cloner un environnement Conda d'un PC -> summit2
Plusieurs méthodes existent pour cloner un environnement d'une machine à une autre mais, à notre connaissance, aucune ne permet de cloner un environnement Conda d'un système MacOSX vers un système Linux. La solution présentée ci-dessous permet uniquement de cloner un environnement existant sur un PC-Linux vers le cluster summit2 (toutes deux plateformes linux-64).
Voici les étapes pour cloner un environnement MYENV de votre PC-Linux sur summit2 :
sur votre PC_Linux, exporter l'environnement Conda dans un fichier .yml :
conda env export -n MYENV > myenv.yml
ou bienconda activate MYENV conda env export > myenv.yml conda deactivate
Noter que tout fichier myenv.yml existant est automatiquement écrasé par la commande d'exportation.
Copier le fichier .yml sur summit2 :
scp myenv.yml summit2:
sur summit2, créer l'environnement Conda à partir du fichier .yml :
conda env create -f myenv.yml
Il est possible de spécifier un autre nom d'environnement en éditant la première ligne du fichier .yml (champ name:) ou en le spécifiant avec l'option -n lors de la commande de création :
conda env create -n MYENV_NEW -f myenv.yml
Aux spécialistes d'Anaconda :
MERCI DE NE PAS CLONER L'ENVIRONNEMENT 'base' de votre installation ANACONDA !
Cet environnement contient TOUS les paquets Anaconda (5Go) : sérieusement les utilisez-vous TOUS ?
Contactez-nous (calcul@aero.obs-mip.fr) , nous vous aiderons à créer un environnement minimal adapté à vos besoins.
5. Cloner un environnement Conda : solutions alternatives
La section précédente détaille une des solutions pour créer sur summit2 un environnement Conda présent sur votre poste de travail. Pour connaître d'autres méthodes et, plus particulièrement, apprendre à cloner localement un environnement existant, se référer à la page CondaEnvClone.
6. Partager des environnements Conda sur summit2
Il est possible de partager des environnements Conda sans avoir à les cloner lorsqu'on se trouve sur une même machine. Par exemple sur summit2, afin de voir TOUS les environnements créés par Bob, Alice doit ajouter à son fichier de configuration $HOME/.condarc le répertoire où se trouvent les environnements de Bob avec la commande :
alice@summit2:~> conda config --append envs_dirs /home/bob/miniconda3/envs alice@summit2:~> conda config --append pkgs_dirs /home/bob/miniconda3/pkgs
La liste des environnements visible par Alice est donnée par :
alice@summit2:~> conda info -e # conda environments: # py3-env /home/alice/miniconda3/envs/py3-env keras-env /home/bob/miniconda3/envs/keras-env py27forge /home/bob/miniconda3/envs/py27forge py3-env /home/bob/miniconda3/envs/py3-env swift-env /home/bob/miniconda3/envs/swift-env base * /home/admin/miniconda3 pangeo-env_summit2 /home/admin/miniconda3/envs/pangeo-env_summit2 rstudio-env_summit2 /home/admin/miniconda3/envs/rstudio-env_summit2
Pour activer l'environnement py27forge de Bob, il suffira à Alice d'exécuter la commande :
alice@summit2:~> conda activate py27forge
Noter que :
par défaut sur summit2, certains environnements sont déjà partagés par l'utilisateur admin, responsable de l'installation de Conda.
- les environnements partagés ne sont modifiables que par leur propriétaire.
- pour modifier un environnement qui ne nous appartient pas, il faut le cloner (voir section précédente)
la ligne 'conda config --append pkgs_dirs...' n'est pas obligatoire mais permet d'accélérer l'opération de clonage
le partage peut s'avérer déroutant lorsque les utilisateurs ont des environnements de même nom. Il faut dans ce cas lors de l'activation, spécifier le chemin complet de l'environnement pour éviter toute équivoque, par exemple pour sélectionner l'environnement py3-env de Bob :
alice@summit2:~> conda activate /home/bob/miniconda3/envs/py3-env
7. Utiliser Conda dans un script SBATCH
Dans un script de soumission Slurm, s'assurer que les lignes suivantes sont présentes en début de script (après les options #SBATCH), si vous désirez activer un environnement Conda :
source /home/admin/miniconda3/etc/profile.d/conda.sh conda deactivate conda activate <YOUR_ENV>
Par exemple, dans un job de soumission de Jupyter Lab sur un nœud de calcul avec l'environnement pangeo-env_summit2 (voir PangeoEnv) :
#!/bin/bash
#
#SBATCH -N1 --exclusive
#SBATCH -e monojupyter-%j.out
#SBATCH -o monojupyter-%j.out
source /home/admin/miniconda3/etc/profile.d/conda.sh
conda deactivate
conda activate pangeo-env_summit2
jupyter lab --no-browser --ip=`hostname` --port=8888
