Jacek Stelmach

Jacek Stelmach główny inżynier, ETA
Gliwice

Temat: Przyspieszenie obliczeń procesorem karty graficznej

Czy ktoś ma doświadczenia (pozytywne)? Z jakiej biblioteki skorzystać?
Michał Bojanowski

Michał Bojanowski socjolog, analityk

Temat: Przyspieszenie obliczeń procesorem karty graficznej

Jest pakiet 'gputools' (http://crantastic.org/packages/gputools), ale doświadczeń użytkowania nie mam, głownie przez brak odpowiedniego hardware'u.

Sam jestem ciekaw, czy ktoś takie doświadczenia ma (?)Michał Bojanowski edytował(a) ten post dnia 15.10.10 o godzinie 10:18
Wojciech Sobala

Wojciech Sobala Redaktor
statystyczny,
biostatystyk,
Instytut Medycyny
Pr...

Temat: Przyspieszenie obliczeń procesorem karty graficznej

Ograniczenia jak wyżej nie pozwoliły na testowanie, ale ostatnio czytałem porównanie różnych metod przyspieszania obliczeń w R. Wynikało z niego, że dla operacji na macierzach o umiarkowanych rozmiarach (do kilkunastu tysięcy wierszy) obliczenia z wykorzystaniem GPU są wolniejsze niż przy pomocy procesora (CPU). Dopiero dla obliczeń na macierzach powyżej kilkuset tysięcy GPU było szybsze.
Jacek Stelmach

Jacek Stelmach główny inżynier, ETA
Gliwice

Temat: Przyspieszenie obliczeń procesorem karty graficznej

Dzięki. Niestety moje hardware - to nie jest Nvidia. No i macierze, to 'zaledwie' kilkaset wierszy, choć intensywnie eksploatowane.
Zostaje stary, poczciwy Intel 2.0 GHz...
Michał Bojanowski

Michał Bojanowski socjolog, analityk

Temat: Przyspieszenie obliczeń procesorem karty graficznej

Jeżeli pracujesz pod Windowsami i robisz dużo operacji na macierzach (mnożenie, dekompozycje) etc. to stąd

http://cran.r-project.org/bin/windows/contrib/ATLAS

można pobrać zoptymalizowany ATLAS (http://math-atlas.sourceforge.net/) dla swojego procesora. Trzeba podmienić jednego dll-a w katalogu R. Wszystko jest opisane w ReadMe tutaj http://cran.r-project.org/bin/windows/contrib/ATLAS/Re...

W niektórych przypadkach przyspieszenie jest całkiem spore.Michał Bojanowski edytował(a) ten post dnia 15.10.10 o godzinie 20:00
Wojciech Sobala

Wojciech Sobala Redaktor
statystyczny,
biostatystyk,
Instytut Medycyny
Pr...

Temat: Przyspieszenie obliczeń procesorem karty graficznej

Przykład wpływu BLASa na moim komputerze:

Dedykowany BLAS
print(system.time(for(i in 1:25) X%*%X))
user system elapsed
7.71 0.34 8.20
print(system.time(for(i in 1:25) solve(X)))
user system elapsed
8.75 0.16 9.05
print(system.time(for(i in 1:10) svd(X)))
user system elapsed
37.70 1.19 39.17

Domyślny BLAS
print(system.time(for(i in 1:25) X%*%X))
user system elapsed
45.94 0.11 46.11
print(system.time(for(i in 1:25) solve(X)))
user system elapsed
28.96 0.12 29.42
print(system.time(for(i in 1:10) svd(X)))
user system elapsed
81.06 0.97 83.44
Michał Bojanowski

Michał Bojanowski socjolog, analityk

Temat: Przyspieszenie obliczeń procesorem karty graficznej

Wojciech Sobala:
Przykład wpływu BLASa na moim komputerze:
(...)

Anowłaśnie :)
Jacek Stelmach

Jacek Stelmach główny inżynier, ETA
Gliwice

Temat: Przyspieszenie obliczeń procesorem karty graficznej

A u mnie: ok. 1 mln operacji na macierzach - 3 h 17 min. Z 'blasem' dedykowanym - 2 h 11 min. Też miło.

konto usunięte

Temat: Przyspieszenie obliczeń procesorem karty graficznej

Jacek Stelmach:
Czy ktoś ma doświadczenia (pozytywne)? Z jakiej biblioteki skorzystać?

Witam.

Hmm - ciekawe dlaczego karty...
Zanim zacznie Pan szukać odpowiedniej biblioteki, to radzę raz jeszcze zastanowić się nad doborem algorytmu i być może procesor karty nie będzie potrzebny. Pisał Pan, że macierze są malutkie, ale intensywnie eksploatowane - może więc jakiś precomputing byłby rozwiązaniem (z przechowywaniem wyników częściowych). Jaka jest struktura tych macierzy - są pełne czy rzadkie? Jakie są ich własności? Co Pan z tymi macierzami robi?
Chętnie posłucham - może coś pomogę :-)

