Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. interaktivnom izgradnjom korištenjem verzije sandbox
  2. izgradnjom slike korištenjem definicijske datoteke .def

Nadogradnja kontejnera (lokalno) - shell --writable

Note
titleIzrada kontejnera

Upute koje koriste sudo pri izgradnji nisu moguće na Supeku i Padobranu jer korisnici nemaju takve ovlasti.

Pri izgradnji ili nadogradnji na Supeku i Padobranu koristite opciju fakeroot (npr. za interaktivnu nadogradnju):

Code Block
[korisnik@x3000c0s27b0n0 ~]$ apptainer shell --writable --fakeroot ...

U prvom slučaju, pri izgradnji kontejnera moramo navesti opciju opciju  build --sandbox koja će generirati kontejner u obliku direktorija ubuntu_20.04:

...

Note
titleIzrada kontejnera

Prethodne upute Naredbe koje koriste sudo pri izgradnji nisu moguće na Supeku i Padobranu jer korisnici nemaju takve ovlasti.

Pri izgradnji ili nadogradnji na Supeku koristite opciju fakeroot (npr. za interaktivnu nadogradnju):

Code Block
[korisnik@x3000c0s27b0n0 ~]$ apptainer shell --writable --fakeroot ...
Tip
titleAPPTAINER_TMPDIR - Staza za privremene datoteke

Pri izgradnji ili nadogradnji, apptainer kreira privremene datoteke koje se spajaju u konačni kontejner i koristi stazu /tmp kao zadani direktorij.

/tmp direktorij na pristupnom poslužitelju je dijelom datotečnog prostora vezanog uz operativni sustav pristupnog poslužitelja i ima ograničen prostor od 178 gigabajta.

U trenutcima jače korisničke aktivnosti, a pogotovo višestruke izgradnje kontejnera koji mogu imati i do desetak gigabajta, zbog zadanog ponašanja s privremenim datotekama može doći do preopterećenja diskovnog prostora i smanjene funkcionalnosti operativnog sustava za sve korisnike.

U svrhu izbjegavanja ovog tipa preopterećenja, preporučeno je postaviti varijablu okoliša APPTAINER_TMPDIR prije izgradnje koja mijenja zadani direktorij i postaviti ga (primjerice) na direktorij unutar /scratch prostora (opisano u primjeru ispod)


Primjer Primjer sandbox izgradnje s dodatnim knjižnicama korištenjem Ubuntu v20.04 operativnog sustava:

...

  1. hybrid model - izvršavanje korištenjem MPI implementacije u kontejneru
  2. bind model - izvršavanje korištenjem MPI implementacije izvan kontejnera

Na Supeku je se preporučuje se koristiti bind model, zbog knjižnica koje osiguravaju integraciju sa sustavom za upravljanje PBS i mrežom Slingshot. Pri tom aplikacija koja koristi MPI mora biti ABI kompatibilna (kompajlirana sa MPICH verzija => v3.1) ili kompajlirana sa openMPI 5.x.x verzijom. Isto tako, potrebno je koristiti RHEL-8.6 kompatibilne linux distribucije.

...

U tablici su prikazane putanje slika za izgranju kontejnera i odgovarajući moduli ovisno o MPI implementaciji:

MPI kontejnerOS kontejnerMPI modelMPI SupekPolazni kontejnerBind modul
mpich-4.1.1Rocky-8Bindcray-mpich-8.1.26

/apps/utils/apptainer-images/rockylinux-8-mpich-4.1.1.sif

utils/apptainer-bind/cray-mpich

openMPI-5.0.1Rocky-8Bind

Openmpi- 5.0.1-gnu-8.5.0

/apps/utils/apptainer-images/rockylinux-8-openmpi-5.0.1.sif

utils/apptainer-bind/openmpi-5.0.1

openMPI-4.1.2Ubuntu-22.04Hybrid

OpenMPI 4.x.x

/apps/utils/apptainer-images/ubuntu-22.04-openmpi-4.1.2.sif

X


Primjer izgradnje kontejnera koristeći MPICH(v4.1.1) :

...

Code Block
languagebash
# spajanje na pristupni poslužitelj
[korisnik@kompjuter:~] $ ssh mkvakic@login-gpu.hpc.srce.hr

# izgradnja pytorch kontejnera
[korisnik@x3000c0s27b0n0:~] $ apptainer build pytorch_1.13.1.sif docker://pytorch/pytorch:1.13.1-cuda11.6-cudnn8-runtime

# print raznih informacija korištenjem --nv
[korisnik@x3000c0s27b0n0:~] $ apptainer run --nv ./pytorch_1.13.1.sif python -c "import torch; print('Is cuda available?:', torch.cuda.is_available())"
Is cuda available?: True
[korisnik@x3000c0s27b0n0:~] $ apptainer run --nv ./pytorch_1.13.1.sif python -c "import torch; print('Device count:', torch.cuda.device_count())"
Device count: 1
[korisnik@x3000c0s27b0n0:~] $ apptainer run --nv ./pytorch_1.13.1.sif python -c "import torch; print('Current device:', torch.cuda.current_device())"
Current device: 0
[korisnik@x3000c0s27b0n0:~] $ apptainer run --nv ./pytorch_1.13.1.sif python -c "import torch; print('Device name:', torch.cuda.get_device_name(0))"
Device name: NVIDIA A100-PCIE-40GB


Nadogradnja sandbox kontejnera sa korištenjem  --nv opcije moguća je nakon modifikacije sandbox direktorija izvan kontejnera. 

Code Block
titleKorištenje "sandbox" kontejnera sa --nv opcijom
# izgradnja test.sandbox sandbox slike kontejnera
[korisnik@x3000c0s27b0n0:~] $ apptainer build --sandbox --fix-perms test.sandbox test.def

# modifikacija slike kontejnera
[korisnik@x3000c0s27b0n0:~] $ touch test.sanbox/usr/bin/nvidia-smi
[korisnik@x3000c0s27b0n0:~] $ touch test.sanbox/usr/bin/nvidia-debugdump
[korisnik@x3000c0s27b0n0:~] $ touch test.sanbox/usr/bin/nvidia-persistenced
[korisnik@x3000c0s27b0n0:~] $ touch test.sanbox/usr/bin/nvidia-cuda-mps-control
[korisnik@x3000c0s27b0n0:~] $ touch test.sanbox/usr/bin/nvidia-cuda-mps-server
[korisnik@x3000c0s27b0n0:~] $ mkdir -p test.sandbox/var/run/nvidia-persistenced/
[korisnik@x3000c0s27b0n0:~] $ touch test.sanbox/var/run/nvidia-persistenced/socket

# pokretanje "sandbox" kontainera sa --nv opcijom
[korisnik@x3000c0s27b0n0:~] $ apptainer shell --nv --writable --fakeroot test.sandbox


NVIDIA NGC kontejneri

Tip
NVIDIA driveri na pristupnom poslužitelju su nadograđeni i usklađeni sa radnim poslužiteljima u siječnju 2024. godine!
Izgradnja valjanog kontejnera sa NGC repozitorija moguća je na pristupnom poslužitelju bez --bind opcije ili dodatnih naredbi i konfiguracije.

...