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īgi
  • exclusive_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.