Conda on ARC: Difference between revisions

From RCSWiki
Jump to navigation Jump to search
 
(36 intermediate revisions by 2 users not shown)
Line 2: Line 2:
'''Conda''' is a tool for managing and deploying applications, environments and packages.
'''Conda''' is a tool for managing and deploying applications, environments and packages.


Main point on using '''Conda''':
 
== Some points on using '''Conda''' ==


* '''Conda''' is a package manager and installer.  
* '''Conda''' is a package manager and installer.  
: It has to be installed once, and then it can be used for managing the software the user wants.
: It has to be installed once, and then it can be used for managing the software the user wants.


* Python is not a part of '''Conda'''.  
* Python is not a part of '''Conda'''.  


* '''Conda''' uses '''environments''' to separate software installations to prevent possible conflicts and incompatibilities.  
* '''Conda''' uses '''environments''' to separate software installations to prevent possible conflicts and incompatibilities.  


* Different software has to be installed into different environment.


* Before one can use a package installed into an environment, the environment has to be activated.  
* Different software packages are to be installed into different '''environments'''.
 
 
* Before one can use a package installed into an environment, the '''environment has to be activated'''.  
: Only the software installed into that environment will be available after the activation.
: Only the software installed into that environment will be available after the activation.


* If a different environment needs to be activated, please make sure that the current environment is deactivated.


* If multiple environments need a specific module or library, this module or library has to be installed multiple times.
* If a different environment needs to be '''activated''', please make sure that the current environment is '''deactivated'''.
: Each environment is independent and separate from other environments, thus a module installed in one environment will not be available in a different environment.
 


* If '''multiple environments''' need a specific module or library, this module or library has to be installed multiple times.
: Each environment is '''independent and separate''' from other environments, thus a module installed in one environment will not be available in a different environment.
* '''Environments''' can be organized '''based on activities''', rather than software.
: If you are sure that several software packages you want do not interfere with each other, you can have them installed in the '''same environment''', if this fits your usage pattern.
: For example, you may want to have both '''Python''' and '''R''' installed in the '''same environment''', if you typically use them both in the '''same activity'''.


