GPU un CUDA izmantošana klasterī
Šajā sadaļā aprakstīts, kā HPC klasterī izmantot grafiskos procesorus (GPU) un CUDA bibliotēkas.
GPU resursu pieprasīšana
GPU var tikt pieprasīti līdzīgi kā citi klastera resursi:
qsub -l nodes=1:ppn=1:gpus=1:shared
Papildus iespējams norādīt GPU skaitļošanas režīmu:
shared
: GPU ir pieejams vairākiem skaitļošanas procesiem vienlaicīgiexclusive_process
: uz katra GPU ir atļauts tikai viens skaitļošanas process
Lai pieprasītu konkrētu GPU modeli, papildus jānorāda feature parametrs, piemēram: -l feature=v100
Klasterī “Rudens” pieejami šādi GPU modeļi:
GPU model | Arch | CUDA | FP64 power | Tensor power | Memory | feature (sub) |
Tesla K40 | Kepler | 3.5 | 1.3 Gflops | N/A | 12 GB | k40 |
Tesla V100 | Volta | 7.0 | 7.5 Gflops | 112 Tflops | 16 GB | v100 |
Vairāk informācijas sadaļā Klastera tehniskais apraksts.
CUDA bibliotēku izmantošana
CUDA (Compute Unified Device Architecture) ir paralēlās programmēšanas platforma un lietojumprogrammu saskarne (API), ko izveidojis GPU ražotājs NVIDIA. Tā ļauj izstrādāt programmatūru CUDA atbalstošiem grafiskajiem procesoriem, lai veiktu vispārēja lietojuma GPU skaitļošanu (General Purpose GPU computing).
Lai sagatavotu klastera darba vidi CUDA programmu izstādei vai GPU atbalstošu lietojumprogrammu izpildei, jāielādē CUDA bibliotēkas. Uz klastera ir pieejams vairākas CUDA versijas, kuras var noskaidrot ar komandu module avail cuda
. Vajadzīgā versija tiek ielādēta ar module load
komandu:
module load cuda/cuda-
Lai ielādētu jaunāko CUDA versiju:
module load cuda
Uz klastera pieejamie CUDA rīki/bibliotēkas:
- C++ paplašinājuma CUDA programmēšanai
- CuDNN bibliotēka neironu tīkliem
- CuBLAS lineārās algebras bibliotēka
- NCCL komunikācijas bibliotēka
Lietojuma piemēri klasterī
Uzdevumu skriptu piemēri atrodami direktorijā: /opt/exp_soft/user_info/cuda
Lai veiktu CUDA programmēšanu un atkļūdošanu, var tikt izmantoti šādi Linux komandrindas rīki:
emacs, ddd.
module load cuda
emacs hello-world.cu
nvcc -g -G hello-world.cu –o hello-world.out
ddd –debugger cuda-gdb hello-world.out
Var tikt izmantota arī Eclipse bāzēta izstrādes vide NVIDIA Nsight.
module load cuda
nsight
Lai optimizētu GPU kodu konkrētai GPU paaudzei, kompilēšanas laikā ir jāizmanto papildus parametri, kas aprakstīti klasera rokasgrāmatas pielikumā GPU koda ģenerēšanas parametri.