- EN: This page is not translated to English.
Apptainer
Oficjalna dokumentacja https://apptainer.org/docs/user/latest/.
(Dawniej https://sylabs.io/docs/).
Po co kontenery?
BYOE: Bring Your Own Environment!
Kontenery zmieniają przestrzeń użytkownika w wymienny komponent. Oznacza to, że programy, niestandardowe konfiguracje i środowisko, może być niezależne od systemu operacyjnego np. CentOS, Fedora, Ubuntu itp. Kontener apptainer (dawniej singularity) spakuje wszystko, czego potrzebujesz, w jeden weryfikowalny plik.
Uruchamiając kontener (np. nowy PC, centrum HPC, nowy użytkownik/członek zespołu) zaoszczędzamy czas związany z konfiguracją środowiska i instalacją bibliotek niezbędnych do uruchomienia programu.
Przykłady
Sesja Interaktywna
Najpierw należy wejść na węzeł obliczeniowy w systemie Topola
srun -N1 -n10 --partition=topola --account=NR_GRANTU --qos=hpc --time=01:00:00 --pty /bin/bash -l
lub w systemie Okeanos
srun -N1 -n10 --partition=okeanos --account=NR_GRANTU --time=01:00:00 --pty /bin/bash -l
module load common/go/1.13.12
module load common/apptainer/3.5.3
lub w systemie Rysy
srun -N1 -n4 --account=app-NR_GRANTU --gres=gpu:1 --time=01:00:00 --pty /bin/bash -l
Jako przykład posłuży kontener o nazwie 'lolcow'.
Wybrany kontener ściągniemy z repozytorium docker'a.
Konwersja na format apptainer'a (czyli kontener.sif
) zostanie wykonana automatycznie.
apptainer pull docker://godlovedc/lolcow
Po ściągnięciu kontenera
apptainer run lolcow_latest.sif # uruchom kontener z domyślnym programem
apptainer exec lolcow_latest.sif cowsay moo # wywołaj polecenie 'cowsay' z argumentem 'moo'
apptainer shell --cleanenv lolcow_latest.sif # wejdź do kontenera - sesja interaktywna wewnątrz kontenera
# jeżeli nie chcemy przekazywać zmiennych środowiskych systemu hosta do wnętrza kontenera, należy użyć flagi --cleanenv
Zlecenie zadań
Zlecenie zadań z wykorzystaniem kontera apptainer, odbywa się analogicznie jak dla innych programów
zadanie.slurm
#!/bin/bash -l
#SBATCH -J __JOBNAME__
#SBATCH -N __NUMBER_OF_NODES__
#SBATCH --ntasks-per-node __PROCESORS_PER_NODE__
#SBATCH -A __GRANT_NAME_GXXX__
#SBATCH -p __PARTITION__
module load common/go/1.13.3 # na systemie okeanos
module load common/apptainer/3.4.2 # na systemie okeanos
apptainer exec moj_kontener.sif ./skrypt_do_wykonania_wewnatrz_kontenera.sh
skrypt_do_wykonania_wewnatrz_kontenera.sh
#!/bin/bash -l
echo hello # program do wykonania wewnątrz kontenera
Jężeli chcemy uruchomić kontener z GPU (klaster RYSY), to należy dodać flagę --nv
,
np. apptainer exec --nv moj_kontener.sif ./skrypt_do_wykonania_wewnatrz_kontenera.sh
.
MPI
Szczegóły na oficjalnej stronie: https://sylabs.io/guides/3.4/user-guide/mpi.html
Budowanie kontenerów
Nie zawsze jest możliwe budowanie kontenerów apptainer bezpośrednio na maszynach ICM (sudo). W takim przypadku kontener musi zostać zbudowany na lokalnym komputerze użytkownika (lub w chmurze). https://apptainer.org/docs/admin/main/installation.html#install-ubuntu-packages
Poniżej przykład budowy obrazu (na komputerze Topola)
# tworzymy plik definiujący zawartość obrazu
# <https://apptainer.org/docs/user/latest/build_a_container.html>
$ vim recipe.def
"""
Bootstrap: docker
From: ubuntu:20.04
%post
apt-get -y update
apt-get -y install cowsay lolcat
%environment
export LC_ALL=C
export PATH=/usr/games:$PATH
%runscript
date | cowsay | lolcat
"""
# budujemy
$ apptainer build image.sif recipe.def
# uruchamiamy
$ apptainer run ./lolcow.sif
_______________________________
< Wed Aug 30 11:28:16 CEST 2023 >
-------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||