progress-bar - mlr3 - 基准测试 : status messages are only displayed after full benchmark is completed

标签 progress-bar status mlr3

我想监控 mlr3 中 benchmark() 的进度。对多个模型进行基准测试(包括对大型数据集进行超参数调整)可能需要数小时甚至数天的时间。我希望能够在基准测试运行时监视进度,以便我可以决定是否中止基准测试。此外,如果在此过程中打印状态消息,我可以在某些部分完成后中止该过程,并知道某些步骤花费了多长时间。例如,朴素贝叶斯可能已经完成,但决策树的超参数调整仍在运行(并且已经运行了几个小时......)。这样我就可以为下一次基准测试运行做出适当的更改(例如,限制决策树的搜索空间或仅使用朴素贝叶斯)。

问题是在进程期间/开始时仅显示第一条消息(“正在运行重采样实例”)。其余部分仅在完整基准测试完成后才会显示。换句话说,在几个小时甚至几天内,显示的唯一状态消息是第一条。如果中止该进程,有关进度(各个步骤的持续时间)的所有信息都会丢失。

这是一个非常简短的示例。代码的相关部分直接取自 mlr3 book :

    design = benchmark_grid(
               tasks = task,
               learners = c(lrn("classif.featureless"), 
               lrn("classif.xgboost")
               ),
               resamplings = resampling
              )
     bmr = benchmark(design)

立即显示基准测试过程开始时的状态消息 enter image description here

其他消息(包括进度开始后仅几微秒的状态消息)仅在完整基准测试过程完成后才会显示。

enter image description here

在这种情况下,只需要一分钟。但是,如果基准测试需要数小时或数天,那么立即观察新状态的消息将很有帮助,而不必等到整个过程完成。

我知道 benchmark() 支持progressr::with_progress(),但百分比级别对我来说不够详细。

有没有办法让 mlr3::benchmark() 在整个过程中立即显示状态消息,而不是在过程完成后才显示?

最佳答案

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

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

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

关于progress-bar - mlr3 - 基准测试 : status messages are only displayed after full benchmark is completed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69282207/

相关文章:

html - 进度条(下载)使用 HTML 5

android - Android进度栏未显示

javascript - 以数字形式输出状态,改变颜色的代码

mlr3 - 使用mlr3在xgboost学习器中设置 `early_stopping_rounds`

r - 有没有办法在 R(或 ml3)的食谱包中对行(尤其是虚拟变量)进行分组

android - 类似 Chrome 浏览器的 Progressbar WebView

c# - 使用 WebClient() 计算要下载的总字节数

kubernetes - 堆状态停留在容器创建或待处理状态

Android 平板电脑 - 触摸时隐藏/显示状态栏