Je suis en train d'ajuster des modèles de forêt aléatoire en utilisant des paquets caret et ranger, et en essayant d'accélérer en utilisant des processus parallèles. Cependant, le gain de vitesse est très faible. J'utilise un MacBook Pro (Retina, 13 pouces, fin 2013), 2,4 GHz Intel Core i5, 8 Go 1600 MHz DDR3, macOS Sierra 10.12. Un exemple reproductible:Gain de petite vitesse avec exécution parallèle de forêt aléatoire dans Macbook (avec R, caret)
library(caret)
library(mlbench)
data("Sonar")
start <- Sys.time()
mod_1 <- train(Class ~ ., data = Sonar, method = "ranger", num.trees = 10000)
stop <- Sys.time()
duration1 <- stop - start
duration1
Cela s'exécute en 3,47 minutes. Pendant ce temps, dans le Moniteur d'activité, je vois un processus R avec une utilisation du processeur d'environ 300-330%. Maintenant le parallèle:
library(parallel)
library(doParallel)
cluster <- makeCluster(detectCores() - 1)
registerDoParallel(cluster)
start <- Sys.time()
mod_2 <- train(Class ~ ., data = Sonar, method = "ranger", num.trees = 10000)
stop <- Sys.time()
duration2 <- stop - start
duration2
Ceci s'exécute en 3.06 minutes. Au cours d'eux, dans le moniteur d'activité, je vois 3 processus R chacun avec l'utilisation du processeur autour de 100-120%. J'ai également testé le paquetage doMC suggéré dans la documentation du caret (http://topepo.github.io/caret/parallel-processing.html), qui a pris 3,10 minutes. Ce gain de vitesse est beaucoup plus petit que ce à quoi je m'attendais, à partir des parcelles de la documentation du caret. Des idées?
sessionInfo:
R version 3.3.2 (2016-10-31)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: macOS Sierra 10.12
locale:
[1] en_CA.UTF-8/en_CA.UTF-8/en_CA.UTF-8/C/en_CA.UTF-8/en_CA.UTF-8
attached base packages:
[1] parallel stats graphics grDevices utils datasets methods base
other attached packages:
[1] doParallel_1.0.10 ranger_0.6.0 e1071_1.6-7 doMC_1.3.4 iterators_1.0.8
[6] foreach_1.4.3 mlbench_2.1-1 caret_6.0-73 ggplot2_2.2.1 lattice_0.20-34
loaded via a namespace (and not attached):
[1] Rcpp_0.12.9 magrittr_1.5 splines_3.3.2 MASS_7.3-45 munsell_0.4.3
[6] colorspace_1.3-2 minqa_1.2.4 stringr_1.1.0 car_2.1-4 plyr_1.8.4
[11] tools_3.3.2 nnet_7.3-12 pbkrtest_0.4-6 grid_3.3.2 gtable_0.2.0
[16] nlme_3.1-130 mgcv_1.8-16 quantreg_5.29 class_7.3-14 MatrixModels_0.4-1
[21] lme4_1.1-12 lazyeval_0.2.0 assertthat_0.1 tibble_1.2 Matrix_1.2-8
[26] nloptr_1.0.4 reshape2_1.4.2 ModelMetrics_1.1.0 codetools_0.2-15 stringi_1.1.2
[31] compiler_3.3.2 scales_0.4.1 stats4_3.3.2 SparseM_1.74
Mise à jour: Après réponse par slonopotam, j'ai testé les mêmes modèles ci-dessus avec le paquet forêt d'arbres décisionnels (version 4,6 à 12). Courir séquentiellement (pas parallèle) il a fallu 8,14 minutes. Pendant ce temps, dans le moniteur d'activité, je vois un processus R avec CPU 95-100%. Courir en parallèle, il a fallu 3,72 minutes, au cours de laquelle il y avait 3 processus R chacun avec CPU 95-100%. Ajout de cette information juste pour l'achèvement. Merci, slonopotam!