...
Code Block |
---|
|
# 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 |
---|
|
# 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 |
---|
|
# 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 |
---|
|
# 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 |