在 Macbook 中并行执行随机森林的小速度增益(使用 R,插入符号)
Posted
技术标签:
【中文标题】在 Macbook 中并行执行随机森林的小速度增益(使用 R,插入符号)【英文标题】:Small speed gain with parallel execution of random forest in Macbook (using R, caret) 【发布时间】:2017-07-23 19:12:52 【问题描述】:我正在使用包 caret 和 ranger 拟合随机森林模型,并尝试使用并行进程来加速。但是速度增益非常小。我使用的是 MacBook Pro(Retina,13 英寸,2013 年末)、2.4 GHz Intel Core i5、8 GB 1600 MHz DDR3、macOS Sierra 10.12。一个可重现的例子:
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
运行时间为 3.47 分钟。在此期间,在活动监视器中,我看到一个 R 进程的 CPU 使用率约为 300-330%。现在平行:
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
运行时间为 3.06 分钟。在此期间,在活动监视器中,我看到 3 个 R 进程,每个进程的 CPU 使用率约为 100-120%。我还测试了插入符号文档 (http://topepo.github.io/caret/parallel-processing.html) 中建议的 doMC 包,耗时 3.10 分钟。从插入符号文档中的图表来看,这个速度增益比我预期的要小得多。有什么想法吗?
会话信息:
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
更新: 在 slonopotam 响应后,我使用包 randomForest(版本 4.6-12)测试了上述相同的模型。顺序运行(非并行)耗时 8.14 分钟。在此期间,在活动监视器中,我看到一个 CPU 为 95-100% 的 R 进程。并行运行耗时 3.72 分钟,期间有 3 个 R 进程,每个进程的 CPU 为 95-100%。添加此信息只是为了完成。谢谢,slonopotam!
【问题讨论】:
【参考方案1】:您使用的包“游侠”确实具有内部多线程支持。这就是为什么您在第一种情况下观察到 CPU 使用率约为 300..330% - 这意味着它已经使用至少 3 个内核进行训练。
使用 doParallel 时,使用的是多处理而不是多线程,但训练中使用的计算资源总数几乎相同,因此您看不到多少收益。
【讨论】:
以上是关于在 Macbook 中并行执行随机森林的小速度增益(使用 R,插入符号)的主要内容,如果未能解决你的问题,请参考以下文章