我正在运行一个有大约 12 名学习者的 mlr 基准测试。当我不使用 parallelMap 时,我的代码运行没有任何问题,但是一旦我添加并行化,它就会静默崩溃,总是在同一点,即使只有 2 个内核。
我认为它一定是内存不足,所以我重新构建了我的代码以使用尽可能少的内存
- 设置种子,然后一次只对一个学习者调用基准测试
- 将基准调用放在嵌套函数中,以便释放基准返回的对象使用的内存。
然而,这并没有帮助。它总是在调整随机森林变量重要性过滤器期间崩溃,但它在此之前成功地对随机森林进行了基准测试。以下是相关的代码片段:
parallelStart(mode="multicore", cpus=2, level="mlr.resample", show.info = TRUE, logging=TRUE, storagedir='/home/annette/Experiments/Logs_new')
set.seed(24601, "L'Ecuyer")
cox.filt.rsfrc.lrn = makeTuneWrapper(
makeFilterWrapper(
makeLearner(cl=base_learner, id = "cox.filt.rfsrc", predict.type="response"),
fw.method="randomForestSRC_importance",
cache=TRUE
),
resampling = inner,
par.set = makeParamSet(makeNumericParam("fw.perc", lower=0.01, upper=0.5)),
control = makeTuneControlRandom(maxit=20),
show.info = TRUE)
bmr = benchmark(cox.filt.rsfrc.lrn, surv.task, outer, surv.measures, show.info = TRUE, models=TRUE, keep.extract=FALSE)
日志中没有异常。在此返回之前对 gc() 的最后一次调用:
Garbage collection 55 = 23+3+29 (level 2) ...
110.3 Mbytes of cons cells used (61%)
27.2 Mbytes of vectors used (14%)
如果我仅通过并行化运行 RF varimp 滤波器,它就会成功。我尝试将以下内容添加到 .Renviron 但没有帮助:
R_NSIZE = 100M
R_VSIZE = 50M
任何人都可以建议我如何解决这个问题,或者至少我可以如何找到有关出了什么问题的更多信息?
编辑:
感谢下面@pat-s 的评论,我意识到 R 进程并没有崩溃,而是处于空闲状态。因此,我将它们全部杀死,并将一条错误消息写入输出文件 - 每次都相同:
Mapping in parallel: mode = multicore; level = mlr.resample; cpus = 12; elements = 4.
Error in extractSubList(iter.results, "measures.train", simplify = "rows") :
Assertion on 'xs' failed: Must be of type 'list', not 'NULL'.
Calls: apply ... extractSubList -> assertList -> makeAssertion -> mstop
Execution halted