mlr3 正确设置并行化

per*_*one 2 r machine-learning mlr3

假设我有一台 32 个核心的机器,并且希望尽可能高效地执行 5 个外折叠和 3 个内折叠的嵌套 CV。

在外层,我对两个或多个学习器进行基准测试,在内层,我为一个或 nk 个学习器调整超参数。

如何设置batch_size和future::plan()?

term_eval 如何取决于批量大小?

这明智吗?我的直觉是更好地并行运行内部循环。但我不确定 term_evals 和 batch_size。

lrn1 <- auto_tuner(
  method = "random_search",
  learner = lrn1,
  resampling = rsmp("cv", folds = 3),
  measure = msr("classif.auc"),
  term_evals = 100,
  batch_size = 10,
  store_models = TRUE
)

design = benchmark_grid(task = task, learner = c(lrn1, lrn2), resampling = rsmp("cv", folds = 5))

# Runs the inner loop in parallel and the outer loop sequentially
future::plan(list("sequential", "multisession"))

bmr = benchmark(design, store_models = TRUE)

Run Code Online (Sandbox Code Playgroud)

小智 5

如果使用rsmp("cv", folds = 3)并设置batch_size = 10,则一次使用 30 个核心(3 折叠 x 10 配置)。

term_eval 如何取决于批量大小?

term_eval不依赖于batch_size. batch_size指定在检查终止符之前评估多少个配置。在您的示例中,在 10 次配置后检查终止符。但您还剩下 90 个配置,因此调整仍在继续。终结器在 10 次配置后再次检查,依此类推。当评估 100 个配置时,终止器停止调整。它还batch_size确定并行评估多少个配置。

我的直觉是更好地并行运行内部循环。

是的,并行运行内部循环,即 keep future::plan(list("sequential", "multisession"))