Implementacja sieci neuronowych na karcie graficznej. Waldemar Pawlaszek



Podobne dokumenty
Tesla. Architektura Fermi

Programowanie Procesorów Graficznych

Programowanie procesorów graficznych GPGPU. Krzysztof Banaś Obliczenia równoległe 1

GLKit. Wykład 10. Programowanie aplikacji mobilnych na urządzenia Apple (IOS i ObjectiveC) #import "Fraction.h" #import <stdio.h>

Programowanie procesorów graficznych GPGPU

Temat: Sieci neuronowe oraz technologia CUDA

PROGRAMOWANIE WSPÓŁCZESNYCH ARCHITEKTUR KOMPUTEROWYCH DR INŻ. KRZYSZTOF ROJEK

Algorytmy sztucznej inteligencji

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Porównanie wydajności CUDA i OpenCL na przykładzie równoległego algorytmu wyznaczania wartości funkcji celu dla problemu gniazdowego

Libra.cs.put.poznan.pl/mailman/listinfo/skisrkolo.

Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1

Karta przedmiotu. Podstawy programowania procesorów graficznych. realizowanego w ramach projektu PO WER

Larrabee GPGPU. Zastosowanie, wydajność i porównanie z innymi układami

Moc płynąca z kart graficznych

Przyspieszanie sprzętowe

JCuda Czy Java i CUDA mogą się polubić? Konrad Szałkowski

Grafika Komputerowa Wykład 6. Teksturowanie. mgr inż. Michał Chwesiuk 1/23

Wysokowydajna implementacja kodów nadmiarowych typu "erasure codes" z wykorzystaniem architektur wielordzeniowych

Wydajność systemów a organizacja pamięci, czyli dlaczego jednak nie jest aż tak źle. Krzysztof Banaś, Obliczenia wysokiej wydajności.

Tworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1

1 Temat: Vertex Shader

Podsystem graficzny. W skład podsystemu graficznego wchodzą: karta graficzna monitor

Architektury komputerów Architektury i wydajność. Tomasz Dziubich

GRAFIKA KOMPUTEROWA. Rozwiązania sprzętowe i programowe. Przyspieszanie sprzętowe. Synteza i obróbka obrazu

Obliczenia Wysokiej Wydajności

Grafika Komputerowa Wykład 5. Potok Renderowania Oświetlenie. mgr inż. Michał Chwesiuk 1/38

Wprowadzenie. Artur Staszczyk Bartłomiej Filipek

Programowanie procesorów graficznych GPGPU. Krzysztof Banaś Obliczenia równoległe 1

Julia 4D - raytracing

sieci jednowarstwowe w MATLABie LABORKA Piotr Ciskowski

GRAFIKA KOMPUTEROWA. Rozwiązania sprzętowe i programowe. Przyspieszanie sprzętowe. Synteza dźwięku i obrazu

Uczenie sieci neuronowych i bayesowskich

Bartłomiej Filipek

Druga aplikacja Prymitywy, alpha blending, obracanie bitmap oraz mały zestaw przydatnych funkcji wyświetlających własnej roboty.

Metody Metody, parametry, zwracanie wartości

Plan wykładu. Akcelerator 3D Potok graficzny

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

Różne rodzaje efektów

OpenGL - Open Graphics Library. Programowanie grafiki komputerowej. OpenGL 3.0. OpenGL - Architektura (1)

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Wstęp do teorii sztucznej inteligencji Wykład III. Modele sieci neuronowych.

Metody optymalizacji soft-procesorów NIOS

Rysowanie punktów na powierzchni graficznej

Programowanie z wykorzystaniem technologii CUDA i OpenCL Wykład 1

1. Prymitywy graficzne

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

W języku C dostępne są trzy instrukcje, umożliwiające tworzenie pętli: for, while oraz do. for (w1;w2;w3) instrukcja

Wstęp do obliczeń równoległych na GPU

Adam Korzeniewski - p. 732 dr inż. Grzegorz Szwoch - p. 732 dr inż.

Inż. Kamil Kujawski Inż. Krzysztof Krefta. Wykład w ramach zajęć Akademia ETI

8. Neuron z ciągłą funkcją aktywacji.

Architektura komputerów

Organizacja pamięci w procesorach graficznych

Wykresy i interfejsy użytkownika

NOWE TRENDY ROZWOJU MIKROPROCESORÓW

Symulacje oddziaływania grawitacyjnego wielu ciał na kompute

Modelowanie rynków finansowych z wykorzystaniem pakietu R

Wstęp do sieci neuronowych, wykład 02 Perceptrony c.d. Maszyna liniowa.

Podstawy OpenCL część 2

Schemat blokowy architektury AVR

Grafika Komputerowa Materiały Laboratoryjne

Zastosowania sieci neuronowych

Podstawy programowania w języku C

Wstęp do sieci neuronowych, wykład 02 Perceptrony c.d. Maszyna liniowa.

Pisząc okienkowy program w Matlabie wykorzystujemy gotowe obiekty graficzne, lub możemy tworzyć własne obiekty dziedzicząc już zdefiniowane.

