web-dev-qa-db-fra.com

Paquet R qui utilise automatiquement plusieurs cœurs?

J'ai remarqué que R n'utilise qu'un seul noyau lors de l'exécution de l'un de mes programmes, ce qui nécessite de nombreux calculs. J'aimerais profiter de mon processeur multicœur pour accélérer l'exécution de mon programme. Je n’ai pas encore approfondi la question, mais j’aimerais profiter de vos commentaires car je n’ai pas de bonnes connaissances en informatique et il m’est difficile d’obtenir des informations facilement compréhensibles sur ce sujet.

Existe-t-il un package permettant à R d’utiliser automatiquement plusieurs cœurs en cas de besoin?

Je suppose que ce n'est pas si simple.

63
Marco

R ne peut utiliser plusieurs cœurs qu’à l’aide de packages complémentaires, et uniquement pour certains types d’opérations. Les options sont discutées en détail dans le Vue des tâches du calcul haute performance sur le CRAN

Mise à jour: À partir de la version 2.14.0, les packages complémentaires ne sont pas obligatoirement requis, du fait de l'inclusion du parallèle . Le paquet en tant que paquet recommandé livré avec R. parallèle inclut des fonctionnalités à partir de paquets multicore et snow , pratiquement inchangés.

49
Gavin Simpson

Le moyen le plus simple de tirer parti des multiprocesseurs est le package multicore, qui inclut la fonction mclapply (). mclapply () est une version multicœur de lapply (). Ainsi, tout processus pouvant utiliser lapply () peut être facilement converti en un processus mclapply (). Cependant, le multicœur ne fonctionne pas sous Windows. J'ai écrit un article sur ce blog l'année dernière qui pourrait être utile. Le package créé par Revolution Analytics, doSMP , N'EST PAS une version multithread de R. Il s'agit en fait d'une version Windows de la technologie multicœur.

Si votre travail est parallèlement embarrassant , il est judicieux de vous familiariser avec le type de structuration lapply (). Cela vous facilitera la transition entre mclapply () et même l’informatique distribuée utilisant la même abstraction.

Les choses deviennent beaucoup plus difficiles pour des opérations qui ne sont pas "parallèlement embarrassantes".

[MODIFIER]

En passant, Rstudio devient de plus en plus populaire en tant que front-end pour R. J'aime Rstudio et l’utilise quotidiennement. Cependant, il faut noter que Rstudio ne joue pas à Nice avec Multicore (au moins à partir d’octobre 2011 ... Je crois comprendre que l’équipe de RStudio va régler ce problème). Cela est dû au fait que Rstudio fait des forks dans les coulisses et que ces fourches sont en conflit avec les tentatives de Multicore. Donc, si vous avez besoin de Multicore, vous pouvez écrire votre code dans Rstuido, mais l'exécuter dans une session Plain-Jane R.

33
JD Long

Sur cette question, vous obtenez toujours des réponses très courtes. La solution la plus simple selon moi est le package chute de neige , basé sur la neige. C'est-à-dire sur un seul ordinateur Windows avec plusieurs cœurs. Voir aussi ici le article de Knaus et al pour un exemple simple. Snowfall encapsule le paquet neige et vous permet de configurer un multicœur avec quelques commandes. C'est certainement moins compliqué que la plupart des autres packages (je ne les ai pas tous essayés).

En résumé, il n’ya en effet que peu de tâches pouvant être parallélisées, pour la simple raison qu’il faut pouvoir séparer les tâches avant que le calcul multicœur ne soit logique. la famille apply est évidemment un choix logique pour cela: calculs multiples indépendants , ce qui est crucial pour une utilisation multicœur. Tout le reste n'est pas toujours aussi facilement multicœur.

Lisez aussi cette discussion sur fonctions sfApply et personnalisées .

15
Joris Meys

Microsoft R Open comprend des bibliothèques mathématiques multithreads pour améliorer les performances de R.Il fonctionne sous Windows/Unix/Mac, quel que soit le type de système d'exploitation utilisé. Il est open source et peut être installé dans un répertoire séparé si vous avez une installation existante de R (from CRAN). Vous pouvez utiliser le populaire IDE Rstudio également avec this.À compter de sa création, R a été conçu pour utiliser un seul thread (processeur) à la fois. Même de nos jours, R fonctionne de cette manière, sauf si elle est liée à Bibliothèques BLAS/LAPACK.

Les machines multicœurs d’aujourd’hui offrent une puissance de traitement parallèle. Pour en tirer parti, Microsoft R Open inclut des bibliothèques de mathématiques multithreads. Ces bibliothèques permettent à de nombreuses opérations R courantes, telles que multiplication/inverse de matrice, décomposition de matrice et certaines opérations de matrice de niveau supérieur, de calculer en parallèle et d'utiliser toute la puissance de traitement disponible pour réduire les temps de calcul.

Veuillez vérifier le lien ci-dessous:

https://mran.revolutionanalytics.com/rro/#about-rro

http://www.r-bloggers.com/using-Microsoft-r-open-with-rstudio/

9
pmr

Comme David Heffernan l'a dit, jetez un coup d'œil au blog de revolution Analytics. Mais sachez que la plupart des paquets sont pour Linux. Donc, si vous utilisez Windows, ce sera beaucoup plus difficile. Quoi qu'il en soit, jetez un oeil à ces sites:

Revolution . Vous trouverez ici une conférence sur la parallélisation en R. La conférence est en fait très bonne, mais, comme je l’ai dit, la plupart des astuces concernent Linux.

Et ce fil ici à Stackoverflow va discuter de certaines implémentations dans Windows.

4
Manoel Galdino

Le paquetage future simplifie extrêmement le travail dans R en utilisant un traitement parallèle et distribué. Plus d'infos ici . Si vous souhaitez appliquer une fonction à des éléments en parallèle, le package future.apply fournit un moyen rapide d'utiliser les fonctions de la famille "apply" (par exemple, apply(), lapply() et vapply()) en parallèle.

Exemple:

library("future.apply")
library("stats")
x <- 1:10

# Single core
  y <- lapply(x, FUN = quantile, probs = 1:3/4)

# Multicore in parallel
  plan(multiprocess)
  y <- future_lapply(x, FUN = quantile, probs = 1:3/4)

1
rafa.pereira