Poza tym do obliczeń związanych z algebrą liniową, moim zdaniem, znaczenie lepszy od R-a jest octave.
Kamil Bęczyński

Kamil Bęczyński R, SAS, analizy

Temat: Przyspieszenie obliczeń procesorem karty graficznej

Trochę obok tematu : w R istnieją pakiety, które pozwalają pisać algorytmy w Rowym 4GLu na procesory wielordzeniowe - odpowiednimi poleceniami bezpośrednio przydziela się daną część kodu do wykonania dla konkretnego rdzenia.

Jak dobrze pamiętam, dzięki tym pakietom można pisać algorytmy do obliczeń rozproszonych wykonywanych przez kilka oddzielnych komputerów, oczywiście trzeba zbudować odpowiednią sieć w odpowiednim standardzie, narzędziami spoza R).

Jeżeli algorytm wykonywany przez Pana da się zrównoleglić (jeżeli jest to np. obliczanie funkcji z macierzy dla kolejnych wartości jakiegoś parametru spoza macierzy) to zakup procesora ośmiordzeniowego mógłby być atrakcyjny.

konto usunięte

Temat: Przyspieszenie obliczeń procesorem karty graficznej

Jak dobrze pamiętam, dzięki tym pakietom można pisać algorytmy do obliczeń rozproszonych wykonywanych przez kilka oddzielnych komputerów, oczywiście trzeba zbudować odpowiednią sieć w odpowiednim standardzie, narzędziami spoza R).

I tu jest największy kłopot - szybkość przesyłu danych pomiędzy kompami jest wiele rzędów mniejsza niż szybkość obliczeń poszczególnych procesorów. Bez odpowiednich algorytmów sieć złożona nawet i z miliona procesorów nie da lepszych rezultatów niż wynik, który otrzymamy na jednym i to nie najszybszym procku.
Jeżeli algorytm wykonywany przez Pana da się zrównoleglić (jeżeli jest to np. obliczanie funkcji z macierzy dla kolejnych wartości jakiegoś parametru spoza macierzy) to zakup procesora ośmiordzeniowego mógłby być atrakcyjny.

Ja bym poczekał z kupnem odpowiedniego sprzętu, do momentu kiedy będziemy pewni co do tego, że algorytm faktycznie da się zrównolegnić. Pod pojęciem zrównoleglić mam na myśli równoległość na poziomie formułowania zadania, a nie zrównoleglanie algorytmu sekwencyjnego dla danego zadania. To pierwsze jest znacznie trudniejsze, ale i wydajniejsze.
Michał Danaj

Michał Danaj statystyka, data
mining

Temat: Przyspieszenie obliczeń procesorem karty graficznej

Warto też zajrzeć do pakietu Matrix.

I ewentualnie spróbować REvolution, trochę podrasowanej wersji R-a w stosunku do standardu. Nie wiem jednak czy da ona coś więcej niż standard z dedykowanym BLASEm.

Można jeszcze spróbować sprawdzić, czy jakieś inne operacje, poza operacjami macierzowymi nie są mocno obciążające, przy pomocy funkcji Rprof.
Michał Bojanowski

Michał Bojanowski socjolog, analityk

Temat: Przyspieszenie obliczeń procesorem karty graficznej

Warto też zajrzeć do pakietu Matrix.

... albo 'spam', ale to zapewne pomoże tylko wtedy, gdy macierze są "rzadkie" (bardzo dużo zer).
I ewentualnie spróbować REvolution, trochę podrasowanej wersji R-a w stosunku do standardu. Nie wiem jednak czy da ona coś więcej niż standard z dedykowanym BLASEm.