Synteza i obróbka obrazu. Tekstury. Opracowanie: dr inż. Grzegorz Szwoch Politechnika Gdańska Katedra Systemów Multimedialnych

Grafika komputerowa i wizualizacja

Pytania sprawdzające wiedzę z programowania C++

Sztuczna Inteligencja Tematy projektów Sieci Neuronowe

Wstęp do Programowania, laboratorium 02

i3: internet - infrastruktury - innowacje

Janusz Ganczarski. OpenGL Pierwszy program

Przegląd architektury PlayStation 3

CUDA. cudniejsze przyk ady

PROGRAMOWANIE WSPÓŁCZESNYCH ARCHITEKTUR KOMPUTEROWYCH DR INŻ. KRZYSZTOF ROJEK

OpenGL - tekstury Mapowanie tekstur

Podstawy Processingu. Diana Domańska. Uniwersytet Śląski

1 Podstawy c++ w pigułce.

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

PRZETWARZANIE RÓWNOLEGŁE I ROZPROSZONE. Mnożenie macierzy kwadratowych metodą klasyczną oraz blokową z wykorzystaniem OpenMP.

Architektura komputerów

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O

Systemy wirtualnej rzeczywistości. Komponenty i serwisy

Potok graficzny i shadery. Hubert Rutkowski

a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]

Układy VLSI Bramki 1.0

Programowanie gier komputerowych Tomasz Martyn Wykład 6. Materiały informacje podstawowe

Podstawy Sztucznej Inteligencji (PSZT)

Projekt prostego procesora

MMX i SSE. Zbigniew Koza. Wydział Fizyki i Astronomii Uniwersytet Wrocławski. Wrocław, 10 marca Zbigniew Koza (WFiA UWr) MMX i SSE 1 / 16

Mikroprocesory rodziny INTEL 80x86

Program 6. Program wykorzystujący strukturę osoba o polach: imię, nazwisko, wiek. W programie wykorzystane są dwie funkcje:

Liczby losowe i pętla while w języku Python

Wykorzystanie architektury Intel MIC w obliczeniach typu stencil

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Programowanie strukturalne i obiektowe. Funkcje

Poniżej pokazane są poszczególne etapy, w nawiasach kwadratowych znajdują się nazwy tekstur, które utworzymy w projekcie, a przy strzałkach nazwy

SIEĆ NEURONOWA JAKO NARZĘDZIE APROKSYMACJI I KLASYFIKACJI DANYCH. Jakub Karbowski Gimnazjum nr 17 w Krakowie

Transkrypt:

Implementacja sieci neuronowych na karcie graficznej Waldemar Pawlaszek

Motywacja Czyli po co to wszystko?

Motywacja Procesor graficzny GPU (Graphics Processing Unit) Wydajność Elastyczność i precyzja

Motywacja Wydajność 3 GHz Pentium 4 teoretycznie: 6 GFLOPs GeForce FX 5900 Zaobserwowano: 20 GFLOPs GeForce 6800 Ultra Zaobserwowano: 40 GFLOPs

Motywacja Wydajność CPU Roczny wzrost mocy ~1.5x / dziesięciolecie ~60x (Prawo Moora) GPU Roczny wzrost mocy >2x / dziesięciolecie ~1000x (Znacznie szybciej niż prawo Moora)

Motywacja Wydajność Dlaczego GPU jest wydajniejszy? Specjalizacja Ekonomia

Motywacja Elastyczność Potok graficzny jest wysoce programowalny Programowanie w językach wysokiego poziomu

Motywacja Precyzja 32-bitowe obliczenia zmiennoprzecinkowe w całym potoku

Wady Trudne w użyciu GPU jest zaprojektowany do obliczeń graficznych Obliczenia są z natury równoległe Kody z CPU nie można po prostu przeportować

Wady Trudne w użyciu (częściowy ratunek) BrookGPU http://graphics.stanford.edu/projects/brookgpu/ Zapewnia abstrakcje od warstwy graficznej

Przykłady GPGPU Programowanie ogólnego przeznaczenia wykorzystując sprzęt graficzny http://www.gpgpu.org/

Architektura

Procesor graficzny służy do rysowania prymitywów w prostokątnym obszarze pamięci Punkty Proste Trójkąty

Dwie jednostki Jednostka wierzchołków oblicza docelowe pozycje i parametry prymitywów Jednostka fragmentów oblicza wartość dla każdego elementu prymitywu

Przebieg rysowania Wierzchołki po transformacjach Składanie prymitywów Rasteryzacja Interpolacja danych wierzchołków

Program wierzchołków Przebieg rysowania Program fragmentów Wierzchołki po transformacjach Składanie prymitywów Rasteryzacja Interpolacja danych wierzchołków Wykonywany raz na wierzchołek Wykonywany raz na fragment

Schemat potoku rysującego Interpolacja danych Aplikacja Program wierzchołków Program fragmentów Bufor docelowy Dane z bufora wierzchołków Dane z tekstur

To tylko rysowanie. Jak to może nam pomóc w obliczeniach? Cała moc tkwi w procesorze fragmentów: Możemy generować jedną macierz (bufor docelowy) na podstawie wielu macierzy wejściowych (tekstur)

