【发布时间】:2021-08-20 20:26:05
【问题描述】:
我正在测试targets 包,但在自定义并行化方面遇到了问题。我的工作流程有两个步骤,我想将第一步并行处理 4 个工作人员,第二步处理 16 个工作人员。
我想知道是否可以通过调用tar_make_future() 来解决问题,然后在tar_target 调用中指定每个步骤需要多少工人。下面有一个简单的示例,我希望 data 步骤由 1 个工作人员执行,sums 步骤由 3 个工作人员执行。
library(targets)
tar_dir({
tar_script({
library(future)
library(future.callr)
library(dplyr)
plan(callr)
list(
# Goal: this step should execute with 1 worker
tar_target(
data,
data.frame(
x = seq_len(6),
id = rep(letters[seq_len(3)], each = 2)
) %>%
group_by(id) %>%
tar_group(),
iteration = "group"
),
# Goal: this step should execute with 3 workers, in parallel
tar_target(
sums,
sum(data$x),
pattern = map(data),
iteration = "vector"
)
)
})
tar_make_future()
})
我知道一种选择是在每个步骤中单独配置并行后端,然后调用tar_make() 以串行执行工作流。很好奇tar_make_future()能不能得到这样的结果。
【问题讨论】:
标签: r r-future targets-r-package