RevoR jest całkiem niezłe jeżeli chodzi o macierze, bo nie używa BLASa tylko MKL (http://software.intel.com/en-us/intel-mkl/), który działa wielowątkowo. Oczywiście znów niewiele to pomoże na starym Pentium. Ale na P4 z HyperThreading, nie mówiąc już o wielordzeniowych prockach, przyspieszenie jest bardzo wyraźne: http://blog.revolutionanalytics.com/2010/06/performanc...
Kamil Bęczyński

Kamil Bęczyński R, SAS, analizy

Temat: Przyspieszenie obliczeń procesorem karty graficznej

widzę, że dyskusja się skończyła, ale wrzucą link dla potomnych : http://cran.r-project.org/web/views/HighPerformanceCom...

na dole jest paragraf "Parallel computing: GPUs"

ciekawostka, bo sporo osób używa winbugs : "The bugsparallel package uses Rmpi for distributed computing of multiple MCMC chains using WinBUGS" w czym jak czym, ale w symulacjach mcmc wielordzeniowość oznacza prawie liniowe przyspieszenie względem ilości rdzeni (a raczej wątków), ciekawe jaki wpływ na rozwój zastosowań metod MC będzie miało wprowadzenie koprocesorów o ilości rdzeni rzędu stu, część zaprezentowanych dotąd (przez intel i dwie inne firmy) procesorów mających (około) 80 rdzeni właśnie do tego by się nadawały (bo ich rdzenie są na poziomie układu 486 DX)

ps. ktoś wyżej powiedział o problemie przepustowości, pomiędzy procesorami/komputerami, z uwagi autora : "małe ale intensywnie wykorzystywane" wyniosłem przekonanie, że ilość danych w stosunku do ilości obliczeń jest poniżej przeciętnej
Wojciech Sobala

Wojciech Sobala Redaktor
statystyczny,
biostatystyk,
Instytut Medycyny
Pr...

Temat: Przyspieszenie obliczeń procesorem karty graficznej

Sprawdziłem w pakiecie Matrix są metody dla macierzy gęstych i rzadkich.
W przypadku mnożenia macierzy korzyść ze stosowania funkcji z pakietu Matrix jest umiarkowana (kilkanaście procent). W przypadku innych operacji takich jak svd oraz inv różnica jest już dużo większa. W przypadku mnożenia typu x%*%t(x) jest specjalizowana funkcja dla takiej operacji, która daje kilkukrotne przyspieszenie.
W przypadku odwracania macierzy najszybsza okazała się funkcja matinv z pakietu rms (jest też w Design).
Jacek Stelmach

Jacek Stelmach główny inżynier, ETA
Gliwice

Temat: Przyspieszenie obliczeń procesorem karty graficznej

Dziękuję Wszystkim za podpowiedzi.Zredukowałem czas obliczeń z 3h 17 min do niecałych 2 h.

A efektem 'ubocznym' tego wątku jest decyzja o wymianie mojego sprzętu na procesor 4. rdzeniowy + płyta główna + karta graficzna + pamięci itd. Lawina ruszyła, może choć myszka ocaleje :)
A zaczynało się tak niewinnie...
Wojciech Sobala

Wojciech Sobala Redaktor
statystyczny,
biostatystyk,
Instytut Medycyny
Pr...

Temat: Przyspieszenie obliczeń procesorem karty graficznej

Jacek Stelmach:
Dziękuję Wszystkim za podpowiedzi.Zredukowałem czas obliczeń z 3h 17 min do niecałych 2 h.

A efektem 'ubocznym' tego wątku jest decyzja o wymianie mojego sprzętu na procesor 4. rdzeniowy + płyta główna + karta graficzna + pamięci itd. Lawina ruszyła, może choć myszka ocaleje :)
A zaczynało się tak niewinnie...

Pod Windows w wersji 64 bitowej nie warto na razie instalować 64 bitowej wersji R, bo nie ma dedykowanych wersji BLASa dla tego systemu (dokładnie to jest jedna ale u mnie nie działa).

konto usunięte

Temat: Przyspieszenie obliczeń procesorem karty graficznej

Jacek Stelmach:
Dziękuję Wszystkim za podpowiedzi.Zredukowałem czas obliczeń z 3h 17 min do niecałych 2 h.

