Qualche suggerimento per fare in modo che il codice R utilizzi più processori?


28

Ho R-script per leggere grandi quantità di dati CSV da diversi file e quindi eseguire attività di apprendimento automatico come svm per la classificazione.
Esistono librerie per l'utilizzo di più core sul server per R.
o
Qual è il modo più adatto per farlo?


Non vedo come il fatto che l'importazione di dati e l'esecuzione di SVM abbiano qualche rilevanza per la domanda. Ecco perché penso che sia più una domanda SO. Ma potrei vedere Xrif come una buona soluzione a lungo termine poiché è R ...
Shane

3
Non ho problemi con questo tipo di domande e risposte qui. R non è un linguaggio così tradizionale (come Python o Java) che un quant direbbe naturalmente "Oh, questa è una domanda di programmazione generale, quindi dovrei andare su StackOverflow o simili e chiedere questo o cercare soluzioni". In realtà è più una domanda per una mailing list R o un sito di gruppo. Per servire quegli analisti in erba che vogliono imparare R dovremmo essere contenti di avere una risposta anche qui.
Paolo

2
Vota per rimanere aperto; molto rilevante per gli statistici perché i modi in cui i nostri problemi possono o meno essere suddivisi in flussi paralleli sono rilevanti per la domanda che viene posta.
Russellpierce,

@chl: Grazie per avermi fatto conoscere. In effetti, ho verificato tutti i riferimenti non commerciali da questo thread poco dopo la sua comparsa, ma non sono riuscito a trovare nulla che funzioni su Win 7 x64.
whuber

1
whuber, la soluzione che presento funziona con win 7 ed è non commerciale (leggi il post che ho collegato per i dettagli). È in bundle con un ambiente commerciale ma può essere separato da esso (come il mio post mostra come). E il codice stesso è GPL ...
Tal Galili,

Risposte:


16

Se è su Linux, il più semplice è il multicore . Oltre a ciò, suggerisco di dare un'occhiata a MPI (specialmente con il pacchetto neve ).

Più in generale, dai un'occhiata a:

  1. La vista di calcolo ad alte prestazioni su CRAN.
  2. "Stato dell'arte nel calcolo parallelo con R"

Infine, ti consiglio di usare il pacchetto foreach per sottrarre il backend parallelo nel tuo codice. Ciò lo renderà più utile a lungo termine.


Uso principalmente il multicore, tuttavia mi piacciono le nevicate più della neve e Rmpi ​​per la sua tolleranza ai guasti e l'interfaccia pulita.

@mbq +1 per nevicate: consente di estrarre ulteriormente la neve e semplifica il calcolo parallelo con R.
Sharpie,


5

Shane ha ragione. Sia multicore che Rmpi sono vincitori.

Una copertura leggermente più ampia dell'argomento è nella Task View CRAN sul calcolo ad alte prestazioni . Questo si collega anche a un articolo di sondaggio abbastanza recente su Parallel Computing with R di JSS.

Infine, alcuni esempi pratici e suggerimenti sono nell'introduzione a HPC con R tutorial che do una volta ogni tanto - vedi la mia pagina delle presentazioni per la copia più recente della scorsa settimana su useR.


Bene, i mutex sono necessari. Mentre commentavo la tua risposta, ho visto solo la prima versione (grezza) e ho capito bene, potrei espandermi su mc e Rmpi. E poi l'hai fatto e sembro un imitatore. Così è la vita.
Dirk Eddelbuettel,

D'altra parte, la mia risposta deriva dalla lettura del tuo articolo / presentazione in passato. Quindi immagino che sto copiando anche te.
Shane,

5

Ho notato che le risposte precedenti mancano di alcune considerazioni generali HPC.
Prima di tutto, nessuno di questi pacchetti ti consentirà di eseguire un SVM in parallelo. Quindi, ciò che è possibile accelerare è l'ottimizzazione dei parametri o la convalida incrociata, tuttavia è necessario scrivere le proprie funzioni per questo. O ovviamente è possibile eseguire il lavoro per diversi set di dati in parallelo, se è un caso.
Il secondo problema è la memoria; se vuoi distribuire il calcolo su alcuni computer fisici, non c'è pranzo libero e devi copiare i dati - qui devi considerare se ha senso predistribuire una copia dei dati tra computer per salvare alcune comunicazioni. D'altra parte, se si desidera utilizzare più core su un computer, il multicore è particolarmente appropriato perché consente a tutti i processi figlio di accedere alla memoria del processo padre, in modo da poter risparmiare un po 'di tempo e molto spazio di memoria.


1
+1 Ottimo punto su come questo non affronti la suddivisione della convalida incrociata.
Shane,

Per inciso, ci sono stati alcuni lavori recenti (2013) per abilitare HPC per singoli SVM da dCSE ( hector.ac.uk/cse/distributedcse/reports/sprint03/… ). Esiste un pacchetto sprintper R con una funzione psvm, ma sono un po 'indietro per tenere il passo con le modifiche di R 3.0 e le nuove linee guida per l'invio di CRAN, quindi il download corrente non è né disponibile su CRAN né pienamente compatibile con R 3.0. Il tuo chilometraggio può variare.
stella luminosa del

3

Le risposte di Shane e Dirk sono esatte.

Tuttavia, potresti voler dare un'occhiata a una versione commerciale di R, chiamata Revolution R, costruita per gestire set di dati di grandi dimensioni e funzionare su più core. Questo software è gratuito per gli accademici (che potrebbe essere il tuo caso, non lo so)


5
Non sono d'accordo. Revolution fa un ottimo lavoro di vendita per ottenere mindshare (come evidenziato dal tuo post) ma al momento c'è molto poco nel prodotto che non avresti già ottenuto con la normale R (almeno su Linux). Intel MKL, certo, ma puoi ottenere Goto Blas. Su Windows, offrono doSMP che aiuta in quanto il multicore non può essere costruito lì.
Dirk Eddelbuettel,

2
Ma, naturalmente, doSMP è esattamente ciò che l'OP cercherebbe se funzionasse in un ambiente Windows.
Russellpierce,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.