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/11.2.0                 8) x265/3.5-GCCcore-11.2.0            15) xorg-macros/1.19.3-GCCcore-11.2.0
2) NASM/2.15.05-GCCcore-11.2.0    9) expat/2.4.1-GCCcore-11.2.0         16) libpciaccess/0.16-GCCcore-11.2.0
3) zlib/1.2.11-GCCcore-11.2.0    10) libpng/1.6.37-GCCcore-11.2.0       17) X11/20210802-GCCcore-11.2.0
4) bzip2/1.0.8-GCCcore-11.2.0    11) Brotli/1.0.9-GCCcore-11.2.0        18) FriBidi/1.0.10-GCCcore-11.2.0
5) x264/20210613-GCCcore-11.2.0  12) freetype/2.11.0-GCCcore-11.2.0     19) FFmpeg/4.3.2-GCCcore-11.2.0
6) ncurses/6.2-GCCcore-11.2.0    13) util-linux/2.37-GCCcore-11.2.0
7) LAME/3.100-GCCcore-11.2.0     14) fontconfig/2.13.94-GCCcore-11.2.0
module list

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

$ ffmpeg -version
ffmpeg version 4.3.2 Copyright (c) 2000-2021 the FFmpeg developers
    built with gcc 11.2.0 (GCC)
    configuration: --prefix=/ceph/grid/software/modules/software/FFmpeg/4.3.2-GCCcore-11.2.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
    libavutil      56. 51.100 / 56. 51.100
    libavcodec     58. 91.100 / 58. 91.100
    libavformat    58. 45.100 / 58. 45.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...
Getting image source signatures
Copying blob 801bfaa63ef2 skipped: already exists
Copying blob 9b7e8ca952e4 done
Copying blob 98b23fe84856 done
Copying config 51503c1049 done
Writing manifest to image destination
Storing signatures
2021/01/30 17:52:54  info unpack layer: sha256:801bfaa63ef2094d770c809815b9e2b9c1194728e5e754ef7bc764030e140cea
2021/01/30 17:52:54  info unpack layer: sha256:9b7e8ca952e42ed8bf6aebd56e420e40d2637d16b4b79404089adfdca1eb841a
2021/01/30 17:52:55  info unpack layer: sha256:98b23fe84856b3e03df3d02226e002119143da9e2e081408499955ccb8d213df
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 NSC jih najdemo v mapi /ceph/grid/singularity-images,
  • na gručah Maister in Trdina pa v mapi /ceph/sys/singularity.

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