A efektem 'ubocznym' tego wątku jest decyzja o wymianie mojego sprzętu na procesor 4. rdzeniowy + płyta główna + karta graficzna + pamięci itd. Lawina ruszyła, może choć myszka ocaleje :)
A zaczynało się tak niewinnie...

Sprzęt wymienić można - jeśli są na to fundusze.
Radzę jednak zastanowić się nad poprawieniem algorytmów.

Pozdrawiam

konto usunięte

Temat: Przyspieszenie obliczeń procesorem karty graficznej

ps. ktoś wyżej powiedział o problemie przepustowości, pomiędzy procesorami/komputerami, z uwagi autora : "małe ale intensywnie wykorzystywane" wyniosłem przekonanie, że ilość danych w stosunku do ilości obliczeń jest poniżej przeciętnej

Z pięć lat temu testowałem MPI na sieci mniej więcej 64 komputerów. Była to całkiem niezła sieć wewnętrzna wydziału MIMUW. Celem eksperymentu było przyspieszenie standardowej metody Richardsona (iteracyjna metoda rozwiązywania układu równań liniowych; polecana dla macierzy rzadkich, symetrycznych, dodatnio określonych, o znanych wartościach własnych - przykład akademicki). Celem było zmierzenie SpeedUp^* ~ czas obliczeń zadania danego wymiaru na jednej maszynie do czasu obliczeń zadania tego samego wymiaru na sieci.
Rezultat okazał się druzgocący. Intuicyjny/informatyczny sposób podzielenia zadania, wymagający przekazania co jedną iterację tylko pojedynczego doubla pomiędzy dwoma sąsiednimi procesorami (wymiana informacji pomiędzy procesorami odbywała się w tym samym czasie), powodował, że czas obliczeń rósł liniowo ze wzrostem liczy procesorów, niezależnie od wymiaru zadania lokalnego. MPI wygrywał tylko wtedy, kiedy maszynie rozwiązującej to zadanie bez wykorzystania sieci, po prostu zabrakło pamięci.

Podobny eksperyment z OpenMP dał znaczenie gorsze rezultaty.

Z takim problemem radził sobie bez problemu CRAY, ale w jego przypadku szybkość przesyłu danych pomiędzy prockami była na poziomie szybkości obliczeń. W jego przypadku SpeedUp^* był liniowy.

Wniosek: nie wszystko da radę zrównoleglić. Być może czasami warto przeformułować zadanie tak, żeby z natury było równoległe. NIE UFAĆ CZEMUŚ CO ZRÓWNOLEGLA Z AUTOMATU. ZRÓWNOLEGLANIE NA SIECI MA SENS PRZY RZADKIM PRZESYLE MAŁEJ ILOŚCI DANYCH.
Michał Bojanowski

Michał Bojanowski socjolog, analityk

Temat: Przyspieszenie obliczeń procesorem karty graficznej

Mariusz Kozakiewicz:
Z pięć lat temu testowałem MPI na sieci mniej więcej 64 komputerów.
(...)

Z ciekawości: te 64 komputery to były stacje robocze w LANie, klaster, czy jeszcze coś innego?

Zgadzam się w 100% że nie każdy problem, który wydaje się naturalnie podatny na zrównoleglenie, po zrównolegleniu pracuje zgodnie z oczekiwaniami. Warto też pamiętać, że nawet najbardziej naiwne równoległe zadanie można "zrównoleglać" ta różne sposoby: jak przydzielać zadania cząstkowe poszczególnym procesorom etc. Problem staje się jeszcze bardziej skomplikowany jeżeli trzeba wczytywać i zapisywać spore ilości danych, jak w Hadoop+MapReduce czy podobnych rozwiązaniach.

Ja z kolei osobiście mam całkiem dobre doświadczenia z MPI (przez R z resztą) na klastrze. Tylko zadanie było bardzo naturalne do zrównoleglenia (MCMC). Poszczególne węzły dostawały do "przerobienia" osobne łańcuchy. Komunikacja między węzłami była minimalna i rzadka w gruncie rzeczy ograniczała się do zbierania wyników na jednym z nich.Michał Bojanowski edytował(a) ten post dnia 25.10.10 o godzinie 15:33



Wyślij zaproszenie do