Optymalizacja R dlaczego warto przesi ± si na Linuxa? 19 listopada 2014
Wi cej informacji, wraz z dodatkowymi materiaªami mo»na znale¹ w repozytorium na GitHubie pod adresem https://github.com/zzawadz/ Prezentacja_ERKA_2014. Ewentualne uwagi i pytania mo»na kierowa na adres zawadzkizygmunt@gmail.com.
Rzecz o szybko±ci R R taki wolny... Rysunek : ródªo: http://julialang.org/... inne j zyki takie szybkie (oprócz Matlaba). rly?
Rzecz o szybko±ci R - cd. Rzeczywi±cie R nie jest demonem szybko±ci i mo»na pisa w nim BARDZO nieefektywny kod: library(microbenchmark) x = 1:10000 slow_sum = function(x) { sum = 0 for(i in 1:length(x)) sum = sum + x[i] sum } microbenchmark(sum(x), slow_sum(x)) ## Unit: microseconds ## expr min lq mean median uq ma ## sum(x) 12.320 12.5055 15.49794 16.530 18.1945 22.4 ## slow_sum(x) 4159.101 4271.8230 4642.03785 4395.957 5066.3590 6043.6 ## neval ## 100 ## 100
Dobrym pytaniem byªoby - "ale dlaczego R jest taki wolny?" R w zamierzeniach nie musiaª by demonem szybko±ci. R, a w zasadzie jego poprzednik S, miaª by gªównie interfacem do kodu fortranowego (ewentualnie innego j zyka). A sam interface nie musi by bardzo szybki, bylby tylko byª wygodny. Wi cej - https://www.youtube.com/watch?v=_hcpurb5ngs - prezentacja twórcy j zyka S - Johna Chambersa (równie» czªonka R Core Team), na tamat przeszªo±ci i przyszªo±ci R.
Zagadka! W R wyst puj trzy gªówne operatory wyªuskania warto±ci: x[1] x[[1]] x$a Sam R zostaª napisany w C. Pytanie brzmi: ile linijek kodu ma plik w którym te operatory s zdeniowane?
Zagadka! Rozwi zanie. Plik ten mo»na znale¹ w ¹ródªach R w /src/main/subset.c. Posiada on 1288 linijek... Tyle kodu ma jednak sens - w nim zawarte jest mi dzy innymi obsªugiwanie cz ±ciwego dopasowywania nazw w li±cie: x = list(dluga_nazwa = 1:5, inna_nazwa = 1:5) x$dlu # dziala! ## [1] 1 2 3 4 5 Ma to jednak oczywiste konsekwencje wydajno±ciowe.
Realizacja idei interface w praktyce - obliczenia macierzowe W praktyce jednak wydajno± R nie jest znacz cym problemem - w ko«cu miaª by gªównie interfacem dla innych j zyków i bardzo du»o kodu w R sªu»y jedynie wywoªaniu okre±lonej biblioteki, która wykonuje najci»sze obliczenia. Np. funckja eigen - sªu» ca obliczaniu warto±ci wªasnych i wektorów wªasnych korzysta z biblioteki do oblicze«macierzowych LAPACK (Linear Algebra PACKage), która zostaªa napisana w Fortranie. Mo»na to pozna po tym,»e wewn trz funkcji znajduje si linijka wywoªuj ca kod zewn trzny:.internal(la_rs(x, only.values)) # z eigen.call(...) # inny interface - do C i C++.External(...).C(...) # stary interface do C Denicj La_rs mo»na znale¹ w /src/modules/lapack/lapack.c, a szukaj c dalej w tym folderze mo»na równie» znale¹ kod fortranowy Lapack'a (ok 200k linii kodu - du»a rzecz...).
Lapack i BLAS Gdyby wej± gª biej, oka»e si,»e LAPACK (kod fortranowy), korzysta z implementacji BLASu zawieraj cej zbiór podstawowych operacji na macierzach takich jak np. mno»enie macierzowe. Sam BLAS to API (Application Programming Interface), opisuj ce jak powinna wygl da biblioteka do oblicze«macierzowych. Na podstawie tego opisu tworzy si implementacje które realizuj ce te obliczenia. Istnieje kilka implementacji BLASu - np. ATLAS, MKL i OpenBLAS. R równie» posiada swoj implementacj, jednak nie jest ona najszybsza...
... skoro ten standardowy R-owy BLAS nie jest najszybszy, to mo»e go podmieni na wydajniejszy?
... skoro ten standardowy R-owy BLAS nie jest najszybszy, to mo»e go podmieni na wydajniejszy? Zaraz b dzie opis jak to prosto zrobi na Linuxie...
... skoro ten standardowy R-owy BLAS nie jest najszybszy, to mo»e go podmieni na wydajniejszy? Zaraz b dzie opis jak to prosto zrobi na Linuxie...... ale co± za du»o tekstu w tej prezentacji. Dalszy tekst b dzie nudny...
... skoro ten standardowy R-owy BLAS nie jest najszybszy, to mo»e go podmieni na wydajniejszy? Zaraz b dzie opis jak to prosto zrobi na Linuxie...... ale co± za du»o tekstu w tej prezentacji. Dalszy tekst b dzie nudny...... mo»e by tak pokaza na»ywo, jak to si robi? Caªe dziaªanie wzorowane jest na wpisie z http://www.stat.cmu.edu/~nmv/2013/07/09/ for-faster-r-use-openblas-instead-better-than-atlas-trivial
... skoro ten standardowy R-owy BLAS nie jest najszybszy, to mo»e go podmieni na wydajniejszy? Zaraz b dzie opis jak to prosto zrobi na Linuxie...... ale co± za du»o tekstu w tej prezentacji. Dalszy tekst b dzie nudny...... mo»e by tak pokaza na»ywo, jak to si robi? Caªe dziaªanie wzorowane jest na wpisie z http://www.stat.cmu.edu/~nmv/2013/07/09/ for-faster-r-use-openblas-instead-better-than-atlas-trivial Czas na konsol!
... mam nadziej,»e prezentacja optymalizacji BLAS na»ywo si udaªa.
... mam nadziej,»e prezentacja optymalizacji BLAS na»ywo si udaªa. Je»eli tak, to znaczy,»e konsola nie jest taka straszna i mo»na w niej troszk poczarowa :)
Co dalej? Nie dawno Revolution Analytics wprowadziªo swoj wersj R (http://mran.revolutionanalytics.com/download/), która wykorzystuje MKL - czyli BLAS stworzony przez Intela - jest on naprawd szybki i by mo»e sztuczka z podmian R-owego BLAS-a przestaje mie jakiekolwiek znaczenie w przypadku u»ywania wersji od Revolution. Trzeba to sprawdzi!
Dlaczego warto przej± na Linuxa? System bardzo konsolowy - a co za tym idzie - bli»szy R. Nie ma Oce:) Czasem dosy problematyczny, a co za tym idzie frustruj cy (a to dobrze! http://youtu.be/jxwxefrau70?t=30m - wywiad z jednym z mistrzów R, nt. warto±ci frustracji).
Dzi kuj za uwag!