Des suggestions pour que le code R utilise plusieurs processeurs?

28

J'ai des scripts R pour lire de grandes quantités de données csv à partir de différents fichiers, puis effectuer des tâches d'apprentissage automatique telles que svm pour la classification.
Existe-t-il des bibliothèques permettant d'utiliser plusieurs cœurs sur le serveur pour R.
ou
Quel est le moyen le plus approprié pour y parvenir?

Mohans
la source
Je ne vois tout simplement pas en quoi le fait que l'importation de données et l'exécution de SVM aient un rapport avec la question. C'est pourquoi je pense que c'est plus une question SO. Mais je pouvais voir les Xrefs comme une bonne solution à long terme puisqu'il s'agit de R ...
Shane
3
Je n'ai aucun problème avec ce genre de questions et réponses ici. R n'est pas un langage si courant (comme Python ou Java) qu'un quant dirait naturellement: "Oh, c'est une question de programmation générale, donc je devrais aller sur StackOverflow ou similaire et lui demander ou chercher des solutions". En fait, c'est plus une question pour une liste de diffusion R ou un site de groupe. Pour servir les analystes en herbe qui veulent apprendre R, nous devrions également être heureux d'avoir une réponse ici.
Paul
2
Votez pour rester ouvert; très pertinent pour les statisticiens, car la manière dont nos problèmes peuvent ou non être décomposés en flux parallèles est pertinente pour la question posée.
russellpierce
@chl: Merci d'avoir augmenté cela. En fait, j'ai vérifié toutes les références non commerciales de ce fil peu de temps après son apparition, mais je n'ai rien trouvé qui fonctionne sur Win 7 x64.
whuber
1
whuber, la solution que je présente fonctionne avec win 7 et n'est pas commerciale (lire le post auquel j'ai lié pour plus de détails). Il est intégré à un environnement commercial mais il peut en être séparé (comme mon article le montre). Et le code lui-même est GPL ...
Tal Galili

Réponses:

16

Si c'est sous Linux, le plus simple est le multicœur . Au-delà de cela, je suggère de jeter un œil à MPI (en particulier avec le forfait neige ).

Plus généralement, jetez un œil à:

  1. La vue Calcul Haute Performance sur CRAN.
  2. "État de l'art du calcul parallèle avec R"

Enfin, je recommande d'utiliser le package foreach pour résumer le backend parallèle dans votre code. Cela le rendra plus utile à long terme.

Shane
la source
J'utilise principalement le multicœur, j'aime toujours plus la neige que la neige et Rmpi ​​pour sa tolérance aux pannes et son interface claire.
@mbq +1 pour les chutes de neige - résume encore plus la neige et rend le calcul parallèle avec R assez simple.
Sharpie
6

Si vous utilisez GNU / Linux, les réponses précédentes de Shane et Dirk sont excellentes.

Si vous avez besoin d'une solution pour Windows, il y en a une dans ce post:

Traitement multicœur parallèle avec R (sous Windows)

Bien que le package ne soit pas encore sur CRAN. il peut être téléchargé à partir de ce lien.

Tal Galili
la source
5

Shane a raison. Le multicœur et le Rmpi sont tous deux gagnants.

La couverture du sujet est légèrement plus large dans la vue des tâches du CRAN sur le calcul haute performance . Cela renvoie également à un article d'enquête assez récent sur le calcul parallèle avec R de JSS.

Enfin, quelques exemples pratiques et conseils se trouvent dans le didacticiel d' introduction au HPC avec R que je donne de temps en temps - voir ma page de présentations pour la copie la plus récente de la semaine dernière sur useR.

Dirk Eddelbuettel
la source
Eh bien, des mutex étaient nécessaires. Comme j'ai commenté votre réponse, je n'ai vu que la première version (brute) et j'ai bien compris, je peux développer sur mc et Rmpi. Et puis vous l'avez fait et je ressemble à un imitateur. C'est la vie.
Dirk Eddelbuettel
D'un autre côté, ma réponse découle de la lecture de votre article / présentation dans le passé. Je suppose donc que je vous copie également.
Shane
5

J'ai remarqué que les réponses précédentes manquent de considérations HPC générales.
Tout d'abord, aucun de ces packages ne vous permettra d'exécuter un SVM en parallèle. Donc, ce que vous pouvez accélérer est l'optimisation des paramètres ou la validation croisée, vous devez toujours écrire vos propres fonctions pour cela. Ou bien sûr, vous pouvez exécuter le travail pour différents jeux de données en parallèle, si c'est le cas.
Le deuxième problème est la mémoire; si vous voulez répartir le calcul sur quelques ordinateurs physiques, il n'y a pas de déjeuner gratuit et vous devez copier les données - ici, vous devez considérer s'il est logique de prédistribuer une copie des données sur les ordinateurs pour économiser la communication. D'un autre côté, si vous souhaitez utiliser plusieurs cœurs sur un ordinateur, le multicœur est particulièrement approprié car il permet à tous les processus enfants d'accéder à la mémoire du processus parent, ce qui vous permet d'économiser du temps et beaucoup d'espace mémoire.


la source
1
+1 Excellent point sur la façon dont cela ne traite pas de la séparation de la validation croisée.
Shane
Soit dit en passant, des travaux récents (2013) ont permis d'activer le HPC pour les SVM individuels par dCSE ( hector.ac.uk/cse/distributedcse/reports/sprint03/… ). Il existe un package sprintpour R avec une fonction psvm, mais ils sont un peu en retard pour suivre les modifications de R 3.0 et les nouvelles directives de soumission de CRAN, donc le téléchargement actuel n'est ni disponible sur CRAN ni entièrement compatible avec R 3.0. Votre kilométrage peut varier.
étoile brillante
3

Les réponses de Shane et Dirk sont parfaites.

Néanmoins, vous voudrez peut-être jeter un œil à une version commerciale de R, appelée Revolution R, qui est conçue pour gérer des ensembles de données volumineux et fonctionner sur plusieurs cœurs. Ce logiciel est gratuit pour les universitaires (ce qui pourrait être votre cas, je ne sais pas)

Dave Kellen
la source
5
Je suis un peu en désaccord. Revolution fait un excellent travail de vente pour obtenir la part de l'esprit (comme en témoigne votre message), mais pour le moment, il n'y a pas grand-chose dans le produit que vous n'auriez déjà avec le R normal (au moins sous Linux). Intel MKL, bien sûr, mais vous pouvez obtenir Goto Blas. Sous Windows, ils proposent doSMP, ce qui est utile car le multicœur ne peut pas y être construit.
Dirk Eddelbuettel
2
Mais, bien sûr, doSMP est exactement ce que l'OP rechercherait s'il fonctionnait dans un environnement Windows.
russellpierce