== Brief help message ==
== Brief help message ==
Line 84: Line 95:
[[Managing_software_on_ARC#Installing_Software_in_User.27s_Home_Directory | in your personal home directory]].
[[Managing_software_on_ARC#Installing_Software_in_User.27s_Home_Directory | in your personal home directory]].
It may help you to plan your installations better.
It may help you to plan your installations better.
'''IMPORTANT!''' When you follow these steps, it is '''VERY IMPORTANT''' to '''DECLINE''' the offer by the installer
to '''modify your account''', so that conda is '''automatically activated'''.
Automatic activation leads to '''multiple potential problems''' later in your work.
'''DECLINE''' the offer by the '''conda installer'''.




Line 115: Line 132:
<syntaxhighlight lang=bash>
<syntaxhighlight lang=bash>
#! /bin/bash
#! /bin/bash
ROOT=$HOME/my_software
eval "$(~/software/miniconda3/bin/conda shell.bash hook)"
THISROOT=$ROOT/miniconda3
 
eval "$(${THISROOT}/bin/conda shell.bash hook)"
</syntaxhighlight>
</syntaxhighlight>


You can use your favourite text editor, <code>joe</code> or <code>nano</code> for example, to create it:
You can use your favourite text editor, <code>nano</code> for example, to create it:
$ joe ~/software/init-conda
or
  $ nano ~/software/init-conda
  $ nano ~/software/init-conda


Once you have the init script ready, you can activate your conda with the
Once you have the init script ready, you can activate your conda with the
$ source ~/software/init-conda
<pre>
$ source ~/software/init-conda
(base) $
</pre>
command.
command.


Line 133: Line 148:
ensuring that it is using '''python''' installed inside your home directory
ensuring that it is using '''python''' installed inside your home directory
<pre>
<pre>
$ which python  
(base) $ which python  
~/software/miniconda3/bin/python
~/software/miniconda3/bin/python
(base) $ python --version
Python 3.9.18
</pre>
</pre>
The version of python depends on when you downloaded the conda installation file.


To deactivate '''conda''', use the
To deactivate '''conda''', use the
Line 142: Line 161:


= Using Conda =
= Using Conda =
== Activating Base Conda ==
This is a more detailed rehearsal of the example shown in the installation procedure.
Once you installed your own <code>Miniconda3</code>, in the directory of your choice,
it has to be activated before you can use it.
It has to be in every session you want to use it on ARC's login node,
or in every job script your will be submitting to ARC, if the job needs to rely on your '''Conda environments'''.
Let us assume, that '''Conda''' is installed into the <code>~/software/miniconda3</code> sub-directory
(<code>~</code> indicates your '''home directory''').
Then to activate it you can use the following command on the command line:
<pre>
[username@arc ~]$ eval "$(~/software/miniconda3/bin/conda shell.bash hook)"
(base) [username@arc ~]$
</pre>
If you do not need it any more, you can deactivate your '''Conda''' with the following command:
<pre>
(base) [username@arc ~]$ conda deactivate
[username@arc ~]$
</pre>
To avoid typing this cryptic command every time you need your '''Conda''',
you can save it into a shell script file, <code>init-conda</code>,
and place it in some handy location in your home directory,
<code>~/software</code>, for example.
<code>~/software/init-conda</code>:
<syntaxhighlight lang=bash>
#! /bin/bash
eval "$(~/software/miniconda3/bin/conda shell.bash hook)"
</syntaxhighlight>
Once you have the init script, you can use it, instead, to get your Conda install active:
<pre>
[username@arc ~]$ source ~/software/init-conda
(base) [username@arc ~]$
</pre>
== Updating Conda ==
You can update your '''Conda''' by using the <code>update</code> '''conda command'''.
Below is shown an example session, which updates '''conda'' from
version '''23.3.1''' to version '''23.9.0'''.
You have to [[#Activating Base Conda | activate your '''base conda''']] first.
<pre>
(base) [username@arc ~]$ conda --version
conda 23.3.1
(base) [username@arc ~]$ conda update conda
Collecting package metadata (current_repodata.json): done
Solving environment: done
## Package Plan ##
  environment location: /home/username/software/miniconda3
  added / updated specs:
    - conda
The following packages will be downloaded:
    package                    |            build
    ---------------------------|-----------------
    brotli-python-1.0.9        |  py39h6a678d5_7        330 KB
    ca-certificates-2023.08.22 |      h06a4308_0        123 KB
    ....
    ....
    wheel-0.41.2              |  py39h06a4308_0        108 KB
    ------------------------------------------------------------
                                          Total:        38.5 MB
The following NEW packages will be INSTALLED:
  brotli-python      pkgs/main/linux-64::brotli-python-1.0.9-py39h6a678d5_7
The following packages will be REMOVED:
  brotlipy-0.7.0-py39h27cfd23_1003
  ....
  yaml-0.2.5-h7b6447c_0 
The following packages will be UPDATED:
  ca-certificates                    2023.01.10-h06a4308_0 --> 2023.08.22-h06a4308_0
  ....
  ....
  wheel                              0.38.4-py39h06a4308_0 --> 0.41.2-py39h06a4308_0
Proceed ([y]/n)? y
Downloading and Extracting Packages
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
(base) [drozmano@arc ~]$ conda --version
conda 23.9.0
</pre>


== Creating Conda environments ==
== Creating Conda environments ==
Line 187: Line 305:
$
$
</syntaxhighlight>
</syntaxhighlight>
== Managing environments ==
=== Get help ===
$ conda env --help
$ conda env list --help
$ conda env remove --help
=== '''List''' Conda environments ===
<pre>
$ conda env list
# conda environments:
#
base                  *  /home/username/my_software/miniconda3
pytorch                  /home/username/my_software/miniconda3/envs/pytorch
tensorflow              /home/username/my_software/miniconda3/envs/tensorflow
                        /home/username/opt/my_env
                        /home/username/opt/my_env2
</pre>
In the example, 5 environments are listed.
The first 3 are named environments: base, pytorch and tensorflow.
The last two can only be referenced by the path the installed in:
<code>~/opt/my_env</code>, and <code>~/opt/my_env2</code>.
=== '''Remove''' an environment ===
Remove a named environment:
$ conda env remove -n pytorch
or, using an environment path:
$ conda env remove -p ~/opt/my_env
=== Getting info about environments ===
List packages installed in the current environment:
<pre>
$ conda list
# packages in environment at /home/username/my_software/miniconda3/envs/tensorflow:
#
# Name                    Version                  Build  Channel
_libgcc_mutex            0.1                        main 
_openmp_mutex            4.5                      1_gnu 
_tflow_select            2.1.0                      gpu 
....
....
</pre>
List packages matching a pattern:
<pre>
$ conda list tensorflow
# packages in environment at /home/username/my_software/miniconda3/envs/tensorflow:
#
# Name                    Version                  Build  Channel
tensorflow                2.4.1          gpu_py39h8236f22_0 
tensorflow-base          2.4.1          gpu_py39h29c2da4_0 
tensorflow-estimator      2.6.0              pyh7b7c402_0 
tensorflow-gpu            2.4.1                h30adc30_0 
</pre>
= Links =
[[ARC Software pages]]
[[Category:ARC]]
[[Category:Software]]
{{Navbox ARC}}

Latest revision as of 23:06, 5 March 2024

Background

Conda is a tool for managing and deploying applications, environments and packages.


Some points on using Conda

  • Conda is a package manager and installer.
It has to be installed once, and then it can be used for managing the software the user wants.


  • Python is not a part of Conda.


  • Conda uses environments to separate software installations to prevent possible conflicts and incompatibilities.


  • Different software packages are to be installed into different environments.


  • Before one can use a package installed into an environment, the environment has to be activated.
Only the software installed into that environment will be available after the activation.


  • If a different environment needs to be activated, please make sure that the current environment is deactivated.


  • If multiple environments need a specific module or library, this module or library has to be installed multiple times.
Each environment is independent and separate from other environments, thus a module installed in one environment will not be available in a different environment.


  • Environments can be organized based on activities, rather than software.
If you are sure that several software packages you want do not interfere with each other, you can have them installed in the same environment, if this fits your usage pattern.
For example, you may want to have both Python and R installed in the same environment, if you typically use them both in the same activity.

Brief help message

$ conda --help
usage: conda [-h] [-V] command ...

conda is a tool for managing and deploying applications, environments and packages.

Options:

positional arguments:
  command
    clean        Remove unused packages and caches.
    config       Modify configuration values in .condarc. This is modeled
                 after the git config command. Writes to the user .condarc
                 file (/home/drozmano/.condarc) by default.
    create       Create a new conda environment from a list of specified
                 packages.
    help         Displays a list of available conda commands and their help
                 strings.
    info         Display information about current conda install.
    init         Initialize conda for shell interaction. [Experimental]
    install      Installs a list of packages into a specified conda
                 environment.
    list         List linked packages in a conda environment.
    package      Low-level conda package utility. (EXPERIMENTAL)
    remove       Remove a list of packages from a specified conda environment.
    uninstall    Alias for conda remove.
    run          Run an executable in a conda environment. [Experimental]
    search       Search for packages and display associated information. The
                 input is a MatchSpec, a query language for conda packages.
                 See examples below.
    update       Updates conda packages to the latest compatible version.
    upgrade      Alias for conda update.

optional arguments:
  -h, --help     Show this help message and exit.
  -V, --version  Show the conda version number and exit.

conda commands available from other packages:
  build
  convert
  debug
  develop
  env
  index
  inspect
  metapackage
  render
  server
  skeleton
  verify

Installing Conda

You can install a local copy of miniconda in your home directory on our clusters. It will give you flexibility to install packages needed for the workflow.

Before installing Conda, please review the article about installing software in your personal home directory. It may help you to plan your installations better.


IMPORTANT! When you follow these steps, it is VERY IMPORTANT to DECLINE the offer by the installer to modify your account, so that conda is automatically activated. Automatic activation leads to multiple potential problems later in your work. DECLINE the offer by the conda installer.


Here are the steps to follow:

Once connected to the login node, in your SSH session, make sure you are in your home directory:

$ cd 

Create a "software" subdirectory for all custom software you are going to have:

$ mkdir software
$ cd software 

Create a directory for installation sources (if you do not have it yet) and download the latest Miniconda distribution file:

$ mkdir src
$ cd src
$ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

Execute the installer, the .sh file, and install miniconda:

$ bash Miniconda3-latest-Linux-x86_64.sh

Follow the instructions (choosing ~/software/miniconda3 as the directory to create), agree to the license, decline the offer to initialize.

Every time you launch a new terminal session and want to use this Conda install you have to initialize it. To make it easier you can create a short script
init-conda it the ~/software directory:

#! /bin/bash
eval "$(~/software/miniconda3/bin/conda shell.bash hook)"

You can use your favourite text editor, nano for example, to create it:

$ nano ~/software/init-conda

Once you have the init script ready, you can activate your conda with the

$ source ~/software/init-conda
(base) $

command.

You can check that it works by ensuring that it is using python installed inside your home directory

(base) $ which python 
~/software/miniconda3/bin/python

(base) $ python --version
Python 3.9.18

The version of python depends on when you downloaded the conda installation file.

To deactivate conda, use the

$ conda deactivate

command.

Using Conda

Activating Base Conda

This is a more detailed rehearsal of the example shown in the installation procedure.

Once you installed your own Miniconda3, in the directory of your choice, it has to be activated before you can use it. It has to be in every session you want to use it on ARC's login node, or in every job script your will be submitting to ARC, if the job needs to rely on your Conda environments.


Let us assume, that Conda is installed into the ~/software/miniconda3 sub-directory (~ indicates your home directory).

Then to activate it you can use the following command on the command line:

[username@arc ~]$ eval "$(~/software/miniconda3/bin/conda shell.bash hook)"
(base) [username@arc ~]$ 

If you do not need it any more, you can deactivate your Conda with the following command:

(base) [username@arc ~]$ conda deactivate
[username@arc ~]$

To avoid typing this cryptic command every time you need your Conda, you can save it into a shell script file, init-conda, and place it in some handy location in your home directory, ~/software, for example. ~/software/init-conda:

#! /bin/bash
eval "$(~/software/miniconda3/bin/conda shell.bash hook)"

Once you have the init script, you can use it, instead, to get your Conda install active:

[username@arc ~]$ source ~/software/init-conda 
(base) [username@arc ~]$ 

Updating Conda

You can update your Conda by using the update conda command. Below is shown an example session, which updates 'conda from version 23.3.1 to version 23.9.0.

You have to activate your base conda first.

(base) [username@arc ~]$ conda --version
conda 23.3.1

(base) [username@arc ~]$ conda update conda

Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##
  environment location: /home/username/software/miniconda3

  added / updated specs: 
    - conda

The following packages will be downloaded:
    package                    |            build
    ---------------------------|-----------------
    brotli-python-1.0.9        |   py39h6a678d5_7         330 KB
    ca-certificates-2023.08.22 |       h06a4308_0         123 KB
    ....
    ....
    wheel-0.41.2               |   py39h06a4308_0         108 KB
    ------------------------------------------------------------
                                           Total:        38.5 MB

The following NEW packages will be INSTALLED:
  brotli-python      pkgs/main/linux-64::brotli-python-1.0.9-py39h6a678d5_7

The following packages will be REMOVED:

  brotlipy-0.7.0-py39h27cfd23_1003
  ....
  yaml-0.2.5-h7b6447c_0  

The following packages will be UPDATED:
  ca-certificates                     2023.01.10-h06a4308_0 --> 2023.08.22-h06a4308_0
  ....
  ....
  wheel                               0.38.4-py39h06a4308_0 --> 0.41.2-py39h06a4308_0

Proceed ([y]/n)? y

Downloading and Extracting Packages
Preparing transaction: done
Verifying transaction: done
Executing transaction: done

(base) [drozmano@arc ~]$ conda --version
conda 23.9.0

Creating Conda environments

Create a virtual environment for your project

$ conda create -n <yourenvname>

Install additional Python packages to the virtual environment

$ conda install -n <yourenvname> [package]

Activate the virtual environment

$ source activate <yourenvname>

At this point you should be able to use your own python with the modules you added to it.

Example

After you login to ARC:

# Activate Conda using your own activation script
$ source ~/software/init-conda

(base) $ conda info
     active environment : base
    active env location : /home/username/software/miniconda3
.....

# Create a new environment based on python and tensorflow module.
(base) $ conda create -n tensorflow python tensorflow-gpu
....

# Once installed, activate the new environment for testing and work.
(base) $ conda activate tensorflow

# Test the installed software.
(tensorflow) $ python tensorflow-test.py
.... 

# Deactivate the environment.
(tensorflow) $ conda deactivate 

# Deactivate Conda
(base) $ conda deactivate 

$

Managing environments

Get help

$ conda env --help
$ conda env list --help
$ conda env remove --help

List Conda environments

$ conda env list

# conda environments:
#
base                  *  /home/username/my_software/miniconda3
pytorch                  /home/username/my_software/miniconda3/envs/pytorch
tensorflow               /home/username/my_software/miniconda3/envs/tensorflow
                         /home/username/opt/my_env
                         /home/username/opt/my_env2

In the example, 5 environments are listed.

The first 3 are named environments: base, pytorch and tensorflow.

The last two can only be referenced by the path the installed in: ~/opt/my_env, and ~/opt/my_env2.


Remove an environment

Remove a named environment:

$ conda env remove -n pytorch

or, using an environment path:

$ conda env remove -p ~/opt/my_env

Getting info about environments

List packages installed in the current environment:

$ conda list

# packages in environment at /home/username/my_software/miniconda3/envs/tensorflow:
#
# Name                    Version                   Build  Channel
_libgcc_mutex             0.1                        main  
_openmp_mutex             4.5                       1_gnu  
_tflow_select             2.1.0                       gpu  
....
....

List packages matching a pattern:

$ conda list tensorflow

# packages in environment at /home/username/my_software/miniconda3/envs/tensorflow:
#
# Name                    Version                   Build  Channel
tensorflow                2.4.1           gpu_py39h8236f22_0  
tensorflow-base           2.4.1           gpu_py39h29c2da4_0  
tensorflow-estimator      2.6.0              pyh7b7c402_0  
tensorflow-gpu            2.4.1                h30adc30_0  

Links

ARC Software pages