exécution parallèle de la forêt aléatoire dans R

Je cours une forêt aléatoire en R en parallèle

library(doMC)
registerDoMC()
x <- matrix(runif(500), 100)
y <- gl(2, 50)

Exécution parallèle (a pris 73 sec)

rf <- foreach(ntree=rep(25000, 6), .combine=combine, .packages='randomForest') %dopar%
randomForest(x, y, ntree=ntree) 

Exécution séquentielle (a pris 82 sec)

rf <- foreach(ntree=rep(25000, 6), .combine=combine) %do%
randomForest(x, y, ntree=ntree) 

En exécution parallèle, la génération d'arbre est assez rapide comme 3-7 sec, mais le reste du temps est consommé en combinant les résultats (option combine). Donc, sa seule valeur pour exécuter l'exécution parallèle est le nombre d'arbres sont vraiment élevés. Est-il possible de modifier l'option "Combiner" pour éviter tout calcul à chaque nœud dont je n'ai pas besoin et le rendre plus rapide

PS. Ci-dessus est juste un exemple de données. En vrai, j'ai des milliers de fonctionnalités 100 pour quelques observations 100.

23
demandé sur Steve Weston 2013-01-01 00:58:05

5 réponses

Paramètre .multicombine à TRUE peut faire une différence significative:

rf <- foreach(ntree=rep(25000, 6), .combine=combine, .multicombine=TRUE,
              .packages='randomForest') %dopar% {
    randomForest(x, y, ntree=ntree)
}

Cela provoque l'appel de combine Une fois plutôt que cinq fois. Sur mon ordinateur de bureau, cela fonctionne en 8 secondes plutôt que 19 secondes.

28
répondu Steve Weston 2013-04-02 18:22:10

Savez-vous que le paquet caret peut faire beaucoup de la main pour les courses parallèles (ainsi que la préparation des données, les résumés, ...) pour vous?

En fin de Compte, bien sûr, s'il reste des opérations coûteuses dans le calcul de la forêt aléatoire lui-même, il y a peu que vous pouvez faire car Andy a passé quelques années à l'améliorer. Je m'attendrais à ce que peu ou pas de fruits à faible pendaison soient là pour la cueillette...

11
répondu Dirk Eddelbuettel 2012-12-31 21:04:44

H20 paquet peut être utilisé pour résoudre votre problème.

Selon H20 documentation la page H2O est " l'open source moteur mathématique pour big data qui calcule parallèle distribué algorithmes d'apprentissage automatique tels que les modèles linéaires généralisés, machines de stimulation de gradient, forêts aléatoires et réseaux de neurones (Deep learning) dans divers environnements de cluster."

Implémentation aléatoire de la forêt en utilisant H2O:

Https://www.analyticsvidhya.com/blog/2016/05/h2o-data-table-build-models-large-data-sets/

4
répondu Ashok Krishna 2016-09-21 08:49:33

Je me demande si le code parallelRandomForest vous serait utile?

Selon l'auteur, il a couru environ 6 fois plus vite sur son jeu de données avec 16 fois moins de consommation de mémoire.

SPRINT a également une implémentation parallèle ici .

3
répondu Richard 2015-10-16 17:31:56

En fonction de votre CPU, vous pourriez probablement obtenir une accélération de 5% à 30% En choisissant le nombre de tâches correspondant à votre nombre de cœurs enregistrés correspondant au nombre de cœurs logiques du système. (parfois, il est plus efficace de faire correspondre le nombre de cœurs physiques du système). Si vous avez un ordinateur portable Intel Dual-core générique avec Hyper Threading (4 cœurs logiques), DoMC a probablement enregistré un cluster de 4 cœurs. Ainsi, 2 cœurs seront inactifs lorsque les itérations 5 et 6 sont calculées plus le temps supplémentaire de démarrage/arrêt de deux supplémentaires Jobs. Il serait plus efficace de faire seulement 2-4 emplois de plus d'arbres.

1
répondu Soren Havelund Welling 2015-04-01 13:41:56