Konténer környezet

Singularity

A Singularity egy kifejezetten HPC felhasználásra optimalizált konténer környezet, amely lehetőséget nyújt arra, hogy a SLURM ütemező segítségével a batch job futtatást az operációs rendszertől szeparáltan egy konténerben lehessen végrehajtani.

A Komondoron a Singularity Community Edition, azaz a Singularity nyílt forráskódú verziója lett telepítve. A konténer környezet beállítása az alábbi modul betöltésével lehetséges.

module load singularity

A konténerek használata mindenki számára ajánlott és több előnyel is jár:

  • Lehetséges bármely Linux disztribúció használata konténeren belül

  • A konténerbe bármely saját, megszokott környezet egyszerűen telepíthető

  • A fájrendszer i-node kvótát nem fogja túllépni, hiszen egy SIF állomány készül

  • Sok kis állomány esetén optimális használot biztosít, ha a konténerbe vannak másolva

Konténerek előállítása

A Singularity konténer fájlrendszer formátumának alapja a SIF (Singularity Image Format) állomány. Ezt az állományt többféleképpen is elő lehet állítani.

Docker konténerből, ubuntu.def:

BootStrap: docker
From: ubuntu:latest

%post
apt -y update
apt -y install git python3.11 pip
singularity build --fakeroot --fix-perms ubuntu.sif ubuntu.def

Egy már létező SIF állományból, container.def:

Bootstrap: localimage
From: ubuntu.sif

%post
pip install numpy
singularity build --fakeroot --fix-perms container.sif container.def

További instukciók a konténerek előállításhoz a KIFÜ GitLab-on találhatók. Ugrás a KIFÜ GitLab Singularity konténer build-hez

Konténerek futtatása

A konténert a singularity exec paranccsal lehet elindítani. Példa egy slurm-ön keresztüli konténer futtatásra:

srun --partition=<partition> --account=<account> \
       singularity exec ubuntu.sif cat /etc/os-release

A $HOME könyvtár futtatáskor automatikusan fel van mountolva, kivéve ha megadjuk a –no-home kapcsolót. Fontos, hogy a /project és a /scratch tárhelyeket bindolni szükséges a Singularity-n belül ahhoz, hogy használhassuk a konténerben. Példa a közös könyvtár felcsatolására:

srun --partition=<partition> --account=<project_name> \
       singularity exec -B /scratch/<project_name> \
       ubuntu.sif ls /scratch/<project_name>

Másolás konténerbe

Példa definciós fájl készítése és konténer buildelése, amely kicsomagolja a /scratch/<project_name> alatti tar állományt és beleteszi az adatokat a konténerbe:

BootStrap: docker
From: ubuntu:latest

%post
mkdir -p /data
cd /data
tar xzfv /mnt/data.tar
singularity build -B /scratch/<project_name>:/mnt --fakeroot \
        --fix-perms container.sif container.def

Python környezet konténerben

A $HOME könyvtárba telepített Python környezet (Anaconda/Conda) sok kis állomány létrehozásával jár, ami nem optimális a Lustre fájlrendszer szempontjából és az i-node kvóta túlhasználatával is járhat. Ezért javasoljuk a futtatáshoz szükséges Python környezet is konténerbe telepíteni. A gyors telepítéshez conda helyett a mamba telepítőt ajánljuk. További instrukciók a konténer elkészítéshez itt találhatók: Ugrás a KIFÜ GitLab python konténer build-hez

Python virtual env használat overlay konténerrel

Ez olyankor hasznos, mikor több python modult is szeretnénk most és később is telepíteni egy írható konténer rétegbe (példa overlay.sif néven):

  1. lépés: az alap konténerbe bele kell telepíteni a python-venv csomagot

BootStrap: docker
From: ubuntu:latest

%post
apt -y update
apt -y install python3.11 python3.10-venv pip

%environment
source /venv/bin/activate
  1. lépés: létre kell hozni az overlay.sif állományt (megfelelő méretet kell választani!)

singularity overlay create --size 1024 overlay.sif
  1. lépés: felcsatolás után lehet telepíteni bele csomagokat (akár később is)

singularity shell --overlay overlay.sif ubuntu.sif
Singularity> mkdir /venv
Singularity> python3 -m venv /venv
Singularity> source /venv/bin/activate
(venv) Singularity> pip install numpy

4. lépés: használatkor a virtual environment-et aktiválni kell, vagy pedig az alap konténerben benne kell lennie az %environment alatt singularity exec futtatáskor

Nvidia CUDA konténer

A CUDA driverek használatához a konténerbe telepíteni kell a megfelelő CUDA környzetet. Ez sok erőforrás igényelhet, ezért inkább javasoljuk a module környezet használatát a konténeren belül is. Az alábbi linken megtalálható, hogyan lehet elkészíteni a CUDA modulok betöltésére képes konténert: Ugrás a KIFÜ GitLab konténer build-hez

Fontos

Az Nvidia konténer futtatáshoz a singularity exec parancs után mindképpen meg kell adni –nv kapcsolót. A –nv kapcsoló hatására töltődik be a hoszt Nvidia drivere. Az alábbi parancs segítségével lehet ellenőrizni, hogy látszódnak-e a GPU-k:

srun --partition=<partition> --account=<project_name> \
     singularity exec --nv ubuntu.sif nvidia-smi