Przejdź do treści

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 |
                ||     ||
Ta strona używa plików cookies.
Polityka Prywatności    AKCEPTUJĘ