首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以用R { targets }包为不同的目标设置不同的并行度吗?

我可以用R { targets }包为不同的目标设置不同的并行度吗?
EN

Stack Overflow用户
提问于 2021-06-03 00:36:28
回答 2查看 35关注 0票数 0

我正在测试targets包,并且遇到了自定义并行化的问题。我的工作流程有两个步骤,我希望将第一步并行到4个工作进程上,并将第二步并行到16个工作进程上。

我想知道是否可以通过调用tar_make_future(),然后在tar_target调用中指定每个步骤需要多少工作进程来解决这个问题。下面是一个简单的示例,其中我希望data步骤使用1个worker执行,而sums步骤使用3个worker执行。

代码语言:javascript
复制
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()得到这样的结果。

EN

回答 2

Stack Overflow用户

发布于 2021-06-03 02:58:22

我建议您调用tar_make_future(workers = <max_parallel_workers>)并让targets计算出有多少个工作线程要并行运行。targets会自动找出哪些目标可以并行运行,哪些目标需要等待上游依赖关系完成。在您的情况下,一些data分支可能会在其他分支之前完成,在这种情况下,sum可以立即启动。换句话说,一些sum分支将在其他sum分支可以启动之前开始运行,您可以相信targets会在需要时扩展临时工作进程。https://books.ropensci.org/targets/hpc.html#future上的动画可能有助于可视化这一点。如果您分别对datasum的并行性进行微观管理,则可能必须等待所有data完成,然后才能启动任何sum,这可能需要很长时间。

票数 1
EN

Stack Overflow用户

发布于 2021-06-03 22:50:58

对于我的情况,一个有效的解决方案是调用tar_make_future()两次。在上面的示例中,这将是:

代码语言:javascript
复制
tar_make_future(data, workers = 1)
tar_make_future(workers = 3)

虽然在我的实际工作流程中,它看起来更像:

代码语言:javascript
复制
tar_make_future(data, workers = 4)
tar_make_future(workers = <max_parallel_workers>)

@landau提出了一个很好的观点,即在继续后续步骤之前,这将完全构建data目标。当然,在工作流中,一个干净而有效的解决方案是调用tar_make_future(workers = <max_parallel_workers>)并接受结果运行时。

在我的例子中,等待data完成并不是问题:我的data目标包含许多快速的分支,后续目标的构建速度要慢得多,并且我可以通过比快速步骤多得多的工作进程(慢步骤的16+工作进程,而快速步骤只有4个工作进程)来并行慢步骤。如果你的情况不是这样,@landau的建议可能是更好的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67809168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档