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 失败,主要是由于内存分配问题。
- makePSOCKcluster(), 库(doParallel)
- registerDoFuture(), library(doFuture)
- doMC::registerDoMC()
- 计划(集群,工人),doFuture,并行
- registerDoParallel(), library(doParallel)
- 未来::计划(多会话),图书馆(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。
就我面临的并行化问题寻求您的帮助或专家意见。
我经常 运行 在相当大的数据集上使用 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 失败,主要是由于内存分配问题。
- makePSOCKcluster(), 库(doParallel)
- registerDoFuture(), library(doFuture)
- doMC::registerDoMC()
- 计划(集群,工人),doFuture,并行
- registerDoParallel(), library(doParallel)
- 未来::计划(多会话),图书馆(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。