【问题标题】:mlr3 - benchmarking: status messages are only displayed after full benchmark is completedmlr3 - 基准测试:状态消息仅在完整基准测试完成后显示
【发布时间】: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


【解决方案1】:

这种行为的原因是对future.apply::future_mapply() 的内部调用。使用base::mapply()时,直接打印输出。 后者可以通过设置options("mlr3.debug" = TRUE) 来强制执行,如下所示。

我已经打开了一个pull request 来强制future.apply::future_mapply() 中的这种行为,这是options("mlr3.debug" = FALSE) 的默认设置。

这是一个临时解决方法

library("mlr3")
tasks = list(tsk("penguins"), tsk("sonar"))
learners = list(lrn("classif.featureless"), lrn("classif.rpart"))
resamplings = list(rsmp("cv"), rsmp("subsampling"))

grid = benchmark_grid(tasks, learners, resamplings)
print(grid)

# workaround
options("mlr3.debug" = TRUE)

benchmark(grid)

【讨论】:

    【解决方案2】:

    我们正在考虑不通过https://github.com/mlr-org/mlr3/pull/692 的未来延迟标准输出。

    或者,您可以配置progressr 以将progress 包用于进度条,然后输出附加信息(当前正在运行的任务、学习者、迭代):

    progressr::handlers(global = TRUE)
    progressr::handlers("progress")
    

    【讨论】:

      猜你喜欢
      • 2022-09-26
      • 2013-04-19
      • 2010-12-30
      • 1970-01-01
      • 1970-01-01
      • 2017-05-29
      • 2014-07-30
      • 1970-01-01
      相关资源
      最近更新 更多