【发布时间】:2023-03-15 13:04:02
【问题描述】:
我正在设置一段代码,以使用foreach 并行处理我的数据中 N 组的一些计算。
我有一个涉及调用 h2o.gbm 的计算。
在我当前的顺序设置中,我使用了大约 70% 的 RAM。
如何在并行代码中正确设置 h2o.init()?我担心使用多核时可能会耗尽内存。
我的 Windows 10 机器有 12 个内核和 128GB 的 RAM。
这样的伪代码会起作用吗?
library(foreach)
library(doParallel)
#setup parallel backend to use 12 processors
cl<-makeCluster(12)
registerDoParallel(cl)
#loop
df4 <-foreach(i = as.numeric(seq(1,999)), .combine=rbind) %dopar% {
df4 <- data.frame()
#bunch of computations
h2o.init(nthreads=1, max_mem_size="10G")
gbm <- h2o.gbm(train_some_model)
df4 <- data.frame(someoutput)
}
fwrite(df4, append=TRUE)
stopCluster(cl)
【问题讨论】:
-
这是两种并行计算模式,显式和隐式。可以参考博客here
-
谢谢@Patric。你对这个问题有什么建议?显式还是隐式?
-
我想你想混合这两种模式。如果不是真的需要,尤其是在本地机器上,我不建议这样做,因为它会导致潜在的功能和性能问题,并且很难调试。
-
而且隐式解决方案将非常容易和稳定,即使它可能无法达到最高性能。我建议你先试试。
-
@Patric 你也愿意写答案吗?
标签: r memory foreach parallel-processing h2o