Irgendwelche Vorschläge für die Verwendung mehrerer Prozessoren für R-Code?

28

Ich habe R-Skripte zum Lesen großer Mengen von CSV-Daten aus verschiedenen Dateien und führe dann maschinelle Lernaufgaben wie SVM zur Klassifizierung durch.
Gibt es Bibliotheken für die Verwendung mehrerer Kerne auf dem Server für R.
oder
Was ist der geeignetste Weg, um dies zu erreichen?

Mohans
quelle
Ich verstehe nur nicht, wie wichtig die Tatsache ist, dass Daten importiert werden und SVM ausgeführt wird. Deshalb denke ich, dass es eher eine SO-Frage ist. Aber ich könnte Xrefs als eine gute langfristige Lösung ansehen, da es R ...
Shane
3
Ich habe hier kein Problem mit solchen Fragen und Antworten. R ist keine Mainstream-Sprache (wie Python oder Java), die ein Quant natürlich sagen würde: "Oh, das ist eine allgemeine Programmierfrage, also sollte ich zu StackOverflow oder ähnlich gehen und dies fragen oder dort nach Lösungen suchen." Eigentlich handelt es sich eher um eine Frage für eine R-Mailingliste oder eine Gruppenseite. Um den angehenden Analysten zu dienen, die R lernen möchten, sollten wir auch hier eine Antwort haben.
Paul
2
Stimme ab, um offen zu bleiben; Für Statistiker sehr relevant, da die Art und Weise, in der unsere Probleme in parallele Ströme unterteilt werden können oder nicht, für die gestellte Frage von Bedeutung ist.
Russellpierce
@chl: Danke, dass du das angerempelt hast. Tatsächlich habe ich kurz nach dem Erscheinen alle nicht-kommerziellen Referenzen aus diesem Thread überprüft, konnte aber nichts finden, was auf Win 7 x64 funktioniert.
whuber
1
Die Lösung, die ich präsentiere, funktioniert mit Win 7 und ist nicht kommerziell (lesen Sie den Beitrag, auf den ich für Details verlinkt habe). Es ist mit einer kommerziellen Umgebung gebündelt, kann aber von dieser getrennt werden (wie mein Beitrag zeigt,). Und der Code selbst ist GPL ...
Tal Galili

Antworten:

16

Unter Linux ist Multicore am einfachsten . Darüber hinaus empfehle ich einen Blick auf MPI (vor allem mit dem Schneepaket ).

Im Allgemeinen werfen Sie einen Blick auf:

  1. Die High-Performance-Computing-Sicht auf CRAN.
  2. "Stand der Technik beim parallelen Rechnen mit R"

Zuletzt empfehle ich die Verwendung des foreach- Pakets, um das parallele Backend in Ihrem Code zu abstrahieren. Das wird es auf lange Sicht nützlicher machen.

Shane
quelle
Ich benutze hauptsächlich Multicore, trotzdem mag ich Schneefall mehr als Schnee und Rmpi ​​für seine Fehlertoleranz und saubere Schnittstelle.
@mbq +1 für Schneefall abstrahiert den Schnee noch weiter und vereinfacht die parallele Berechnung mit R erheblich.
Sharpie
6

Wenn Sie GNU / Linux verwenden, sind die vorherigen Antworten von Shane und Dirk großartig.

Wenn Sie eine Lösung für Windows benötigen, gibt es eine in diesem Beitrag:

Parallele Multicore-Verarbeitung mit R (unter Windows)

Obwohl das Paket noch nicht auf CRAN ist. es kann von diesem Link heruntergeladen werden.

Tal Galili
quelle
5

Shane ist richtig. Sowohl Multicore als auch Rmpi sind Gewinner.

Eine etwas breitere Darstellung des Themas finden Sie in der CRAN-Task-Ansicht für High-Performance-Computing . Dies ist auch ein Link zu einem relativ aktuellen Umfrageartikel zu Parallel Computing with R von JSS.

