future_map 中的错误:缺少参数“.f”,没有默认值

Error in future_map: argument ".f" is missing, with no default

就我面临的并行化问题寻求您的帮助或专家意见。

我经常 运行 在相当大的数据集上使用 Xgboost 分类器模型(dim(train_data) = 357,401 x 281,配方 prep() 后的 dims 为 147,304 x 1159 )用于多类预测.在 base R 中,模型 运行s 使用 registerDoParallel(使用我服务器的所有 24 个内核)只需 4 个多小时。我现在正尝试在 Tidymodels 环境中 运行 它,但是,我还没有找到一个强大的并行化选项来调整网格。

我尝试了 tidymodels 中的以下并行化选项。所有这些似乎都适用于较小的子样本(例如 20% 的数据),但是当我 运行 整个数据集时选项 1-4 失败,主要是由于内存分配问题。

  1. makePSOCKcluster(), 库(doParallel)
  2. registerDoFuture(), library(doFuture)
  3. doMC::registerDoMC()
  4. 计划(集群,工人),doFuture,并行
  5. registerDoParallel(), library(doParallel)
  6. 未来::计划(多会话),图书馆(furrr)

Option 5(doParallel)在tidymodel环境下100%数据工作,但是需要4-6个小时来调整网格。 我会请求您注意选项 6(未来/furrr),这似乎是我尝试过的所有方法中最有效的。然而,这种方法只工作了一次(下面包含成功的代码,请注意我在调整中加入了赛车方法和停止网格)。

doParallel::registerDoParallel(cores = 24)
library(furrr)
future::plan(multisession, gc = T) 

tic()
race_rs <-  future_map_dfr(
  tune_race_anova(
    xgb_earlystop_wf,
    resamples     = cv_folds,
    metrics       = xgb_metrics,
    grid          = stopping_grid,
    control       = control_race(
      verbose       = TRUE,
      verbose_elim  = TRUE,
      allow_par     = TRUE,
      parallel_over = 'everything'
    )
  ),
  .progress = T,
  .options = furrr_options(packages = "parsnip"),
)
toc()

有趣的是,一次成功后所有后续尝试都失败了。我总是遇到同样的错误(如下)。每次调整通过所有 CV 折叠 (n=5) 和 运行s,直到赛车方法消除了除 1 个参数之外的所有参数,然而,它最终失败并出现以下错误!

Error in future_map(.x = .x, .f = .f, ..., .options = .options, .env_globals = .env_globals, :
argument ".f" is missing, with no default

我使用的OS&版本详情如下:

R version 3.6.3 (2020-02-29)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Red Hat Enterprise Linux
Matrix products: default
BLAS/LAPACK: /usr/lib64/libopenblasp-r0.3.3.so

我对 furrr/future 选项的工作方式很感兴趣,但此后所有尝试都失败了。 我也尝试过使用 development version of tune

任何有关并行化选项的帮助或建议将不胜感激。

谢谢 Rj

显然,在 tidymodels 代码中,并行化发生在内部,不需要使用 furrr/future 进行手动并行计算。此外,上述代码在语法上可能不正确。有关原因的更详细解释,请参阅 R Studio 社区论坛中 mattwarkentin 的 this post