To tylko rysowanie. Jak to może nam pomóc w obliczeniach? Dla każdego pola macierzy docelowej wywoływany jest osobny program mogący zapisywać tylko do tego pola.

Jak to wygląda w praktyce? Procesorem wierzchołków nie interesujemy się za bardzo. (0,1) (1,1) Konfigurujemy go, aby rysował dwa trójkąty o takich współrzędnych, aby zapełnić cały bufor docelowy. (0,0) (1,0) oraz aby przekazywał na wejście procesora fragmentów pozycję obliczanego punktu

Przykład prostego kodu fragmentów void main (float2 vpos :TEXCOORD0, out float4 ocolor :COLOR0) { ocolor = float4(vpos, 0, 0); }

Przykład prostego kodu fragmentów sampler s0; void main (float2 vpos :TEXCOORD0, out float4 ocolor :COLOR0) { ocolor = tex2d(s0, vpos); }

Przykład prostego kodu fragmentów sampler s0; void main (float2 vpos :TEXCOORD0, out float4 ocolor :COLOR0) { ocolor = 1 - tex2d(s0, vpos); }

Przykład prostego kodu fragmentów sampler s0; void main (float2 vpos :TEXCOORD0, out float4 ocolor :COLOR0) { ocolor = tex2d(s0, vpos * 2); }

Przykład prostego kodu fragmentów sampler s0; sampler s1; void main (float2 vpos :TEXCOORD0, out float4 ocolor :COLOR0) { if (vpos.x < 0.5) ocolor = tex2d(s0, vpos); else ocolor = tex2d(s1, vpos); }

Przykład prostego kodu fragmentów sampler s0; sampler s1; void main (float2 vpos :TEXCOORD0, out float4 ocolor :COLOR0) { ocolor = tex2d(s0, vpos) + tex2d(s1, vpos); }

Co można obliczać? Kod procesora fragmentów może zawierać praktycznie dowolne operacje zmiennoprzecinkowe Na wejściu można ustawić do 16 tekstur Ograniczeniem jest limit instrukcji W najnowszych kartach wynosi on 512 instrukcji. Można jednak robić pętle i podprocedury. Limit instrukcji wykonywanych dla jednego fragmentu to 65535

Co można obliczać? Procesor fragmentów może operować na wielu formatach danych: 8-bitowe liczby naturalne widziane jako liczby z przedziału 0.0 1.0 16-bitowe liczby zmiennoprzecinkowe 32-bitowe liczny zmiennoprzecinkowe

A teraz sieci neuronowe sumator funkcja aktywacji np. funkcja sigmoidalna

W sieciach jednokierunkowych Wyjście każdego neuronu obliczane jest niezależnie Obliczenia sprowadzają się do wymnożenia macierzy przez wektor (i dodania biasu) oraz zaaplikowania do wyniku nieliniowej funkcji aktywacji Przy wielu danych wejściowych obliczenia możemy złożyć do mnożenia macierzy

Wagi jako macierz M ilość wyjść (ilość neuronów w warstwie) N ilość wejść (wielkość danych wejściowych)

Dane wejściowe jako macierz L ilość danych wejściowych (wektorów wejściowych) N ilość wejść (wielkość danych wejściowych)

Bias jako macierz M ilość wyjść (ilość neuronów w warstwie)

Wynik sumatora

Ogólny przebieg mnożenia macierzy

Kod dla pojedynczego fragmentu (w uproszczeniu) sampler sx; sampler sw; sampler sb; float N, beta; void main (float2 vpos : TEXCOORD0, out float4 ocolor : COLOR0) { float s = 0; } for (int i = 0; i < N; i++) s += tex2d(sx, float2(vpos.x, i/n)) * tex2d(sw, float2(i/n, vpos.y)); s += tex1d(sb, pos.y); ocolor.x = 1/(1+exp(beta*s));

Co w przypadku wielu warstw? Wynikiem działania procesora fragmentów jest bufor, który można użyć jako tekstury. Wystarczy zastosować kilka przebiegów.

Jakieś wyniki? Kyoung-Su Oh i Keechul Jung w pracy GPU implementation of neural networks podają, że karta RADEON 9700 PRO liczyła 20-razy szybciej niż procesor (Ale nie podali jaki)

Jakieś wyniki? Teoretyczne wyliczenia szybkości obliczeń nie uwzględniają często ilości czytań z tekstury (które jednak jest kosztowne) oraz czasu potrzebnego na załadowanie danych do karty graficznej oraz odebrania wyników (z tym jest coraz lepiej: PCI-E).

Dla zainteresowanych http://developer.nvidia.com http://developer.ati.com http://www.gpgpu.org

Inne ciekawe obliczenia na GPU Symulacja płynów metodą Naviera-Stokesa ~120 fps przy rozmiarach 256x256 na GeForce 6800 Ultra

Inne ciekawe obliczenia na GPU Symulacja oddziaływań N-Ciał Metoda Brute force N = 4096 cząsteczek N 2 obliczeń grawitacji 16M obliczeń siły / ramke ~25 instrukcji zminnoprzecinkowych na siłę 17 ramek na sekundę