Versions Compared

Key

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

...

Ako uzmemo u obzir dva rubna slučaja: 1) tisuću datoteka u jednom direktoriju naspram 2) tisuću direktorija s jednom datotekom, vidljivo je da se množenjem direktorija efikasnost ove operacije značajno smanjuje (approx. 20 puta). Slični trend vidljiv je i u ostalim kombinacijama (10/100 vs. 100/10, itd.) što upućuje na nužnost agregacije podataka u manji broj direktorija i idealno u datoteke većeg obujma.

Slika 2. Vrijeme izvođenja komande ls -l * stotinu puta nad

...

...

komandom build (Figure 1 u originalnom članku)

...

Izgradnja pipom

Prvi korak je stvaranje osnovnog kontejnera data_stack_sandbox u interaktivnom modu ili verziji sandbox:

Code Block
languagebash
[korisnik@kompjuter] $ apptainer build --sandbox data_stack_sandbox docker://ubuntu:2220.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

...

Code Block
languagebash
[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.1312.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
pretvaranje_dopremanje
pretvaranje_dopremanje

Code Block
languagebash
[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
languagebash
[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.8.10.6

...

Izgradnja pipom + definicijska datoteka
Anchor
definicijska_datoteka
definicijska_datoteka

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
languagebash
linenumberstrue
[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 $@

[korisnik@kompjuter] $ apptainer build data_stack.sif data_stack.def
...
INFO:    Creating SIF file...
INFO:    Build complete: data_stack.sif

[korisnik@kompjuter] $ scp data_stack.sif mkvakic@login-gpu.hpc.srce.hr:.
data_stack.sif      100%  335MB 110.9MB/s   00:03

[korisnik@kompjuter] $ ssh mkvakic@login-gpu.hpc.srce.hr
Last login: Wed May 24 09:18:44 2023 from x.x.x.x

[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
languagebash
[korisnik@kompjuter] $ sudo apptainer build --force --sandbox data_stack_sandbox docker://ubuntu:20.04
...

[korisnik@kompjuter] $ sudo apptainer shell --writable data_stack_sandbox/

Apptainer> apt update
...
Apptainer> apt install curl -y
...
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

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
languagebash
linenumberstrue
Apptainer> source /usr/local/miniforge/bin/activate

(base) Apptainer> conda create -n data_stack python=3.10 -y
...
#                                                                                                                                                                                                                                                            
# To activate this environment, use                                                                                                                                                                                                                          
#
#     $ conda activate data_stack
#
# To deactivate an active environment, use
#
#     $ conda deactivate

(base) Apptainer> conda activate data_stack

(data_stack) Apptainer> pip3 install numpy scipy pandas matplotlib ipython
...
Downloading and Extracting Packages
                                                                                                                                                                                                                                                             
Preparing transaction: done                                                                                                                                                                                                                                  
Verifying transaction: done                                                                                                                                                                                                                                  
Executing transaction: done

(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
languagebash
[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ženje MOJKODdata_stack (linije 11 do 22)
  • %runscript poglavlje koje definira izvršnu naredbu python3 (linije 24 do 26)


Code Block
languagebash
linenumberstrue
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 $@ 



Kako dalje? 
Anchor
reference
reference

...