Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...


Conda je alat otvorenog koda koji služi za upravljanje paketima kao i sustav za stvaranje i upravljanje virtualnim okruženjima.  Omogućuje jednostavno kreiranje i održavanje virtualnih okruženja Conda je stvorena za Python programe, ali i druge programske jezike te ne zahtijeva root ovlasti.

Na klasteru Isabella conda je dostupna u sklopu Miniconda paketa.

...

Code Block
$ module load conda

Conda virtualna okruženja

Kreiranje

Za kreiranje novog virtualnog okruženja koristi se naredba conda create. U sljedećem primjeru kreira se novo conda virtualno okruženje naziva py37 unutar kojeg se odmah instalira i Python verzija 3.7.

Ispis sadrži podatke o paketima koji će biti instalirani te upute o pokretanju kreiranog virtualnog okruženja.

Code Block
[tsmolcic@teran ~]$ module load conda
[tsmolcic@teran ~]$ conda create --name py37 python=3.7
Solving environment: done
...
## Package Plan ##

  environment location: /home/tsmolcic/.conda/envs/py37

  added / updated specs:
    - python=3.7


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    openssl-1.1.1c             |       h7b6447c_1         3.8 MB
							  ...
    wheel-0.33.4               |           py37_0          39 KB
    ------------------------------------------------------------
                                           Total:        43.1 MB

The following NEW packages will be INSTALLED:

    ca-certificates: 2019.5.15-0
...
Proceed ([y]/n)? y

Downloading and Extracting Packages
openssl-1.1.1c       | 3.8 MB    | ########################################################################################################### | 100%
...
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use:
# > source activate py37
#
# To deactivate an active environment, use:
# > source deactivate
#

Aktiviranje i korištenje

Sljedeća naredba pokreće prethodno kreirani virtual environment:

Code Block
[tsmolcic@teran ~]$ source activate py37

Naziv trenutno aktivnog virtualnog okruženja nalazi se u zagradama na početku svakog retka, a sljedeće naredbe potvrđuju da se radi o verziji Pythona unutar conda virtualnog okruženja:

Code Block
(py37) [tsmolcic@teran ~]$ which python
~/.conda/envs/py37/bin/python
(py37) [tsmolcic@teran ~]$ python --version
Python 3.7.3

Za pregled instaliranih paketa koristi se naredba:

Code Block
(py37) [tsmolcic@teran ~]$ conda list
# packages in environment at /home/tsmolcic/.conda/envs/py37:
#
# Name                    Version                   Build  Channel
ca-certificates           2019.5.15                     0
certifi                   2019.6.16                py37_0
libedit                   3.1.20181209         hc058e9b_0
...

a za instalaciju novih paketa:

Code Block
(py37) [tsmolcic@teran ~]$ conda install numpy
Solving environment: done

## Package Plan ##
  environment location: /home/tsmolcic/.conda/envs/py37
  added / updated specs:
    - numpy

The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    mkl_random-1.0.2           |   py37hd81dba3_0         405 KB
    numpy-base-1.16.4          |   py37hde5b4d6_0         4.4 MB
    numpy-1.16.4               |   py37h7e9f1db_0          49 KB

    ------------------------------------------------------------
                                           Total:       209.1 MB

The following NEW packages will be INSTALLED:

    blas:           1.0-mkl
...

Proceed ([y]/n)? y
Downloading and Extracting Packages
mkl_random-1.0.2     | 405 KB    | ########################################################################################################### | 100%
...
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
Info

Nisu svi Python paketi dostupni kao Conda paket. Međutim, unutar conda virtualnog okruženja, za instaliranje Python paketa može se koristiti i pip.

Deaktiviranje

Deaktiviranje trenutno aktivnog okruženja obavlja se naredbom:

Code Block
languagebash
(py37) [tsmolcic@teran ~]$ source deactivate
[tsmolcic@teran ~]$ module unload conda
[tsmolcic@teran ~]$ python --version
Python 2.7.5
[tsmolcic@teran ~]$ which python
/usr/bin/python

Ispis dostupnih virtualnih okruženja

Popis dostupnih virtualnih okruženja može se dobiti naredbom:

Code Block
[tsmolcic@teran ~]$ conda env list
# conda environments:
#
base                     /apps/qiime2/miniconda3
qiime2-2019.1            /apps/qiime2/miniconda3/envs/qiime2-2019.1
qiime2-2019.4            /apps/qiime2/miniconda3/envs/qiime2-2019.4
py37                     /home/tsmolcic/.conda/envs/py37
test-env                 /home/tsmolcic/.conda/envs/test-env

Okruženja koja se nalaze su /apps/ direktoriju su instalirana od strane administratora klastera te su dostupna korisnicima, međutim korisnici nemaju mogućnost izmjena tih okruženja. Vlastita virtualna okruženja spremaju se u direktorij /home/$USER/.conda/envs/ te su vidljiva samo korisniku koji ih je kreirao.

