...
...
Conda je alat otvorenog koda koji služi za upravljanje paketima kao i sustav za stvaranje i upravljanje virtualnim okruženjima. Conda je stvorena za Python programe, ali može pakirati i distribuirati software za bilo koji jezik (C libraries, R paketi, Java paketi...).
...
Prije kreiranja virtualnog okruženja, potrebno je učitati conda-miniforge3 naredbom:
Code Block |
---|
$ 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".
Code Block |
---|
$ conda create -n <env_ime> python=<npr. verzija 3. |
...
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.
Code Block |
---|
|
$ conda create -n <env_ime> python=3.8 <paket_1> <paket_2> <paket_3> ... |
Pregled kreiranih virtualnih okruženja moguće je vidjeti naredbom:
Code Block |
---|
$ conda env list |
Aktivacija virtualnog okruženja izvodi se naredbama:
Code Block |
---|
$ conda activate <env_ime> |
Command prompt pokazati će naziv aktivnog virtualnog okruženja:
...
Deaktivacija virtualnog okruženja:
Code Block |
---|
$ conda deactivate |
Uklanjanje okruženja:
Code Block |
---|
$ 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-forge. Conda-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.
...
Naredbe za pregled, dodavanje i brisanje kanala:
Code Block |
---|
title | Popis učitanih kanala |
---|
|
$ conda config --show channels |
Code Block |
---|
title | Popis učitanih kanala sa prioritetima pretrage |
---|
|
$ conda config --get channels |
Code Block |
---|
title | Dodavanje kanala - sa najvećim prioritetom |
---|
|
$ conda config --add channels <ime_kanala> |
Code Block |
---|
title | Dodavanje kanala sa najnižim prioritetom ili promjena prioriteta postojećeg kanala na najniži |
---|
|
$ conda config --append channels <ime_kanala> |
Code Block |
---|
|
$ 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.
Code Block |
---|
$ 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.
Code Block |
---|
$ 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 :
...
Ako se želi instalirati određena ili starija verzija aplikacije/paketa potrebno je navesti verziju:
Code Block |
---|
$ 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.
Code Block |
---|
$ conda search <paket_ime> |
Dodatne naredbe za pregled, instalaciju, uklanjanje i ažuriranje paketa:
Code Block |
---|
title | Naredba pokazuje sve instalirane pakete i njihove detalje u aktivnom virtualnom okruženju |
---|
|
$ conda list |
Code Block |
---|
title | Pretraga određenog paketa |
---|
|
$ conda list | grep -i <ime_paketa> |
Code Block |
---|
title | Brisanje/deinstalacija paketa. |
---|
|
$ conda uninstall <ime_paketa> |
Code Block |
---|
title | 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.
Code Block |
---|
title | Ažuriranje navedenog paketa. |
---|
|
$ conda update <paket_ime> |
Code Block |
---|
title | Ažuriranje cijelog aktivnog virtualnog okruženja (bez ažuriranja Python-a!). |
---|
|
$ conda update --all |
Code Block |
---|
|
$ 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
Code Block |
---|
|
$ 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).
Code Block |
---|
|
$ module load mpi/openmpi41-x86_64 |
...
$ export MPICC=$(which mpicc) |
...
Primjer paralelnog računanja
...
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.
Code Block |
---|
title | 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 |
...
...
...
...
...
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 |
...
...
mpirun -np $NSLOTS python ./test.py |
...
...
Code Block |
---|
|
from mpi4py import MPI |
...
...
...
...
...
# generira niz velikog proja podataka na 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 = 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) |
...
...
print('Full Average:',np.average(reduced))
|
Code Block |
---|
|
$ qsub testrun.sge |