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):
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
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
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