...
Panel | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
|
Na ovoj stranici možete naći upute i prijedloge o korištenju pythona, pipa i conde na Supeku:
Lustre i virtualna
...
okruženja
Anchor | ||||
---|---|---|---|---|
|
Lustre je paralelni raspodijeljeni datotečni sustav koji koristi Supek, namijenjen okruženju HPC u kojem
Prva dva poglavlja kratki su uvod u potrebu kontejnera pri korištenju python knjižnica na Supeku, dok su druga dva posvećena naputcima za brzi razvoj i referencama za one koji žele ući dublje u načine na koje se to može ostvariti.
...
Lustre je paralelni raspodijeljeni datotečni sustav koji koristi Supek, namijenjen okruženju HPC u kojem veliki broj korisnika generira i koristi iznimnu količinu podataka, i čija je visoka dostupnost i brzina prijenosa bitna radi što efikasnijeg izvođenja paralelnih aplikacija.
...
Code Block | ||
---|---|---|
| ||
# broj direktorija marko@pc-mkvakic 15:05 ~[korisnik@kompjuter:] $ find ~/.local/lib/python3.9/site-packages /usr/local/lib/python3.9/dist-packages -type d | wc -l 4338 # broj datoteka marko@pc-mkvakic 15:05 ~ [korisnik@kompjuter:] $ find ~/.local/lib/python3.9/site-packages /usr/local/lib/python3.9/dist-packages -type f | wc -l 47355 # veličine marko@pc-mkvakic 15:06 ~[korisnik@kompjuter:] $ du -hcs ~/.local/lib/python3.9/site-packages /usr/local/lib/python3.9/dist-packages 939M /home/marko/.local/lib/python3.9/site-packages 747M /usr/local/lib/python3.9/dist-packages 1.7G total |
Apptainer i
...
python
Anchor | ||||
---|---|---|---|---|
|
Warning | ||
---|---|---|
| ||
Upute ispod pretpostavljaju da kontejner gradite na osobnom računalu. U slučaju da niste u mogućnosti graditi kontejnere na svojem računalu, upute za izgradnju na Supeku možete naći na našem wikiju. |
Jedan od sve ustaljenijih načina dopremanja aplikacija na HPC klastere su apptainer i singularity; sučelja za stvaranje izoliranih razvojnih okolina zvanih kontejneri.
Kontejneri su datoteke koje u sebi sadrže aplikacije i njihove ovisnosti potrebne za izvršavanje na Unix operativnim sustavima. To čine putem direktne integracije sa samo njihovom jezgrom (koju dijele i koja je odgovorna za upravljanje hardverom), zbog čega su prilagodljivi bilo kojem računalu koje koristi isti operativni sustav.Datoteke kontejnera obično su u formi tzv. slike (engl. image) koja se stvara na osobnom računalu, gdje se instaliraju datoteke nužne za razvoj i korištenje aplikacija. Jednom kada se pripremi odgovarajući image, doprema se u formi slike (engl. image) koja se stvara na osobnom računalu i, jednom kada se pripremi, doprema na superračunalo i koristi kao bilo koja druga aplikacija.
Upravo zbog činjenice da image sadrži sve ovisnosti i strukturu direktorija unutar samo jedne datoteke je ovaj način najpoželjniji za rad na Lustreu.
Ispod se nalaze upute za razvoj osnovnog python data stacka koji se sastoji od knjižnica:
- NumPy - upravljanje matričnim podacima
- SciPy - osnovne znanstvene funkcije
- Pandas - upravljanje strukturiranim podacima
- matplotlib - vizualizacija podataka
Detaljnije Na Supeku je dostupna verzija v1.1.6 apptainer aplikacije. Ispod se nalaze osnove stvaranja i korištenja kontejnera, dok detaljnije upute možete naći na službenim stranicama i našem wikiju Isabelle.
Napomena: Upute pretpostavljaju da applikaciju apptainer imate već instaliranu na osobnom računalu sa sudo ovlastima.
Izgradnja kontejnera - build
Najbitnija komanda apptainera je komanda build
kojom se kontejneri mogu izgraditi u obliku:
- slike ili verzije image - oblik koji podržava samo čitanje, namijenjen finalnoj verziji kontejnera
- direktorija ili verzije sandbox - oblik koji podržava i pisanje, namijenjen razvoju kontejnera
Pri tom, kontejnere se može izgraditi na sljedeće načine:
- preuzeti s online repozitorija - za brzo pripremanje već testiranih recepata
- skrojiti ručno - za pripremanje specifičnih konfiguracija
Primjerice, ako želimo direktno izgraditi kontejner s operativnim sustavom ubuntu v20.04 (popularnim OS-om koji pruža veliki broj već prevedenih knjižnica kroz svoj upravitelj knjižnicama apt
) osnovnu radnu verziju možemo izgraditi na slijedeći način:
Izgradnja pipom
Prvi korak je stvaranje osnovnog kontejnera data_stack_sandbox
u interaktivnom modu ili verziji sandbox:
Code Block | ||
---|---|---|
Code Block | ||
| ||
# izgradnja kontejnerasandbox verzije [korisnik@kompjuter:~] $ apptainer build ubuntu_20.04.sif --sandbox data_stack_sandbox docker://ubuntu:20.04 ... INFO: Creating SIF file sandbox directory... INFO: Build complete: data_stack_sandbox # sadržaj trenutnog direktorija [korisnik@kompjuter:~] $ ls -lrtl total 27100154520 -rwxrdrwxr-xr-x 18 korisnik korisnik 4096 svi 23 16:33 data_stack_sandbox drwxr-xr-x 118 korisnik korisnik 27746304 4096 svi 23 0809:4751 ubuntu_20.04.sif |
Iako je ovaj image ograničene koristi (jer ubuntu sam po sebi obično ne sadrži aplikacije koje su nam potrebne), ovom komandom se mogu dohvatiti već pripremljeni recepti za koje postoje posvećeni repozitoriji, i koji mogu biti osnova za daljnju izgradnju kontejnera.
Neki od poznatijih repozitorija su:
- hub.docker.com - najpoznatija meka za kontejnere i obično prvi rezultat Google upita
- condaforge - kontejneri s već pripremljenim upraviteljima paketa conda
- Nvidia NGC - posvećeno ML i AI aplikacijama optimiziranim za grafičke procesore
- biocontainers.pro - posvećeno bioinformatici
Modifikacija kontejnera - shell --writable
Ako želimo u gore naveden kontejner instalirati dodatne knjižnice, možemo to učiniti na dva načina:
- interaktivnom izgradnjom korištenjem verzije sandbox
- izgradnjom slike korištenjem definicijske datoteke .def
U prvom slučaju, pri izgradnji kontejnera komandom build
moramo navesti opciju --sandbox
koja će generirati kontejner u obliku direktorija ubuntu_20.04
:
Code Block | ||
---|---|---|
| ||
# izgradnja sandbox verzije
[korisnik@kompjuter:~] $ apptainer build --sandbox ubuntu_20.04 docker://ubuntu:20.04
...
INFO: Creating sandbox directory...
INFO: Build complete: ubuntu_20.04
# sadržaj trenutnog direktorija
[korisnik@kompjuter:~] $ ls -l
total 27104
drwxr-xr-x 18 korisnik korisnik 4096 svi 23 09:05 ubuntu_20.04
-rwxr-xr-x 1 korisnik korisnik 27746304 svi 23 08:47 ubuntu_20.04.sif |
Novonastali sandbox kontejner možemo modificirati korištenjem opcije shell --writable
kojom otvaramo ljusku unutar kontejnera sa svim korisničkim knjižnicama koje doprema.
Ispod se nalazi primjer osvježavanja instalacijskih repozitorija apt
i instalacije upravitelja knjižnica pip (dostupnog za ovu verziju ubuntua):
Code Block | ||
---|---|---|
| ||
# otvaranje sjednice u kontejneru
marko@pc-mkvakic 09:12 ~/Desktop/conda-wiki $ sudo apptainer shell ubuntu_20.04
INFO: /etc/singularity/ exists; cleanup by system administrator is not complete (see https://apptainer.org/docs/admin/latest/singularity_migration.html)
WARNING: Skipping mount /etc/localtime [binds]: /etc/localtime doesn't exist in container
# osvježavanje repozitorija
Apptainer> apt update
Get:1 http://security.ubuntu.com/ubuntu focal-security InRelease [114 kB]
...
All packages are up to date.
# instalacija pip3
Apptainer> apt install python3-pip -y
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
binutils binutils-common binutils-x86-64-linux-gnu build-essential ca-certificates cpp cpp-9 dirmngr dpkg-dev fakeroot
...
# ispis verzije
Apptainer> pip3 --version
pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8) |
Istim principom možemo unutar kontejnera instalirati bilo koju aplikaciju u bilo kojem obliku: prevođenjem izvornog koda, instalacijom conde i kreiranjem virtualnih okruženja, itd.
-rw-r--r-- 1 korisnik korisnik 119 svi 23 15:17 ubuntu_20.04.def
-rwxr-xr-x 1 korisnik korisnik 158208000 svi 23 15:24 ubuntu_20.04.sif |
Nakon stvaranja interaktivne sandbox verzije, otvorimo ljusku unutar kontejnera korištenjem sudo ovlasti i instaliramo sve ovisnosti korištenjem pip installa:
Code Block | ||
---|---|---|
| ||
# interaktivna sjednica u kontejneru
[korisik@kompjuter] $ sudo apptainer shell --writable data_stack_sandbox/
INFO: /etc/singularity/ exists; cleanup by system administrator is not complete (see https://apptainer.org/docs/admin/latest/singularity_migration.html)
WARNING: Skipping mount /etc/localtime [binds]: /etc/localtime doesn't exist in container
Apptainer> apt update
...
Reading state information... Done
10 packages can be upgraded. Run 'apt list --upgradable' to see them.
# instalacija pip3
Apptainer> apt install python3-pip -y
...
Running hooks in /etc/ca-certificates/update.d...
done.
# instalacija python knjižnica
Apptainer> pip3 install numpy scipy pandas matplotlib ipython
...
Successfully installed asttokens-2.2.1 backcall-0.2.0 contourpy-1.0.7 cycler-0.11.0 decorator-5.1.1 executing-1.2.0 fonttools-4.39.4 ipython-8.13.2 jedi-0.18.2 kiwisolver-1.4.4 matplotlib-3.7.1 matplotlib-inline-0.1.6 numpy-1.24.3 packaging-23.1 pandas-2.0.1 parso-0.8.3 pexpect-4.8.0 pickleshare-0.7.5 pillow-9.5.0 prompt-toolkit-3.0.38 ptyprocess-0.7.0 pure-eval-0.2.2 pygments-2.15.1 pyparsing-3.0.9 python-dateutil-2.8.2 pytz-2023.3 scipy-1.10.1 six-1.16.0 stack-data-0.6.2 traitlets-5.9.0 tzdata-2023.3 wcwidtWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
h-0.2.6
# ispis verzija knjižnica
Apptainer> pip3 freeze
...
ipython==8.12.2
matplotlib==3.7.1
matplotlib-inline==3.7.1
numpy==1.24.3
pandas==2.0.1
scipy==1.10.1
...
|
Nakon instalacije knjižnica, prebacujemo sandbox direktorij data_stack_sandbox
u image verziju data_stack.sif
i dostavljamo ju na Supeka:
Anchor | ||||
---|---|---|---|---|
|
build
:Code Block | ||
---|---|---|
| ||
# prebacivanje sandbox verzije u image [korisnik@kompjuter:~] $ sudo apptainer build ubuntudata_20.04stack.sif ubuntu_20.04data_stack_sandbox/ ... INFO: CreatingBuild SIF file... INFO: Build complete: ubuntu_20.04.sif # sadržaj trenutnog direktorijacomplete: data_stack.sif # veličine verzija sandbox i image [korisnik@kompjuter:~] $ du -hcs data_stack* 832M data_stack_sandbox 272M data_stack.sif 1.1G total # dopremanje image verzije na Supek [korisnik@kompjuter:~] $ ls -l total 154496 drwxr-xr-x 18 korisnik korisnik 4096 svi 23 09:51 ubuntu_20.04 -rwxr-xr-x 1 korisnik korisnik 158195712 svi 23 09:58 ubuntu_20.04.sif |
Novija image verzija sada će (osim osnovnog operativnog sustava ubuntu v20.04) sadržavati i upravitelj knjižnicama pip v20.0.2
Ručna priprema kontejnera - .def
...
scp data_stack.sif mkvakic@login-gpu.hpc.srce.hr:.
data_stack.sif 100% 272MB 111.0MB/s 00:02m |
Nakon spajanja na superračunalo Supek, kontejner možemo koristiti pozivom naredbe apptainer exec
:
Code Block | ||
---|---|---|
| ||
# login na pristupni poslužitelj gpu
[korisnik@kompjuter:~] $ ssh korisnik@login-gpu.hpc.srce.hr
Last login: Wed May 24 08:16:00 2023 from x.x.x.x
# sadržaj korisničkog direktorija
[korisnik@kompjuter:~] $ ls -l
total 278088
-rwxr-xr-x 1 mkvakic hpc 284729344 May 24 08:02 data_stack.sif
# pokretanje dopremljenog imagea na Supeku
[korisnik@kompjuter:~] $ apptainer exec data_stack.sif python3 --version
Python 3.8.10 |
Izgradnja pipom + definicijska datoteka
Anchor | ||||
---|---|---|---|---|
|
Prethodni koraci lokalne izgradnje mogu se lokalno zapisati u .def datoteci, što omogućuje dosljedniju instalaciju u slučaju nadogradnje, ali i direktno pozivanje imagea putem poglavlja %runscript
Koraci koji se nalaze ispod su:
- ispisivanje definicijske datoteke (linija 1)
%post
poglavlje s koracima instalacije (linija 5)%runscript
poglavlje s zadanom izvršnom datotekom python3 (linija 10)
- kreiranje imagea (linija 13)
- dopremanje na Supeka (linija 18)
- direktno izvršavanje imagea (linija 24)
Code Block | ||||
---|---|---|---|---|
|
Ovaj način je najpoželjniji jer osigurava dosljednu izgradnju imagea koja se može postepeno i dosljedno poboljšavati, no na uštrb brzine razvoja jer svakom se modifikacijom image mora ponovo izgraditi.
.def datoteke u sebi sadrže:
- zaglavlje ili header - definicija osnovnog operativnog sustava
- poglavlja ili sections - dijelovi koji definiraju razne dijelove izgradnje i korisnički okoliš koji je dostupan u kontejneru
U primjeru iznad (ubuntu v20.04 + pip v20.0.2) definicijska datoteka bi sadržavala:
-
Bootstrap:/From:
linije u zaglavlju koje definiraju osnovni operativni sustav - poglavlje
%post
koje definira naredbe koje će se izvršiti nakon izgradnje osnovnog kontejnera
Nakon čega se kontejner instalira komandom build
:
Code Block | ||
---|---|---|
| ||
# ispis definicijske datoteke [korisnik@kompjuter:~] $ cat ubuntudata_20stack.04.def Bootstrap: docker From: ubuntu:20.04 %post apt update apt install python3-pip -y pip3 install numpy scipy pandas matplotlib ipython %runscript exec python3 $@ # izgradnja imagea iz definicijske datoteke [korisnik@kompjuter:~] $ apptainer build ubuntudata_20stack.04.sif ubuntudata_20stack.04.def ... INFO: Creating SIF file... INFO: Build complete: ubuntudata_20.04stack.sif # sadržajdopremanje trenutnogna direktorijaSupeka [korisnik@kompjuter:~] $ ls -l total 154504 drwxr-xr-x 18 korisnik korisnik 4096 svi 23 09:51 ubuntu_20.04 -rw-r--r-- 1 korisnik korisnik 87 svi 23 10:22 ubuntu_20.04.def -rwxr-xr-x 1 korisnik korisnik 158195712 svi 23 10:34 ubuntu_20.04.sif |
.
S obzirom da je instalacija u primjeru veoma jednostavna i oslanja se na izvorni upravitelj knjižnica apt, jedino potrebno poglavlje je %post
kojim se izvršavaju komande nakon izgradnje osnovnog kontejnera.
U slučaju instalacije korištenjem izvornog koda i posebnih putanja, u ponekim slučajevima potrebno je definirati okolišne varijable LD_LIBRARY_PATH
i PATH
u poglavlju %environment
ili dostaviti dodatne datoteke pri izgradnji korištenjem poglavlja %files
.
Dodatne detalje o ovim funkcionalnostima možete naći na službenim stranicama i našem wikiju Isabelle.
Korištenje kontejnera - exec/run
Jednom kada pripremimo kontejner s aplikacijama, postoji više komanda ili načina na koji se mogu koristiti:
exec
- izvršavanje aplikacija ili skripta unutar kontejnerarun
- izvršavanje kontejnera kao izvršne datoteke
Izvršne datoteke koje su dostupne kroz varijablu okoliša PATH
u kontejneru mogu se pozvati korištenjem komande exec
. Ispod se nalaze primjeri ispisivanja verzije pythona na korisničkom računalu naspram kontejnera:
scp data_stack.sif mkvakic@login-gpu.hpc.srce.hr:.
data_stack.sif 100% 335MB 110.9MB/s 00:03
# login na pristupni poslužitelj gpu
[korisnik@kompjuter:~] $ ssh mkvakic@login-gpu.hpc.srce.hr
Last login: Wed May 24 09:18:44 2023 from x.x.x.x
# direktno izvršavanje imagea na Supeku
[korisnik@x3000c0s27b0n0] $ ./data_stack.sif --version
Python 3.8.10 |
Izgradnja condom
U slučaju da želimo specifičnu verziju pythona i njegovih knjižnica, možemo koristiti miniforge verziju conde; upravitelj python paketima koji stvara virtualna okruženja.
Prvi korak je izgradnja sandbox verzije i instalacija mambe korištenjem službenih uputa:
Code Block | ||
---|---|---|
| ||
# izgradnja sandbox verzije | ||
Code Block | ||
| ||
# ispis verzije pythona na računalu [korisnik@kompjuter:~] $ python3 sudo apptainer build --force --version Python 3.9.2sandbox data_stack_sandbox docker://ubuntu:20.04 ... # ispisotvaranje verzijeinteraktivne pythonasjednice u sandbox kontejneru [korisnik@kompjuter:~] $ sudo apptainer exec ubuntu_20.04.sif python3 --version INFO: /etc/singularity/ exists; cleanup by system administrator is not complete (seeshell --writable data_stack_sandbox/ # osvježavanje apt repozitorija Apptainer> apt update ... # instalacija curl Apptainer> apt install curl -y ... # preuzimanje Miniforge conde Apptainer> curl -L -O https://apptainer.org/docs/admin/latest/singularity_migration.html) INFO: underlay of /etc/localtime required more than 50 (86) bind mounts Python 3.8.10 |
U slučaju da koristimo samo jednu aplikaciju, komanda run
je prikladnija jer se u tom slučaju kontejner može pozivati kao izvršna datoteka. Ova funkcionalnost omogućuje se poglavljem %runscript
u definicijskoj datoteci pri izgradnji imagea.
Ispod se nalazi primjer u kojem je izvršna naredba python3
zadana kao naredba za direktno izvršavanje (napomena: $@
je bash varijabla koja odgovara ulaznim argumentima):
Code Block | ||
---|---|---|
| ||
# ispis definicijske datoteke
[korisnik@kompjuter:~] $ cat ubuntu_20.04.def
Bootstrap: docker
From: ubuntu:20.04
%post
apt update
apt install python3-pip -y
%runscript
exec python3 $@
# izgradnja imagea iz definicijske datoteke
[korisnik@kompjuter:~] $ apptainer build ubuntu_20.04.sif ubuntu_20.04.def
...
INFO: Build complete: ubuntu_20.04.sif
[korisnik@kompjuter:~] $ ./ubuntu_20.04.sif --version
Python 3.8.10 |
...
Tipični workflow za izgradnju kontejnera namijenjenog određenoj aplikaciji je sljedeći:
- pronalaženje uputa za instalaciju tražene aplikacije
- istraživanje odgovarajućeg operativnog sustava
- kreiranje osnovnog kontejnera i njegova interaktivna nadogradnja
- prebacivanje kontejnera u image ili izvršni oblik
- dopremanje i izvršavanje na klasteru
Prva četiri koraka mogu se u potpunosti vršiti na korisničkom računalu, dok se posljednji vrši na Supeku gdje su dostupni značajniji resursi.
Ispod se nalaze upute za razvoj osnovnog data stacka koji se sastoji od knjižnica:
- NumPy - upravljanje matričnim podacima
- SciPy - osnovne znanstvene funkcije
- Pandas - upravljanje strukturiranim podacima
- matplotlib - vizualizacija podataka
Operativni sustav kao osnova kontejnera je Ubuntu Focal Fossa (v20.04 LTS)
Slika 3. Workflow za izradu i korištenje kontejnera. Slika je preuzeta sa
stranice Singularitya; preteča Apptaineru koja funkcionira
na identičan način.
Izgradnja pipom
Prvi korak je stvaranje osnovnog kontejnera data_stack_sandbox
u interaktivnom modu ili verziji sandbox:
Code Block | ||
---|---|---|
| ||
# izgradnja sandbox verzije
[korisnik@kompjuter:~] $ apptainer build --sandbox data_stack_sandbox docker://ubuntu:20.04
...
INFO: Creating sandbox directory...
INFO: Build complete: data_stack_sandbox
# sadržaj trenutnog direktorija
[korisnik@kompjuter:~] $ ls -l
total 154520
drwxr-xr-x 18 korisnik korisnik 4096 svi 23 16:33 data_stack_sandbox
drwxr-xr-x 18 korisnik korisnik 4096 svi 23 09:51 ubuntu_20.04
-rw-r--r-- 1 korisnik korisnik 119 svi 23 15:17 ubuntu_20.04.def
-rwxr-xr-x 1 korisnik korisnik 158208000 svi 23 15:24 ubuntu_20.04.sif |
Nakon stvaranja interaktivne sandbox verzije, otvorimo ljusku unutar kontejnera korištenjem sudo ovlasti i instaliramo sve ovisnosti korištenjem pip installa:
Code Block | ||
---|---|---|
| ||
# interaktivna sjednica u kontejneru
[korisik@kompjuter] $ sudo apptainer shell --writable data_stack_sandbox/
INFO: /etc/singularity/ exists; cleanup by system administrator is not complete (see https://apptainer.org/docs/admin/latest/singularity_migration.html)
WARNING: Skipping mount /etc/localtime [binds]: /etc/localtime doesn't exist in container
Apptainer> apt update
...
Reading state information... Done
10 packages can be upgraded. Run 'apt list --upgradable' to see them.
# instalacija pip3
Apptainer> apt install python3-pip -y
...
Running hooks in /etc/ca-certificates/update.d...
done.
# instalacija pythn knjižnica
Apptainer> pip3 install numpy scipy pandas matplotlib ipython
...
Successfully installed asttokens-2.2.1 backcall-0.2.0 contourpy-1.0.7 cycler-0.11.0 decorator-5.1.1 executing-1.2.0 fonttools-4.39.4 ipython-8.13.2 jedi-0.18.2 kiwisolver-1.4.4 matplotlib-3.7.1 matplotlib-inline-0.1.6 numpy-1.24.3 packaging-23.1 pandas-2.0.1 parso-0.8.3 pexpect-4.8.0 pickleshare-0.7.5 pillow-9.5.0 prompt-toolkit-3.0.38 ptyprocess-0.7.0 pure-eval-0.2.2 pygments-2.15.1 pyparsing-3.0.9 python-dateutil-2.8.2 pytz-2023.3 scipy-1.10.1 six-1.16.0 stack-data-0.6.2 traitlets-5.9.0 tzdata-2023.3 wcwidtWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
h-0.2.6
# ispis verzija knjižnica
Apptainer> pip3 freeze
...
ipython==8.12.2
matplotlib==3.7.1
matplotlib-inline==3.7.1
numpy==1.24.3
pandas==2.0.1
scipy==1.10.1
...
|
...
github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh
...
100 82.9M 100 82.9M 0 0 30.7M 0 0:00:02 0:00:02 --:--:-- 42.0M
# batch instalacija u /usr/local/miniforge
Apptainer> bash Miniforge3-Linux-x86_64.sh -b -p /usr/local/miniforge
...
installation finished.
|
Ispod se nalaze detalji za dopremanje python verzije v3.10 i prethodno navedenih python knjižnica.
Koraci koji su potrebni su opisani ispod, dok se detaljnije upute nalaze na službenim stranicama. Instalacija se sastoji od:
- inicijalizacije conde (linija 1)
- kreiranja virtualnog okruženja
data_stack
(linija 3) - aktivacije virtualnog okruženja
data_stack
(linija 14) - instalacije korištenjem upravitelja pip (linija 16)
Napomena: Komande ispod pretpostavljaju da ste i dalje u sandbox kontejneru.
Code Block | ||||
---|---|---|---|---|
| ||||
# aktivacija conde u kontejneru
Apptainer> source /usr/local/miniforge/bin/activate
# kreiranje virtualnog okruženja data_stack
(base) Apptainer> conda create -n data_stack python=3.10 -y
...
# aktivacija virtualnog okružaenja data_stack
(base) Apptainer> conda activate data_stack
# instalacija knjižnica pipom
(data_stack) Apptainer> pip3 install numpy scipy pandas matplotlib ipython
...
Downloading and Extracting Packages
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
# ispis instaliranih knjižnica
(data_stack) Apptainer> pip3 list
...
ipython 8.13.2
matplotlib 3.7.1
matplotlib-inline 0.1.6
numpy 1.24.3
pandas 2.0.1
scipy 1.10.1
... |
Korištenje instaliranog data_stack
virtualnog okruženja osigurava se izvršavanjem python izvršne datoteke u /usr/local/miniforge/envs/data_stack/bin/python3
:
Code Block | ||
---|---|---|
| ||
# ispis verzije i staze __init__.py datoteke knjižnice matplotlib u kontejneru
[korisnik@kompjuter:~] $ apptainer exec data_stack_sandbox/ /usr/local/miniforge/envs/data_stack/bin/python3 -c 'import matplotlib; print("matplotlib verzija je: ", matplotlib.__version__); print("matplotlib __init__ datoteka je:", matplotlib.__file__)'
...
matplotlib verzija je: 3.7.1
matplotlib __init__ datoteka je: /usr/local/miniforge/envs/data_stack/lib/python3.10/site-packages/matplotlib/__init__.py |
Ostali koraci pretvaranja u image i dopremanja na Supek ostaju isti, dok se cjelokupan proces kao i prije može zapisati u .def datoteci u kojoj je moguće definirati /usr/local/mambaforge/envs/data_stack/bin/python3
kao direktnu izvršnu naredbu.
Izgradnja condom + online repozitoriji
Cjelokupan proces izgradnje specifičnog python virtualnog okruženja može se preskočiti korištenjem već pripremljenih kontejnera koji u sebi već sadrže condu, poput condaforge/miniforge3
Ako se koriste kao baza za izgradnju gore navedenog virtualnog okruženja, definicijska datoteka .def izgledala bi na sljedeći način i mogla koristiti za izgradnju slike koja se može dopremiti na Supeka:
- zaglavlje s osnovnim condaforge kontejnerom (linije 1 i 2)
%post
poglavlje s instalacijskim naredbama (linije 4 do 9)%environment
poglavlje koje postavlja okoliš za virtualno okruženjedata_stack
(linije 11 do 22)%runscript
poglavlje koje definira izvršnu naredbu python3 (linije 24 do 26)
Code Block | ||||
---|---|---|---|---|
| ||||
Bootstrap: docker
From: condaforge/miniforge3
%post
conda create -n data_stack python=3.10 -y
. /opt/conda/bin/activate
conda activate data_stack
pip3 install numpy scipy pandas matplotlib ipython
%environment
. /opt/conda/bin/activate
conda activate data_stack
%runscript
exec python3 $@ |
...
Code Block | ||
---|---|---|
| ||
# prebacivanje sandbox verzije u image
[korisnik@kompjuter:~] $ sudo apptainer build data_stack.sif data_stack_sandbox/
...
INFO: Build complete: data_stack.sif
# veličine verzija sandbox i image
[korisnik@kompjuter:~] $ du -hcs data_stack*
832M data_stack_sandbox
272M data_stack.sif
1.1G total
# dopremanje image verzije na Supek
[korisnik@kompjuter:~] $ scp data_stack.sif mkvakic@login-gpu.hpc.srce.hr:.
data_stack.sif 100% 272MB 111.0MB/s 00:02m |
Nakon spajanja na superračunalo Supek, kontejner možemo koristiti pozivom naredbe apptainer exec
:
Code Block | ||
---|---|---|
| ||
# login na pristupni poslužitelj gpu
[korisnik@kompjuter:~] $ ssh korisnik@login-gpu.hpc.srce.hr
Last login: Wed May 24 08:16:00 2023 from x.x.x.x
# sadržaj korisničkog direktorija
[korisnik@kompjuter:~] $ ls -l
total 278088
-rwxr-xr-x 1 mkvakic hpc 284729344 May 24 08:02 data_stack.sif
# pokretanje dopremljenog imagea na Supeku
[korisnik@kompjuter:~] $ apptainer exec data_stack.sif python3 --version
Python 3.8.10 |
...
Prethodni koraci lokalne izgradnje mogu se lokalno zapisati u .def datoteci, što omogućuje dosljedniju instalaciju u slučaju nadogradnje, ali i direktno pozivanje imagea putem poglavlja %runscript
Koraci koji se nalaze ispod su:
- ispisivanje definicijske datoteke (linija 1)
%post
poglavlje s koracima instalacije (linija 5)%runscript
poglavlje s zadanom izvršnom datotekom python3 (linija 10)
- kreiranje imagea (linija 13)
- dopremanje na Supeka (linija 18)
- direktno izvršavanje imagea (linija 24)
Code Block | ||||
---|---|---|---|---|
| ||||
# ispis definicijske datoteke
[korisnik@kompjuter:~] $ cat data_stack.def
Bootstrap: docker
From: ubuntu:20.04
%post
apt update
apt install python3-pip -y
pip3 install numpy scipy pandas matplotlib ipython
%runscript
exec python3 $@
# izgradnja imagea
[korisnik@kompjuter:~] $ apptainer build data_stack.sif data_stack.def
...
INFO: Creating SIF file...
INFO: Build complete: data_stack.sif
# dopremanje na Supeka
[korisnik@kompjuter:~] $ scp data_stack.sif mkvakic@login-gpu.hpc.srce.hr:.
data_stack.sif 100% 335MB 110.9MB/s 00:03
# login na pristupni poslužitelj gpu
[korisnik@kompjuter:~] $ ssh mkvakic@login-gpu.hpc.srce.hr
Last login: Wed May 24 09:18:44 2023 from x.x.x.x
# direktno izvršavanje imagea na Supeku
[korisnik@x3000c0s27b0n0] $ ./data_stack.sif --version
Python 3.8.10 |
Izgradnja condom
U slučaju da želimo specifičnu verziju pythona i njegovih knjižnica, možemo koristiti miniforge verziju conde; upravitelj python paketima koji stvara virtualna okruženja.
Prvi korak je izgradnja sandbox verzije i instalacija mambe korištenjem službenih uputa:
Code Block | ||
---|---|---|
| ||
# izgradnja sandbox verzije
[korisnik@kompjuter:~] $ sudo apptainer build --force --sandbox data_stack_sandbox docker://ubuntu:20.04
...
# otvaranje interaktivne sjednice u sandbox kontejneru
[korisnik@kompjuter:~] $ sudo apptainer shell --writable data_stack_sandbox/
# osvježavanje apt repozitorija
Apptainer> apt update
...
# instalacija curl
Apptainer> apt install curl -y
...
# preuzimanje Miniforge conde
Apptainer> curl -L -O https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh
...
100 82.9M 100 82.9M 0 0 30.7M 0 0:00:02 0:00:02 --:--:-- 42.0M
# batch instalacija u /usr/local/miniforge
Apptainer> bash Miniforge3-Linux-x86_64.sh -b -p /usr/local/miniforge
...
installation finished.
|
Ispod se nalaze detalji za dopremanje python verzije v3.10 i prethodno navedenih python knjižnica.
Koraci koji su potrebni su opisani ispod, dok se detaljnije upute nalaze na službenim stranicama. Instalacija se sastoji od:
- inicijalizacije conde (linija 1)
- kreiranja virtualnog okruženja
data_stack
(linija 3) - aktivacije virtualnog okruženja
data_stack
(linija 14) - instalacije korištenjem upravitelja pip (linija 16)
Napomena: Komande ispod pretpostavljaju da ste i dalje u sandbox kontejneru.
Code Block | ||||
---|---|---|---|---|
| ||||
# aktivacija conde u kontejneru
Apptainer> source /usr/local/miniforge/bin/activate
# kreiranje virtualnog okruženja data_stack
(base) Apptainer> conda create -n data_stack python=3.10 -y
...
# aktivacija virtualnog okružaenja data_stack
(base) Apptainer> conda activate data_stack
# instalacija knjižnica pipom
(data_stack) Apptainer> pip3 install numpy scipy pandas matplotlib ipython
...
Downloading and Extracting Packages
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
# ispis instaliranih knjižnica
(data_stack) Apptainer> pip3 list
...
ipython 8.13.2
matplotlib 3.7.1
matplotlib-inline 0.1.6
numpy 1.24.3
pandas 2.0.1
scipy 1.10.1
... |
Korištenje instaliranog data_stack
virtualnog okruženja osigurava se izvršavanjem python izvršne datoteke u /usr/local/miniforge/envs/data_stack/bin/python3
:
Code Block | ||
---|---|---|
| ||
# ispis verzije i staze __init__.py datoteke knjižnice matplotlib u kontejneru
[korisnik@kompjuter:~] $ apptainer exec data_stack_sandbox/ /usr/local/miniforge/envs/data_stack/bin/python3 -c 'import matplotlib; print("matplotlib verzija je: ", matplotlib.__version__); print("matplotlib __init__ datoteka je:", matplotlib.__file__)'
...
matplotlib verzija je: 3.7.1
matplotlib __init__ datoteka je: /usr/local/miniforge/envs/data_stack/lib/python3.10/site-packages/matplotlib/__init__.py |
Ostali koraci pretvaranja u image i dopremanja na Supek ostaju isti, dok se cjelokupan proces kao i prije može zapisati u .def datoteci u kojoj je moguće definirati /usr/local/mambaforge/envs/data_stack/bin/python3
kao direktnu izvršnu naredbu.
Izgradnja condom + online repozitoriji
Cjelokupan proces izgradnje specifičnog python virtualnog okruženja može se preskočiti korištenjem već pripremljenih kontejnera koji u sebi već sadrže condu, poput condaforge/miniforge3
Ako se koriste kao baza za izgradnju gore navedenog virtualnog okruženja, definicijska datoteka .def izgledala bi na sljedeći način i mogla koristiti za izgradnju slike koja se može dopremiti na Supeka:
- zaglavlje s osnovnim condaforge kontejnerom (linije 1 i 2)
%post
poglavlje s instalacijskim naredbama (linije 4 do 9)%environment
poglavlje koje postavlja okoliš za virtualno okruženjedata_stack
(linije 11 do 22)%runscript
poglavlje koje definira izvršnu naredbu python3 (linije 24 do 26)
Code Block | ||||
---|---|---|---|---|
| ||||
Bootstrap: docker
From: condaforge/miniforge3
%post
conda create -n data_stack python=3.10 -y
. /opt/conda/bin/activate
conda activate data_stack
pip3 install numpy scipy pandas matplotlib ipython
%environment
export PS1='(data_stack) Apptainer> '
export PATH='/opt/conda/envs/data_stack/bin:/opt/conda/condabin:/opt/conda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/ usr/bin:/sbin:/bin'
export CONDA_PREFIX='/opt/conda/envs/data_stack'
export CONDA_SHLVL='1'
export CONDA_DEFAULT_ENV='data_stack'
export CONDA_PROMPT_MODIFIER='(data_stack) '
export CONDA_EXE='/opt/conda/bin/conda'
export _CE_M=''
export _CE_CONDA=''
export CONDA_PYTHON_EXE='/opt/conda/bin/python'
%runscript
exec python3 $@ |
Izgradnja na Supeku
U slučaju da niste u mogućnosti izgraditi kontejner na svojem osobnom računalu, pružamo mogućnost izgradnje kontejnera na pristupnom poslužitelju login-gpu.hpc.srce.hr
Pri izgradnji, treba pripaziti na sljedeće:
- graditi u direktoriju
/scratch
, koji nije dio Lustre dijeljenog datotečnog sustava - prebaciti kreirani image nazad u vaš korisnički direktorij, jer u protivnom neće biti vidljiv izvan pristupnog čvora
login-gpu.hpc.srce.hr
- nakon izgradnje obrisati sve kreirane datoteke
- pri sandbox izgradnji koristiti opciju fakeroot (jer korisnici nemaju sudo ovlasti)
Primjer izgradnje ubuntu v20.04 imagea s dodatnim knjižnicama:
Code Block | ||
---|---|---|
| ||
# login na pristupni poslužitelj gpu
[korisnik@kompjuter ~]$ ssh korisnik@login-gpu.hpc.srce.hr
Last login: Wed May 24 09:23:06 2023 from x.x.x.x
# pomicanje u /scratch i kreiranje direktorija za izgradnju
[korisnik@x3000c0s27b0n0 ~]$ cd /scratch
[korisnik@x3000c0s27b0n0 scratch]$ mkdir ${USER}-apptainer
[korisnik@x3000c0s27b0n0 scratch]$ cd ${USER}-apptainer
# izgradnja sandbox verzije
[korisnik@x3000c0s27b0n0 korisnik-apptainer]$ apptainer build ubuntu_20.04_sandbox docker://ubuntu:20.04
[korisnik@x3000c0s27b0n0 korisnik-apptainer]$ apptainer shell --writable --fakeroot ubuntu_20.04_sandbox
Apptainer> ...
Apptainer> ... dodatne komande za izgradnju kontejnera ...
Apptainer> ...
Apptainer> exit
# mijenjanje sanboxa u image, prebacivanje u korisnički i
[korisnik@x3000c0s27b0n0 korisnik-apptainer]$ apptainer build ubuntu_20.04.sif ubuntu_20.04_sandbox
[korisnik@x3000c0s27b0n0 korisnik-apptainer]$ mv ubuntu_20.04.sif ~
[korisnik@x3000c0s27b0n0 korisnik-apptainer]$ cd ~
# brisanje direktorija za izgradnju
[korisnik@x3000c0s27b0n0 korisnik-apptainer]$ rm -rf /scratch/${USER}-apptainer |
Kako dalje?
Anchor | ||||
---|---|---|---|---|
|
- Lustre
- Apptainer
- Službena dokumentacija - za detalje o raznim komandama
- Originalni članak - Zašto je Singularity/Apptainer uopće nastao?
- Pip
- Službena dokumentacija - za detalje o raznim komandama pipa
- RealPython tutorial - super tutorial za uvod u pip
- Conda
- Službena dokumentacija - za detalje o raznim komandama conde
- Isabella wiki - naš stari wiki s najkorištenijim komandama i njihovim opisom