【发布时间】:2021-09-22 10:11:58
【问题描述】:
我想监控 mlr3 中 benchmark() 的进度。对多个模型进行基准测试(包括对大型数据集进行超参数调整)可能需要数小时甚至数天。我希望能够在基准运行时监控进度,以便我可以决定是否中止基准。此外,如果在此过程中打印状态消息,我可以在某些部分完成后中止该过程,并知道某些步骤花费了多长时间。例如,朴素贝叶斯可能已经完成,但决策树的超参数调整仍在运行(并且已经运行了几个小时......)。这样我就可以为下一次基准测试进行适当的更改(例如,限制决策树的搜索空间或只使用朴素贝叶斯)。
问题是只有第一条消息(“运行重采样实例”)在过程开始期间/开始时显示。其余部分仅在完整基准测试完成后显示。换句话说,在几个小时甚至几天内,唯一显示的状态消息是第一条。如果中止流程,则有关进度(各个步骤的持续时间)的所有信息都会丢失。
这是一个非常简短的示例。代码相关部分直接采用mlr3 book:
design = benchmark_grid(
tasks = task,
learners = c(lrn("classif.featureless"),
lrn("classif.xgboost")
),
resamplings = resampling
)
bmr = benchmark(design)
其他消息 - 包括进度开始后仅几微秒的状态消息 - 仅在完整的基准测试过程完成后才会显示。
在这种情况下,只需一分钟。但是,如果基准测试需要数小时或数天,那么立即观察新状态的消息会很有帮助,而不必等到整个过程完成。
我知道 benchmark() 支持 progressr::with_progress(),但百分比级别对我来说不够详细。
有没有办法让 mlr3::benchmark() 在整个过程中立即显示状态消息,而不仅仅是在过程完成之后?
【问题讨论】:
-
你是并行运行还是顺序运行?
-
我没有在代码中使用任何并行化。
-
谢谢。我想我过去也意识到了这一点,似乎输出被一些封装的过程阻止了。未来几天会仔细观察。
标签: progress-bar status mlr3