...
Code Block | ||
---|---|---|
| ||
[korisnik@kompjuter] $ apptainer build --sandbox ubuntu_20.04 docker://ubuntu:20.04 ... INFO: Creating sandbox directory... INFO: Build complete: ubuntu_20.04 [korisnik@kompjuter] $ ls -l total 27104 drwxr-xr-x 18 markokorisnik markokorisnik 4096 svi 23 09:05 ubuntu_20.04 -rwxr-xr-x 1 markokorisnik markokorisnik 27746304 svi 23 08:47 ubuntu_20.04.sif |
...
Code Block | ||
---|---|---|
| ||
[korisnik@kompjuter] $ sudo apptainer build ubuntu_20.04.sif ubuntu_20.04/ ... INFO: Creating SIF file... INFO: Build complete: ubuntu_20.04.sif marko@pc-mkvakic 09:58 ~/Desktop/conda-wiki $ ls -l total 154496 drwxr-xr-x 18 markokorisnik markokorisnik 4096 svi 23 09:51 ubuntu_20.04 -rwxr-xr-x 1 markokorisnik markokorisnik 158195712 svi 23 09:58 ubuntu_20.04.sif |
...
Nakon čega se kontejner instalira komandom build
:
Code Block | ||
---|---|---|
| ||
[korisnik@kompjuter] $ cat ubuntu_20.04.def Bootstrap: docker From: ubuntu:20.04 %post apt update apt install python3-pip -y [korisnik@kompjuter] $ apptainer build ubuntu_20.04.sif ubuntu_20.04.def ... INFO: Creating SIF file... INFO: Build complete: ubuntu_20.04.sif [korisnik@kompjuter] $ ls -l total 154504 drwxr-xr-x 18 markokorisnik markokorisnik 4096 svi 23 09:51 ubuntu_20.04 -rw-r--r-- 1 markokorisnik markokorisnik 87 svi 23 10:22 ubuntu_20.04.def -rwxr-xr-x 1 markokorisnik markokorisnik 158195712 svi 23 10:34 ubuntu_20.04.sif |
...
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:
Code Block | ||
---|---|---|
| ||
[korisnik@kompjuter] $ python3 --version Python 3.9.2 [korisnik@kompjuter] $ apptainer exec ubuntu_20.04.sif python3 --version INFO: /etc/singularity/ exists; cleanup by system administrator is not complete (see 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 |
...
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 | ||
---|---|---|
| ||
[korisnik@kompjuter] $ cat ubuntu_20.04.def Bootstrap: docker From: ubuntu:20.04 %post apt update apt install python3-pip -y %runscript exec python3 $@ [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 |
...
Primjeri
Anchor | ||||
---|---|---|---|---|
|
Slika 3. Workflow za izradu i korištenje kontejnera. Kombinacije komandi
poput import & bootstrap su u novijim verzijama zamijenjene
...
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. Kombinacije komandi
poput create, import i bootstrap su u novijim verzijama zamijenjene
komandom build (Figure 1 u originalnom članku)
pip instalacija
Prvi korak je stvaranje osnovnog kontejnera data_stack_sandbox
u interaktivnom modu ili verziji sandbox:
Code Block | ||
---|---|---|
| ||
[korisnik@kompjuter] $ apptainer build --sandbox data_stack_sandbox docker://ubuntu:22.04
...
INFO: Creating sandbox directory...
INFO: Build complete: data_stack_sandbox
[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 | ||
---|---|---|
| ||
[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.
Apptainer> apt install python3-pip -y
...
Running hooks in /etc/ca-certificates/update.d...
done.
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
Apptainer> pip3 freeze
...
ipython==8.13.2
matplotlib==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 verzijudata_stack.sif
i dostavljamo ju na Supeka:
Code Block |
---|
[korisnik@kompjuter] $ sudo apptainer build data_stack.sif data_stack_sandbox/
...
INFO: Build complete: data_stack.sif
[korisnik@kompjuter] $ du -hcs data_stack*
832M data_stack_sandbox
272M data_stack.sif
1.1G total
[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 |
---|
[korisnik@kompjuter] $ ssh korisnik@login-gpu.hpc.srce.hr
Last login: Wed May 24 08:16:00 2023 from x.x.x.x
[korisnik@kompjuter] $ ls -l
total 278088
-rwxr-xr-x 1 mkvakic hpc 284729344 May 24 08:02 data_stack.sif
[korisnik@kompjuter] $ apptainer exec data_stack.sif python3 --version
Python 3.10.6 |
conda instalacija
Kako dalje?
Anchor | ||||
---|---|---|---|---|
|
- Lustre
- Apptainer
- Službena dokumentacija - za detalje o raznim komandama
- Originalni članak - Zašto je Singularity/Apptainer uopće nastao?
- PipCondaPip
- - za detalje o raznim komandama pipa
- RealPython tutorial - super tutorial za uvod u pip
- Conda
- Službena dokumentacijaRealPython tutorial - za detalje o raznim komandama conde
- Isabella wiki - naš stari wiki s najkorištenijim komandama i njihovim opisom