Czy są jakieś sugestie dotyczące wykorzystania kodu R w wielu procesorach?


28

Mam skrypty R do odczytu dużych ilości danych csv z różnych plików, a następnie wykonuję zadania uczenia maszynowego, takie jak svm w celu klasyfikacji.
Czy są jakieś biblioteki do korzystania z wielu rdzeni na serwerze dla R.
lub
Jaki jest najbardziej odpowiedni sposób na osiągnięcie tego?


Po prostu nie rozumiem, w jaki sposób fakt, że importowanie danych i uruchamianie SVM ma jakikolwiek związek z pytaniem. Dlatego myślę, że to bardziej pytanie SO. Widziałem jednak Xrefs jako dobre długoterminowe rozwiązanie, ponieważ jest to R ...
Shane

3
Nie mam problemu z tego rodzaju pytaniami i odpowiedziami tutaj. R nie jest tak powszechnym językiem (jak Python lub Java), że kwantyfikator naturalnie powiedziałby: „Och, to jest ogólne pytanie programistyczne, więc powinienem przejść do StackOverflow lub podobnego i zapytać o to lub poszukać tam rozwiązań”. W rzeczywistości jest to raczej pytanie dotyczące listy mailingowej lub witryny grupy. Aby służyć tym początkującym analitykom, którzy chcą się uczyć R., powinniśmy również cieszyć się z odpowiedzi tutaj.
Paul

2
Głosuj, aby pozostać otwartym; bardzo istotne dla statystyk, ponieważ sposoby, w jakie nasze problemy mogą lub nie mogą zostać podzielone na równoległe strumienie, mają znaczenie dla zadawanego pytania.
russellpierce

@chl: Dzięki za podbicie tego. W rzeczywistości sprawdziłem wszystkie niekomercyjne odniesienia z tego wątku wkrótce po jego pojawieniu się, ale nie mogłem znaleźć niczego, co działałoby na Win 7 x64.
whuber

1
Whuber, rozwiązanie, które przedstawiam, działa z Win 7 i jest niekomercyjne (przeczytaj post, do którego odsyłam, aby uzyskać szczegółowe informacje). Jest dołączony do środowiska komercyjnego, ale można go od niego oddzielić (jak pokazuje mój post). A sam kod to GPL ...
Tal Galili

Odpowiedzi:


16

Jeśli jest na Linuksie, najprostszym jest wielordzeniowy . Poza tym proponuję rzucić okiem na MPI (szczególnie z pakietem śniegowym ).

Ogólniej, spójrz na:

  1. High-Performance Computing zobaczyć na CRAN.
  2. „Najnowocześniejszy w dziedzinie obliczeń równoległych z R”

Na koniec zalecamy użycie pakietu foreach w celu wyodrębnienia równoległego zaplecza w kodzie. To sprawi, że będzie bardziej przydatne na dłuższą metę.


Używam głównie rdzeni, wciąż lubię opady śniegu bardziej niż śnieg i Rmpi ​​ze względu na jego odporność na awarie i czysty interfejs.

@mbq +1 dla opadów śniegu - jeszcze bardziej abstrahuje śnieg i sprawia, że ​​obliczenia równoległe z R są bardzo proste.
Sharpie


5

Shane ma rację. Zarówno multicore, jak i Rmpi są zwycięzcami.

Nieco szerszy zakres tematu znajduje się w widoku zadań CRAN dotyczącym obliczeń o wysokiej wydajności . Odnosi się to również do dość niedawnego artykułu ankiety na temat przetwarzania równoległego z R z JSS.

Na koniec kilka praktycznych przykładów i wskazówek znajduje się we wstępie do HPC z samouczkiem R, który daję raz na jakiś czas - zobacz moją prezentację na najnowszą kopię z ostatniego tygodnia na useR.


Cóż, potrzebne były muteksy. Kiedy skomentowałem twoją odpowiedź, zobaczyłem tylko pierwszą (surową) wersję i dobrze zorientowałem się, że mogę rozwinąć się na mc i Rmpi. A potem to zrobiłeś i wyglądam jak naśladowca. Takie jest życie.
Dirk Eddelbuettel

Z drugiej strony moja odpowiedź pochodzi z lektury twojego artykułu / prezentacji w przeszłości. Więc chyba też cię kopiuję.
Shane

5

Zauważyłem, że w poprzednich odpowiedziach brakuje pewnych ogólnych rozważań HPC.
Po pierwsze, żaden z tych pakietów nie pozwoli na równoległe uruchomienie jednego SVM. Więc to, co możesz przyspieszyć, to optymalizacja parametrów lub walidacja krzyżowa, wciąż musisz do tego napisać własne funkcje. Lub oczywiście możesz uruchomić zadanie dla różnych zestawów danych równolegle, jeśli jest to przypadek.
Drugi problem to pamięć; jeśli chcesz rozłożyć kalkulację na kilka fizycznych komputerów, nie ma bezpłatnego lunchu i musisz skopiować dane - tutaj musisz rozważyć, czy rozsądnie jest wstępnie rozdzielić kopię danych między komputerami, aby zaoszczędzić trochę komunikacji. Z drugiej strony, jeśli chcesz używać wielu rdzeni na jednym komputerze, wielordzeniowy jest szczególnie odpowiedni, ponieważ umożliwia wszystkim procesom potomnym dostęp do pamięci procesu nadrzędnego, dzięki czemu możesz zaoszczędzić trochę czasu i dużo miejsca w pamięci.


1
+1 Świetna uwaga na temat tego, jak nie rozwiązuje to podziału weryfikacji krzyżowej.
Shane

Nawiasem mówiąc, ostatnio przeprowadzono pewne prace (2013) nad włączeniem HPC dla poszczególnych SVM przez dCSE ( hector.ac.uk/cse/distributcse/reports/sprint03/... ). Istnieje pakiet sprintdla R z funkcją psvm, ale są one trochę w tyle za nadążaniem za zmianami R 3.0 i nowymi wytycznymi dotyczącymi przesyłania CRAN, więc bieżące pobieranie nie jest dostępne w CRAN ani w pełni kompatybilne z R 3.0. Twój przebieg może się różnić.
jasna gwiazda

3

Odpowiedzi Shane'a i Dirka są natychmiastowe.

Niemniej jednak możesz rzucić okiem na komercyjną wersję R, zwaną Revolution R, która jest zbudowana do obsługi dużych zbiorów danych i działa na wielu rdzeniach. To oprogramowanie jest bezpłatne dla nauczycieli akademickich (co może być twoim przypadkiem, nie wiem)


5
Trochę się nie zgadzam. Revolution świetnie sobie radzi ze sprzedażą, zdobywając dostęp do mindshare (o czym świadczy Twój post), ale w tej chwili jest bardzo mało produktu, którego nie uzyskałbyś przy normalnym R (przynajmniej w Linuksie). Intel MKL, jasne, ale możesz dostać Goto Blas. W systemie Windows oferują doSMP, który pomaga, ponieważ nie można tam zbudować wielordzeniowego.
Dirk Eddelbuettel

2
Ale oczywiście doSMP jest dokładnie tym, czego OP szukałby, gdyby działały w środowisku Windows.
russellpierce
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.