Skoči na vsebino

Moduli in vsebniki

Navadni uporabniki (torej ne-skrbniki) ne morejo nameščati programov na sistem. Za namestitev se morajo dogovoriti s skrbnikom gruče. Vso potrebno programsko opremo lahko sicer zmeraj prevedemo sami1 in namestimo v svoj domači imenik, a je to precej zamudno in nadležno opravilo. V tem razdelku si ogledamo dva pristopa za lažje nalaganje raznovrstnih programskih paketov, ki ju pogosto uporabljamo v superračunalništvu.

Okoljski moduli

Prvi pristop so okoljski moduli (angl. environment modules), ki vključujejo izbrano uporabniško programsko opremo. Module običajno pripravi in namesti skrbnik, ki jih tudi vključi v katalog modulov. Uporabnik lahko nato z ukazoma module load oziroma module unload vklopi oziroma izklopi module. Različni moduli lahko vsebujejo tudi različice istega programa, denimo z in brez podpore za grafične pospeševalnike. Seznam vseh modulov dobimo z ukazoma module avail in module spider.

$ module spider
--------------------------------------------------------------------------
The following is a list of the modules and extensions currently available:
--------------------------------------------------------------------------
Anaconda3: Anaconda3/5.3.0
  Built to complement the rich, open source Python community, the Anaconda platform provides an
  enterprise-ready data analytics platform that empowers companies to adopt a modern open data
  science analytics architecture.

Autoconf: Autoconf/2.69-GCCcore-7.3.0, ...
  Autoconf is an extensible package of M4 macros that produce shell scripts to automatically
  configure software source code packages. These scripts can adapt the packages to many kinds of
  UNIX-like systems without manual user intervention. Autoconf creates a configuration script for
  a package from a template file that lists the operating system features that the package can
  use, in the form of M4 macro calls. 
...
module spider

Na delavnici bomo potrebovali modul FFmpeg. Ta je na gruči NSC že nameščen, moramo ga le naložiti:

$ module load FFmpeg
module load FFmpeg

Z ukazom module list pogledamo, katere module smo naložili.

$ module list
Currently Loaded Modules:
    1) GCCcore/12.3.0                 8) x265/3.5-GCCcore-12.3.0           15) xorg-macros/1.20.0-GCCcore-12.3.0
    2) NASM/2.16.01-GCCcore-12.3.0    9) expat/2.5.0-GCCcore-12.3.0        16) libpciaccess/0.17-GCCcore-12.3.0
    3) zlib/1.2.13-GCCcore-12.3.0    10) libpng/1.6.39-GCCcore-12.3.0      17) X11/20230603-GCCcore-12.3.0
    4) bzip2/1.0.8-GCCcore-12.3.0    11) Brotli/1.0.9-GCCcore-12.3.0       18) FriBidi/1.0.12-GCCcore-12.3.0
    5) x264/20230226-GCCcore-12.3.0  12) freetype/2.13.0-GCCcore-12.3.0    19) SDL2/2.28.2-GCCcore-12.3.0
    6) ncurses/6.4-GCCcore-12.3.0    13) util-linux/2.39-GCCcore-12.3.0    20) FFmpeg/6.0-GCCcore-12.3.0
    7) LAME/3.100-GCCcore-12.3.0     14) fontconfig/2.14.2-GCCcore-12.3.0
module list

Nato lahko poženemo program ffmpeg. Za ogrevanje pogledamo verzijo programa.

$ ffmpeg -version
ffmpeg version 6.0 Copyright (c) 2000-2023 the FFmpeg developers
    built with gcc 12.3.0 (GCC)
    configuration: --prefix=/cvmfs/sling.si/modules/el7/software/FFmpeg/6.0-GCCcore-12.3.0 --enable-pic --enable-shared --enable-gpl --enable-version3 --enable-nonfree --cc=gcc --cxx=g++ --enable-libx264 --enable-libx265 --enable-libmp3lame --enable-libfreetype --enable-fontconfig --enable-libfribidi --enable-sdl2
    libavutil      58.  2.100 / 58.  2.100
    libavcodec     60.  3.100 / 60.  3.100
    libavformat    60.  3.100 / 60.  3.100
...
ffmpeg -version

Vse naložene okoljske module lahko odstranimo z ukazom module purge.

Vsebniki

Slabost modulov je, da jih mora pripraviti in namestiti skrbnik. Če to ni možno, lahko izberemo drugi pristop in program, ki ga potrebujemo, zapakiramo v vsebnik (angl. container) Apptainer. Tak vsebnik vsebuje naš program in vse druge programe ter programske knjižnice, ki jih potrebuje za delovanje. Ustvarimo ga lahko na poljubnem računalniku, nato pa ga skopiramo na gručo.

Ko imamo ustrezen vsebnik pripravljen, ga uporabimo tako, da pred želeni ukaz zmeraj napišemo apptainer exec <vsebnik>. Vsebnik za FFmpeg (datoteka ffmpeg_alpine.sif) je na voljo na povezavi. Prenesemo ga na gručo in zaženemo:

$ apptainer exec ffmpeg_alpine.sif ffmpeg -version
apptainer exec ffmpeg_alpine.sif ffmpeg -version

Prikaže se nam izpis s podatki o verziji programske opreme ffmpeg. S programom apptainer zaženemo vsebnik ffmpeg_alpine.sif. V vsebniku pa nato zaženemo program ffmpeg.

Vsebnik ffmpeg_alpine.sif si lahko zgradimo tudi sami. Iskanje po spletu s ključnimi besedami ffmpeg, container in docker, nas verjetno pripelje na spletno stran https://hub.docker.com/r/jrottenberg/ffmpeg/ z množico najrazličnejših vsebnikov za ffmpeg. Izberemo zadnjo verzijo najmanjšega, pripravljenega za Alpine Linux, ki ga zgradimo kar na vstopnem vozlišču.

$ apptainer pull docker://jrottenberg/ffmpeg:alpine
INFO:    Converting OCI blobs to SIF format
INFO:    Starting build...
INFO:    Fetching OCI image...
2.1MiB / 2.1MiB [=====================================================================================] 100 % 2.3 MiB/s 0s
9.2MiB / 9.2MiB [=====================================================================================] 100 % 2.3 MiB/s 0s
20.1MiB / 20.1MiB [===================================================================================] 100 % 2.3 MiB/s 0s
INFO:    Extracting OCI image...
INFO:    Inserting Apptainer configuration...
INFO:    Creating SIF file...
apptainer pull docker://jrottenberg/ffmpeg:alpine

Obširnejša navodila za pripravljanje vsebnikov najdemo na https://apptainer.org/docs/user/latest/.

Kar nekaj pogosto uporabljanih vsebnikov je na gručah na voljo vsem uporabnikom:

  • na gruči ARNES jih najdemo v mapi /d/hpc/singularity/,
  • na gručah Maister in Trdina pa v mapi /ceph/sys/singularity.

  1. (Delna) navodila za prevajanje FFmpeg najdemo v uradni dokumentaciji