Brisanje virtualnog okruženja

Brisanje postojećeg virtualnog okruženja obavlja se naredbom:

Code Block
[tsmolcic@teran ~]$ conda env remove --name py37

Primjer pokretanja posla

...

može pakirati i distribuirati software za bilo koji jezik (C libraries, R paketi, Java paketi...).  

Conda u funkciji package manager-a pomaže korisniku u traženju i instaliranju različitih paketa. Ukoliko postoji paket/program koji zahtjeva drugačiju verziju Python-a od trenutno instalirane verzije na operativnom sistemu, Conda omogućava kreiranje odvojenog okruženja sa drugačijom verzijom Python-a

Conda virtualno okruženje

Iako Python omogućava stvaranje i upravljanje virtualnim okruženjima, Conda virtualno okruženje ima neke prednosti. Glavni i preporučeni alat za upravljanje paketima u Python virtualnom okruženju je pip. Uporaba pip sustava je ograničena samo na Python pakete. Stvaranje virtualnog okruženja u Conda sustavu omogućava instalaciju svih paketa pa tako i korištenje pip alata kao alternativa Conda package manager-u.

Stvaranje virtualnog okruženja

Prije kreiranja virtualnog okruženja, potrebno je učitati conda-miniforge3 naredbom:

$ source /apps/miniforge3/bin/activate


Virtualno okuženje stvara se naredbom conda create. Prilikom pozivanja naredbe potrebno je dodijeliti ime novog virtualnog okruženja zastavicom "-n" i verziju Python-a koja će se instalirati "python=x.y".

$ conda create -n <env_ime> python=<npr. verzija 3.9>

Ukoliko korisnik želi prilikom stvaranja novog virtualnog okruženja instalirati i određene pakete, moguće ih je navesti prilikom izvođenja naredbe create. Instalacija paketa moguća je i nakon stvaranja virtualnog okruženja.

$ conda create -n <env_ime> python=3.8 <paket_1> <paket_2> <paket_3> ...

Pregled kreiranih virtualnih okruženja moguće je vidjeti naredbom:

$ conda env list


Aktivacija virtualnog okruženja izvodi se naredbama:

$ conda activate <env_ime>

Command prompt pokazati će naziv aktivnog virtualnog okruženja:

(<env_ime>) [<user>@teran ~]$


Deaktivacija virtualnog okruženja:

$ conda deactivate

Uklanjanje okruženja:

$ conda env remove -n <env_ime>

Conda kanali

Conda paketi dohvaćaju se sa različitih kanala - URL-a/adresa direktorija. Učitavanjem miniforge3 okoline, učitan je i kanal za pretraživanje paketa conda-forgeConda-forge/miniforge je kreacija GitHub zajednice. Svi paketi instalirani preko conda forge kanala su Open Source tipa. Korisnik je u mogućnosti dodati još kanala za pretraživanje paketa kao npr. bioconda - kanal specijaliziran za Open Source software iz područje bioinformatike.

Glavni/default kanal Anaconda Inc.-a ne nalazi se na početnom popisu zbog aktualnih uvjeta korištenja tj. zbog mogućnosti kršenja istih.


Naredbe za pregled, dodavanje i brisanje kanala:
Popis učitanih kanala

$ conda config --show channels


Popis učitanih kanala sa prioritetima pretrage

$ conda config --get channels


Dodavanje kanala - sa najvećim prioritetom

$ conda config --add channels <ime_kanala>


Dodavanje kanala sa najnižim prioritetom ili promjena prioriteta postojećeg kanala na najniži

$ conda config --append channels <ime_kanala>


Uklanjanje kanala

$ conda config --remove channels <ime_kanala>

Upravljanje paketima

Preporučeni način instalacije paketa/aplikacija u virtualnom okruženju je korištenjem conda upraviteljem tj. conda install naredbom.

$ conda install <paket_ime_1> <paket_ime_2>

Moguće je navesti više od jednog paketa koje će Conda instalirati, a naredbu je moguće detaljno modificirati nekom od dostupnih zastavica.

Ime virtualnog okruženja u kojem će se instalirati paket definira se zastavicom -n ili --name. Ako nije navedeno ime okruženja, paket će se instalirati u trenutno aktivnom virtualnom okruženju.

$ conda install <paket_ime_1> <paket_ime_2> -n <env_ime>

Conda install naredbom pokušati će se instalirati posljednja verzija navedenog paketa, a da bi se paket uspješno instalirao, moguće je da će se instalirati i dodatni paketi ili ažurirati već instalirani paketi. Ako se ažuriranje ostalih paketa želi spriječiti, potrebno je dodati zastavicu :

--freeze-installed


Ako se želi instalirati određena ili starija verzija aplikacije/paketa potrebno je navesti verziju:

