Versions Compared

Key

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

...

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

NVIDIA NGC kontejneri

Nvidia NGC je repozitorij namijenjen korištenju kontejnera optimiziranih za izvršavanje na NVIDIA grafičkim procesorima i sadrži sijaset recepata za popularne aplikacije (poput strojnog učenja) pogodnih za izgradnju i modifikaciju za specifične korisničke potrebe.


Pri nadogradnji (interaktivnoj ili putem definicijskih datoteka), jedna od skripti unutar kontejnera postavlja korisničku okolinu (/etc/shinit_v2) i osigurava tzv. "forward" kompatibilnost na način da učitava datoteku /proc/driver/nvidia/version s domaćina, stvarajući sloj datoteka (/usr/local/cuda-11.8/compat/lib) koje usklađuju verziju CUDE s driverima na pristupnom poslužitelju (510.47.03):

Code Block
languagebash
# izgradi proizvoljan kontejner ngc korištenjem repozitorija NGC čija verzija CUDE (npr. v11.8) ovisi o driverima verzije 520.61.05
[korisnik@x3000c0s27b0n0 ~] apptainer build ngc-kontejner.sif ngc-kontejner.def
...

# ispiši sadržaj /usr/local/cuda-11.8/compat/lib unutar kontejnera
[korisnik@x3000c0s27b0n0 ~] apptainer exec ngc-kontejner.sif ls -l /usr/local/cuda-11.8/compat/lib/
13:4: not a valid test operator: (
13:4: not a valid test operator: 510.47.03
total 145702
lrwxrwxrwx 1 korisnik korisnik       12 Sep 29  2022 libcuda.so -> libcuda.so.1
lrwxrwxrwx 1 korisnik korisnik       20 Sep 29  2022 libcuda.so.1 -> libcuda.so.520.61.05
-rw-r--r-- 1 korisnik korisnik 26284256 Sep 29  2022 libcuda.so.520.61.05
lrwxrwxrwx 1 korisnik korisnik       28 Sep 29  2022 libcudadebugger.so.1 -> libcudadebugger.so.520.61.05
-rw-r--r-- 1 korisnik korisnik 10934360 Sep 29  2022 libcudadebugger.so.520.61.05
lrwxrwxrwx 1 korisnik korisnik       19 Sep 29  2022 libnvidia-nvvm.so -> libnvidia-nvvm.so.4
lrwxrwxrwx 1 korisnik korisnik       27 Sep 29  2022 libnvidia-nvvm.so.4 -> libnvidia-nvvm.so.520.61.05
-rw-r--r-- 1 korisnik korisnik 92017376 Sep 29  2022 libnvidia-nvvm.so.520.61.05
lrwxrwxrwx 1 korisnik korisnik       37 Sep 29  2022 libnvidia-ptxjitcompiler.so.1 -> libnvidia-ptxjitcompiler.so.520.61.05
-rw-r--r-- 1 korisnik korisnik 19963864 Sep 29  2022 libnvidia-ptxjitcompiler.so.520.61.05


Pri izvršavanju aplikacija unutar ovog kontejnera, usklađenost kontejnera testira se izvršnom datotekom /usr/local/bin/cudaCheck i prolazi jedino na pristupnom GPU poslužitelju:

Code Block
languagebash
# testiraj usklađenost na pristupnom poslužitelju GPU
[korisnik@x3000c0s27b0n0 ~] apptainer exec --nv ngc-kontejner.sif /usr/local/bin/cudaCheck
INFO:    underlay of /usr/bin/nvidia-smi required more than 50 (521) bind mounts
13:4: not a valid test operator: (
13:4: not a valid test operator: 510.47.03
CUDA Driver OK

# spoji se interaktivnom sjednicom na jedan od radnih GPU čvorova
[korisnik@x3000c0s27b0n0 ~] qsub -l ngpus=1 -I
qsub: waiting for job 107908.x3000c0s25b0n0.hsn.hpc.srce.hr to start
qsub: job 107908.x3000c0s25b0n0.hsn.hpc.srce.hr ready

# testiraj usklađenost na radnom čvoru
[korisnik@x8000c2s4b0n1 ~] apptainer exec --nv ngc-kontejner.sif /usr/local/bin/cudaCheck
INFO:    underlay of /usr/bin/nvidia-smi required more than 50 (521) bind mounts
13:4: not a valid test operator: (
13:4: not a valid test operator: 525.60.13
System has unsupported display driver / cuda driver combination (CUDA_ERROR_SYSTEM_DRIVER_MISMATCH) cuInit()=803


U slučaju da želimo izbjeći stvaranje ovog sloja kompatibilnosti, pri nadogradnji se treba onemogućiti spajanje datoteke /proc/driver/nvidia/version s domaćina čime se kontejner oslanja na "minor" kompatibilnost i osigurava izvršavanje na pristupnom i radnim čvorovima:

Tip
apptainer build --bind /dev/null:/proc/driver/nvidia/version ...


Primjer koraka izgradnje na Supeku nalaze se ispod:

Code Block
languagebash
# izgradi proizvoljan kontejner ngc i onemogući spajanje datoteke /proc/driver/nvidia/version
[korisnik@x3000c0s27b0n0 ~] apptainer build --bind /dev/null:/proc/driver/nvidia/version ngc-kontejner.sif ngc-kontejner.def
...

# testiraj usklađenost na pristupnom poslužitelju GPU
[korisnik@x3000c0s27b0n0 ~] apptainer exec --nv ngc-kontejner.sif /usr/local/bin/cudaCheck
INFO:    underlay of /usr/bin/nvidia-smi required more than 50 (521) bind mounts
13:4: not a valid test operator: (
13:4: not a valid test operator: 510.47.03
CUDA Driver OK

# spoji se interaktivnom sjednicom na jedan od radnih GPU čvorova
[korisnik@x3000c0s27b0n0 ~] qsub -l ngpus=1 -I
qsub: waiting for job 107908.x3000c0s25b0n0.hsn.hpc.srce.hr to start
qsub: job 107908.x3000c0s25b0n0.hsn.hpc.srce.hr ready

# testiraj usklađenost na radnom čvoru
[korisnik@x8000c2s1b0n0 ~] apptainer exec --nv ngc-kontejner.sif /usr/local/bin/cudaCheck
INFO:    underlay of /usr/bin/nvidia-smi required more than 50 (521) bind mounts
13:4: not a valid test operator: (
13:4: not a valid test operator: 525.60.13
CUDA Driver OK