Abschließend finden Sie einige praktische Beispiele und Tipps in der Einführung zu HPC mit R, die ich gelegentlich gebe. Die neueste Ausgabe der letzten Woche bei useR finden Sie auf meiner Präsentationsseite .

Dirk Eddelbüttel
quelle
Nun, Mutexe benötigt. Als ich Ihre Antwort kommentierte, sah ich nur die erste (rohe) Version und dachte gut, ich kann auf mc und Rmpi ​​erweitern. Und dann hast du und ich sehe aus wie ein Nachahmer. So ist das Leben.
Dirk Eddelbuettel
Andererseits ist meine Antwort von der Lektüre Ihrer Arbeit / Präsentation in der Vergangenheit abgeleitet. Also kopiere ich dich wohl auch.
Shane
5

Mir ist aufgefallen, dass in den vorherigen Antworten einige allgemeine HPC-Überlegungen fehlen.
Zunächst einmal können Sie mit keinem dieser Pakete eine SVM parallel ausführen . Was Sie also beschleunigen können, ist die Parameteroptimierung oder die Kreuzvalidierung. Dafür müssen Sie jedoch Ihre eigenen Funktionen schreiben. Alternativ können Sie den Job auch für verschiedene Datensätze parallel ausführen, wenn dies der Fall ist.
Das zweite Problem ist die Erinnerung; Wenn Sie die Berechnung auf mehrere physische Computer verteilen möchten, gibt es kein kostenloses Mittagessen und Sie müssen die Daten kopieren. Hier müssen Sie überlegen, ob es sinnvoll ist, eine Kopie der Daten auf mehrere Computer zu verteilen, um etwas Kommunikation zu sparen. Wenn Sie jedoch mehrere Kerne auf einem Computer verwenden möchten, ist der Multicore besonders geeignet, da alle untergeordneten Prozesse auf den Speicher des übergeordneten Prozesses zugreifen können, sodass Sie Zeit und viel Speicherplatz sparen können.


quelle
1
+1 Toller Punkt, wie dies nicht mit der Aufteilung der Kreuzvalidierung zu tun hat.
Shane
Im Übrigen gab es in jüngster Zeit einige Arbeiten (2013) zur Aktivierung von HPC für einzelne SVMs durch dCSE ( hector.ac.uk/cse/distributedcse/reports/sprint03/… ). Es gibt ein Paket sprintfür R mit einer Funktion psvm, aber sie sind etwas in Verzug, wenn es darum geht, mit den R 3.0-Änderungen und den neuen CRAN-Übermittlungsrichtlinien Schritt zu halten, sodass der aktuelle Download weder auf CRAN verfügbar noch vollständig mit R 3.0 kompatibel ist. Ihr Kilometerstand kann variieren.
Heller Stern
3

Die Antworten von Shane und Dirk sind genau richtig.

Trotzdem sollten Sie sich eine kommerzielle Version von R ansehen, Revolution R, die für den Umgang mit großen Datenmengen und für die Ausführung auf mehreren Kernen entwickelt wurde. Diese Software ist für Akademiker kostenlos (was vielleicht Ihr Fall ist, weiß ich nicht)

Dave Kellen
quelle
5
Ich bin etwas anderer Meinung. Revolution leistet einen großartigen Verkaufsjob, wenn es darum geht, Mindshare zu bekommen (wie durch Ihren Beitrag belegt), aber im Moment gibt es sehr wenig in dem Produkt, das Sie mit dem normalen R nicht schon bekommen würden (zumindest unter Linux). Intel MKL, klar, aber Sie können Goto Blas bekommen. Unter Windows bieten sie doSMP an, was hilft, da dort kein Multicore erstellt werden kann.
Dirk Eddelbuettel
2
Aber doSMP ist natürlich genau das, wonach das OP suchen würde, wenn es in einer Windows-Umgebung arbeiten würde.
Russellpierce