$ conda install <paket_ime>=<verzija> --> npr. matplotlib=1.4.3


Dostupne verzije i pakete moguće je pretraživati sa conda search naredbom. Search naredbom pretražiti će se učitani kanali i izlistati dostupne verzije paketa. 

$ conda search <paket_ime>


Dodatne naredbe za pregled, instalaciju, uklanjanje i ažuriranje paketa:
Naredba pokazuje sve instalirane pakete i njihove detalje u aktivnom virtualnom okruženju

$ conda list


Pretraga određenog paketa

$ conda list | grep -i <ime_paketa>


Brisanje/deinstalacija paketa.

$ conda uninstall <ime_paketa>



Ukoliko nije moguće instalirati paket/aplikaciju sa "conda install" naredbom moguće je služiti se "pip install" naredbom.

$ pip install <paket_ime> 


Conda update naredba ažurira pakete na zadnju kompatibilni verziju.
Ažuriranje navedenog paketa.

$ conda update <paket_ime>


Ažuriranje cijelog aktivnog virtualnog okruženja (bez ažuriranja Python-a!).

$ conda update --all


Ažuriranje Python-a

$ conda update python


Paralelno računanje

Paralelno računanje unutar virtualne okoline moguće je ukoliko je instaliran mpi4py paket. U vrijeme pisanja ovog teksta, mpi4py paket za python verziju 3.10 nije dostupan na conda-forge kanalu, ali ga je moguće instalirati pomoću pip paket upravitelja.

Instalacija mpi4py paketa unutar virtualnog okruženja



Conda Install

$ conda install mpi4py


U slučaju instalacije pip upraviteljem preporučeno je da se učita/definira neki od postojećih MPI modula dostupnih na cluster-u (npr. mpi/openmpi41-x86_64).
Pip install

$ module load mpi/openmpi41-x86_64
$ export MPICC=$(which mpicc)
$ pip install mpi4py


Primjer paralelnog računanja

Primjer se sastoji od dvije skripte. Skriptom testrun.sge definirati će se virtualna okolina, potrebni moduli (ukoliko su potrebni), broj jezgri za paralelizaciju kao i skripta koja će se paralelizirati (test.py). Sa naredbom mpirun pokrenuti će se isti broj instanci skripte test.py kao i broj zadanih jezgri za proračun (4). Za ispravno pokretanje ove skripte potrebna je instalacija numpy paketa i mpi4py u virtualnom okruženju.

Kada se program pokreće sa MPI-om, svi procesi su grupirani u komunikator (MPI.COMM_WORLD). Varijable komunikatora ne mjenjaju se nakon što je komunikator kreiran. Veličina komunikatora tj. zbroj svih procesa nosi naziv size. Svaki od procesa unutar komunikatora ima jedinstveni broj za identifikaciju - rank.

Kroz primjer paralelnog računanja stvoriti će se niz od 100 000 000 nasumičnih brojeva. Stvoreni niz podijeliti će se na 4 parcijalna niza koji će zatim biti podijeljeni svakom od stvorenih procesa. Svaki od procesa osrednjiti će parcijalni niz i vratiti vrijednost glavnom procesu za finalno osrednjavanje. Rezultat finalnog osrednjavanja trebao bi biti blizak broju 10.



Kreiranje okruženja i instalacija potrebnih paketa

$ source /apps/miniforge3/bin/activate
$ conda create -n test_env python=3.9
$ conda activate test_env
$ conda install mpi4py numpy
$ conda deactivate



testrun.sge

#! /bin/bash
#$ -cwd
#$ -N testmpijob
#$ -pe *mpi 4
 
source /apps/miniforge3/bin/activate
  
#module load mpi/openmpi41-x86_64
    #Ukoliko je mpi definiran prilikom instalacije mpi4py pip install-om potrebno ga je učitati i prilikom podnošenja posla
 
conda activate test_env
mpirun -np $NSLOTS python ./test.py
conda deactivate
#module purge



test.py

from mpi4py import MPI
import numpy as np
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
size = comm.Get_size()
 
# generira niz velikog proja podataka na RANK_0
numData = 100000000
data = None
if rank == 0:
    data = np.random.normal(loc=10, scale=5, size=numData)
 
# inicijalizira prazan niz za prihvatiti razdjeljene podatke
partial = np.empty(int(numData/size), dtype='d')
 
# šalje podatke ostalim "radnicima"
comm.Scatter(data, partial, root=0)
 
# inicijalizira prazan niz za prihvatiti osrednjene parcijalne nizove
reduced = None
if rank == 0:
    reduced = np.empty(size, dtype='d')
 
av_loc=np.average(partial)
# osrednjuje parcijalne nizove i zatim ih skuplja u RANK_0
comm.Gather(av_loc, reduced, root=0)
 
if rank == 0:
    print('Full Average:',np.average(reduced))



Podnošenje posla

$ qsub testrun.sge