我在 ubuntu LXC 容器中运行 R,该容器位于具有 32 个内核的服务器上。我正在使用 caret 包运行并行随机森林模型,使用不同数量的内核:
cl = makeCluster(c(rep("localhost",cores)), outfile = "")
registerDoParallel(cl,cores = cores)
rf_train <- train(gt~.,data=training,
method='parRF', tuneGrid = data.frame(mtry = 7), na.action = na.omit,
trControl=trainControl(method='repeatedcv',number=10,
classProbs = TRUE, allowParallel = TRUE)
)
stopCluster(cl)
当我使用cores <- 1
它时,它以串行方式运行,没有错误。
当我使用时,在cores <- 2
运行之前我不会出错stopCluster(cl)
,此时我得到:
Warning message:
executing %dopar% sequentially: no parallel backend registered
Warning message:
executing %dopar% sequentially: no parallel backend registered
(请注意,这是在该过程已经成功完成之后,并行,如 确认top
。)
如果我使用cores <- 4
或更多,除了在我停止集群时对每个核心重复上述警告之外,我还会
Error in unserialize(socklist[[n]]) : error reading from connection
在计算完成之前得到。
无论我是在 Rstudio Server 中还是在控制台中运行计算,这种行为都是相同的。我从我的一位同事那里得到了这段代码,他以前能够使用所有 32 个内核运行此计算而没有错误。我认为可能是 Rstudio Server 泄漏了内存,但我找不到证据。(跑步rm()
也gc()
无济于事)。
知道什么可能导致这些错误吗?