+ All Categories
Home > Documents > Vyu zit GPU k urychlen u cen neuronov ych s tai.ms.mff.cuni.cz/~sui/spanihel.pdf · 2013. 10....

Vyu zit GPU k urychlen u cen neuronov ych s tai.ms.mff.cuni.cz/~sui/spanihel.pdf · 2013. 10....

Date post: 17-Feb-2021
Category:
Upload: others
View: 3 times
Download: 0 times
Share this document with a friend
30
´ Uvod Hardware Knihovny NNSU Vyuˇ zit´ ı GPU k urychlen´ ı uˇ cen´ ı neuronov´ ych s´ ıt´ ı Semin´ r strojov´ eho uˇ cen´ ı a modelov´ an´ ı V. ˇ Spanihel Katedra matematiky Fakulta jadern´ a a fyzik´ alnˇ e inˇ zen´ yrsk´ a ˇ Cesk´ e vysok´ e uˇ cen´ ı technick´ e v Praze 24.10.2013 Vyuˇ zit´ ı GPU k urychlen´ ı uˇ cen´ ı neuronov´ ych s´ ıt´ ı 1 / 30 V. ˇ Spanihel
Transcript
  • Úvod Hardware Knihovny NNSU

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ıSeminá̌r strojového učeńı a modelováńı

    V. Španihel

    Katedra matematiky

    Fakulta jaderná a fyzikálně inženýrská

    České vysoké učeńı technické v Praze

    24.10.2013

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 1 / 30 V. Španihel

  • Úvod Hardware Knihovny NNSU

    Obsah

    1 Úvod

    2 Hardware

    3 Knihovny

    4 NNSU

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 2 / 30 V. Španihel

  • Úvod Hardware Knihovny NNSU

    Paralelńı programováńı na GPU

    NVIDIA CUDA

    • Přehledné rozhranńı• Pouze pro karty od firmy

    NVIDIA

    OpenCL

    • Hardwarově nezávislé• Složitěǰśı rozhranńı

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 3 / 30 V. Španihel

  • Úvod Hardware Knihovny NNSU

    Co je poťreba

    Software

    • CUDA Runtime - Nutné pro spuštěńı CUDA aplikace• CUDA Toolkit - Pro vývoj(všechny knihovny a dokumentace)• Podporovaný operačńı systém s C/C++ p̌rekladačem• Volitelně GPU Computing SDK - Stovky p̌ŕıkladů

    Hardware

    • Grafická karta NVIDIA podporuj́ıćı CUDA architekturu

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 4 / 30 V. Španihel

  • Úvod Hardware Knihovny NNSU

    Základńı pojmy

    Pojmy

    • Host - Označeńı pro CPU• Device - Označeńı pro GPU• Kernel - Označeńı metody spouštěné na GPU• Vlákno - Jedno voláńı metody• Blok - Až trojrozměrná struktura vláken• Warp - Soubor vláken zpracovávaných paralelně v rámci bloku• Mř́ıžka - Až trojrozměrná struktura blok̊u

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 5 / 30 V. Španihel

  • Úvod Hardware Knihovny NNSU

    Výpočetńı schopnost (Compute capability)

    Vysvětleńı

    • Specifikace verze CUDA architektury (nap̌r. CC = 2.1)• Př́ıklad odlǐsnost́ı: maximálńı počet blok̊u v gridu a vláken v

    bloku

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 6 / 30 V. Španihel

  • Úvod Hardware Knihovny NNSU

    Výpočty na GPU

    Vývoj GPU architektur v čase

    • 2008: Tesla - Výpočetńı schopnost = 1.x• 2010: Fermi - Výpočetńı schopnost = 2.x• 2012: Kepler - Výpočetńı schopnost = 3.x• 2014: Maxwell - Výpočetńı schopnost = 4.x

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 7 / 30 V. Španihel

  • Úvod Hardware Knihovny NNSU

    Vývoj architektur

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 8 / 30 V. Španihel

  • Úvod Hardware Knihovny NNSU

    Historický p̌rehled vybraných grafických karet

    Název Rok CC Počet jader Pamět’ Rozhranńı

    GeForce GTX 480 2010 2.0 480 1.5GB GDDR5 384-bitGeForce GTX 680 2012 3.0 1536 2GB GDDR5 256-bit

    Tesla M2090 2011 2.0 512 6 GB GDDR5 384-bitTesla K20 2012 3.5 2496 5 GB GDDR5 384-bit

    Quadro 2000D 2010 2.1 192 1 GB GDDR5 128-bitQuadro K5000 2012 3.0 1536 4GB GDDR5 256-bit

    Název Rychlost paměti Výkon SP Cena

    GeForce GTX 480 177.4 GB/s 1.345 TFlops 6 000 KčGeForce GTX 680 192.2 GB/s 3.09 TFlops 12 000 Kč

    Tesla M2090 177 GB/s 1.33 TFlops 77 000 KčTesla K20 208 GB/s 3.52 TFlops 100 000 Kč

    Quadro 2000D 41.6 GB/s ? 10 000 KčQuadro K5000 173 GB/s 2.1 TFlops 40 000 Kč

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 9 / 30 V. Španihel

  • Úvod Hardware Knihovny NNSU

    Klasifikace GPU

    Flynnova taxonomie - Klasifikace poč́ıtačových architektur

    Single Instruction Multiple Instruction

    Single Data SISD MISD

    Multiple Data SIMD MIMD

    Řady karet NVIDIA

    • GeForce - pomalá ve dvojité p̌resnosti• Tesla - profesionálńı, rychlá dvojitá p̌resnost• Quadro - určena sṕı̌se pro grafiku

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 10 / 30 V. Španihel

  • Úvod Hardware Knihovny NNSU

    Porovnáńı výkonu

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 11 / 30 V. Španihel

  • Úvod Hardware Knihovny NNSU

    Architektura GPU

    Fermi

    • SM - Multiprocesor s CUDAjádry

    • SFU - Zpracováńı složitýchoperaćı

    • LD/ST - Nač́ıtáńı dat

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 12 / 30 V. Španihel

  • Úvod Hardware Knihovny NNSU

    Typy pamět́ı

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 13 / 30 V. Španihel

  • Úvod Hardware Knihovny NNSU

    Architektura vláken

    Určeńı architektury

    // Urceni dimenzi

    dim3 gridD(gX, gY, gZ);

    dim3 blockD(bX, bY , bZ);

    // Volani kernelu

    kernel (parametry);

    Block[0,0] Block[0,1] Block[0,2] Block[0,3]

    Block[1,0] Block[1,1] Block[1,2] Block[1,3]

    Grid

    Block[1,2]Thread[0,0] Thread[0,1] Thread[0,2] Thread[0,3] Thread[0,4] Thread[0,5]

    Thread[1,0] Thread[1,1] Thread[1,2] Thread[1,3] Thread[1,4] Thread[1,5]

    Thread[2,0] Thread[2,1] Thread[2,2] Thread[2,3] Thread[2,4] Thread[2,5]

    DeviceGlobal memory

    Sharedmemory

    Sharedmemory

    Sharedmemory

    Sharedmemory

    Sharedmemory

    Sharedmemory

    Sharedmemory

    Sharedmemory

    Shared memory

    Register

    Register

    Register

    Register

    Register

    Register

    Register

    Register

    Register

    Register

    Register

    Register

    Register

    Register

    Register

    Register

    Register

    Register

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 14 / 30 V. Španihel

  • Úvod Hardware Knihovny NNSU

    Přǐrazováńı blok̊u na SM

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 15 / 30 V. Španihel

  • Úvod Hardware Knihovny NNSU

    Automatické proměnné

    Dodefinovaná struktura dim3

    • blockDim.x - Obsahuje počet vláken uvniťr bloku• gridDim.x - Obsahuje počet blok̊u uvniťr mř́ızky• blockIdx.x - Obsahuje index rezidentńıho bloku• threadIdx.x - Obsahuje index vlákno v bloku

    Serializace index̊u

    int idx = blockDim.x * blockIdx.x + threadIdx.x;

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 16 / 30 V. Španihel

  • Úvod Hardware Knihovny NNSU

    Jednoduchý p̌ŕıklad C++

    1 __global__ void fillV(float *v, float c) {2 int idx = blockDim.x * blockIdx.x + threadIdx.x;3 if (idx < L) {4 v[idx] = c;5 }6 }

    1 int main(void) {2 float hV[L];3 float *dV;4 for (int i = 0; i < L; i++) hV[i] = 0.0;5 cudaMalloc ((void **) &dV , sizeof(float)*L);6 cudaMemcpy(dV, &hV , sizeof(float)*L, cudaMemcpyHostToDevice);7 fillV (dV, 99.1);8 cudaMemcpy (&hV, dV , sizeof(float)*L, cudaMemcpyDeviceToHost);9 for (int i = 0; i < L; i++) printf("%f\n", hV[i]);

    10 return 0;11 }

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 17 / 30 V. Španihel

  • Úvod Hardware Knihovny NNSU

    Optimalizace

    Předcházet rozděleńı (Divergenci) warpu

    • Vzniká nap̌r. kv̊uli podḿınkám typu:if (threadIdx.x < 11) {

    branch1 ();

    } else {

    branch2 ();

    }

    • Docháźı k serializaci• Poťreba provést obě větve• Část vláken warpu nepracuje, spust́ı se v daľśı iteraci

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 18 / 30 V. Španihel

  • Úvod Hardware Knihovny NNSU

    Knihovny

    Užitečné knihovny

    • CUBLAS - CUDA implementace knihovny BLAS• CUSPARSE - CUDA implementace operaćı s ř́ıdkými maticemi• MAGMA - CUDA implementace knihovny LAPACK• Thrust - Paralelńı algoritmy pro GPU, efektivněǰśı

    programováńı

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 19 / 30 V. Španihel

  • Úvod Hardware Knihovny NNSU

    CUBLAS - porovnáńı výkonu

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 20 / 30 V. Španihel

  • Úvod Hardware Knihovny NNSU

    Maticové násobeńı na CPU (GLS BLAS)

    1 int main(void) {2 float *h_A , *h_B , *h_C;3 int n2 = N * N;4 float alfa = 1.0, beta = 0.0;5 //*67 // Initialize host matrices8 h_A = new float[n2];9 h_B = new float[n2];

    10 h_C = new float[n2];1112 // Compute cblas sgemm13 cblas_sgemm(CblasColMajor , CblasNoTrans , CblasNoTrans , N, N, N, alfa , h_A ,

    N, h_B , N, beta , h_C , N);

    1415 //**1617 return 0;18 }

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 21 / 30 V. Španihel

  • Úvod Hardware Knihovny NNSU

    Maticové násobeńı na GPU (CUBLAS)1 //*2 float *d_A = 0, *d_B = 0, *d_C = 0;3 cublasStatus_t status; cublasHandle_t handle;45 //**6 // Initialize device matrices7 CUDA_CHECK_RETURN(cudaMalloc ((void **) &d_A , n2*sizeof(float)));8 CUDA_CHECK_RETURN(cudaMalloc ((void **) &d_B , n2*sizeof(float)));9 CUDA_CHECK_RETURN(cudaMalloc ((void **) &d_C , n2*sizeof(float)));

    1011 // Transfer data into global memory and fill zeros into h_C12 cublasSetMatrix(N, N, sizeof(float), h_A , N, d_A , N);13 cublasSetMatrix(N, N, sizeof(float), h_B , N, d_B , N);14 CUDA_CHECK_RETURN(cudaMemset(d_C , 0, n2*sizeof(float)));1516 /* Initialize CUBLAS */17 status = cublasCreate (& handle);1819 /* Performs operation using cublas */20 cublasSgemm(handle , CUBLAS_OP_N , CUBLAS_OP_N , N, N, N, &alfa , d_A , N, d_B ,

    N, &beta , d_C , N);

    2122 // Clear memory23 CUDA_CHECK_RETURN(cudaFree(d_A));24 CUDA_CHECK_RETURN(cudaFree(d_B));25 CUDA_CHECK_RETURN(cudaFree(d_C));26 CUDA_CHECK_RETURN(cudaDeviceReset ());27 delete [] h_A; delete [] h_B; delete [] h_C;

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 22 / 30 V. Španihel

  • Úvod Hardware Knihovny NNSU

    Neuronová śıt’ s p̌reṕınaćımi jednotkami

    Účel

    • Separačńı úlohy• Aproximace funkćı

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 23 / 30 V. Španihel

  • Úvod Hardware Knihovny NNSU

    Stavebńı kameny NNSU

    Neuron s p̌reṕınaćı jednotkou (NSU)

    • Přeṕınaćı jednotka• Perceptrony• Vstupy rozdělovány na pereptrony pomoćı NSU

    Blok

    • Zřetězeńı NSU• Bloky uspǒrádány do acyklického grafu

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 24 / 30 V. Španihel

  • Úvod Hardware Knihovny NNSU

    Architektura NNSU - znázorněńı

    Vstup

    Výstup

    B1 B2

    B3 B4

    v

    v

    v v

    v

    v

    v

    NSU1

    NSU2

    NSU3

    v

    v

    SU

    v

    v vN1 N2

    vv

    v v

    NNSU B4 NSU2

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 25 / 30 V. Španihel

  • Úvod Hardware Knihovny NNSU

    Serializace śıtě

    IP kód

    • Reprezentace śıtě - Program Symbol Tree’s• Serializace - Readův kód• Kombinace PST a Readových kódů - IPCode

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 26 / 30 V. Španihel

  • Úvod Hardware Knihovny NNSU

    Učeńı śıtě

    Prvńı úroveň

    • Architektura stromové struktury blok̊u• Genetická optimalizace• Paralelńı implementace

    Druhá úroveň

    • Učeńı perceptronů každého NSU• Řešeńı soustav lineárńıch rovnic• Sériová implementace

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 27 / 30 V. Španihel

  • Úvod Hardware Knihovny NNSU

    Integrace CUDA do projektu

    Úprava Make soubor̊u

    • Předpis pro p̌reklad .cu soubor̊u• Nastaveńı cest ke knihovnám• Vytvǒreńı obalového kódu pro CUDA

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 28 / 30 V. Španihel

  • Úvod Hardware Knihovny NNSU

    Daľśı kroky

    Určit práh velikosti úlohy

    • Malé úlohy spouštět na CPU• Rozsáhleǰśı úlohy spouštět na GPU

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 29 / 30 V. Španihel

  • Úvod Hardware Knihovny NNSU

    Konec

    Prostor pro dotazy

    Využit́ı GPU k urychleńı učeńı neuronových śıt́ı 30 / 30 V. Španihel

    ÚvodHardwareKnihovnyNNSU


Recommended