我在一个位于32核心服务器上的ubuntu LXC容器中运行R.我使用插入符号包运行并行随机森林模型,使用不同数量的核心:
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服务器中还是在控制台中运行计算,此行为都是相同的。我有一个同事的代码,他之前能够使用所有32个内核运行此计算而没有错误。我认为Rstudio Server可能泄漏了内存,但我无法找到证据。 (运行rm()
和gc()
也没有帮助。)
知道可能导致这些错误的原因吗?