有没有办法让"chunking" drake 输出来加速计划的验证和展示?

Is there a way of "chunking" drake outputs to speed up plan verification and display?

我正在对一系列模型和参数值进行模拟。此时我的 drake 工作流程涉及超过 3000 个模拟 data.frames 和相应的 stanfit 对象。

尝试 运行 make 当前会导致计划执行开始前约 2 分钟的延迟。我假设这是因为 drake 正在检查其缓存以验证计划中的哪些步骤需要更新。我希望有某种方式让它知道它可以将所有这些模型表示为单个整体输出块。我能做的是制作一个函数,将我所有的输出对象作为副作用写入,然后输出各种散列,以便 drake 是 "fooled" 关于需要检查的内容,但我可以'考虑到即将到来的截止日期和涉及的处理时间,我不会在此时重组我的代码。

同样,为了使用依赖图,显示 3k+ 个对象会使其无法使用。如果能够将某些对象折叠在一个 "output type" 组下就好了。

好问题。我知道你在说什么,我也一直在想这个问题。事实上,试图摆脱延迟是我 2019 年 drake 的两大优先事项之一。

遗憾的是,drake 目前没有可让您使目标保持最新的解决方案。长期解决方案可能是提高速度 + https://github.com/ropensci/drake/issues/304 + https://github.com/ropensci/drake/issues/233。这些都是重要的发展领域,也是浩大的事业。

对于新项目,您可以让每个目标成为一个已拟合 stan 模型的列表。

drake_plan(
  data1 <- generate_data(...),
  data2 <- generate_data(...),
  models_data1 <- fit_models(data1),
  models_data2 <- fit_models(data2)
)

fit_models <- function(data){
  list(
    run_stan(data, "normal_priors"),
    run_stan(data, "t_priors")
  )
}

对于图形可视化,支持目标集群。参见 https://ropenscilabs.github.io/drake-manual/vis.html#clusters

编辑:并行计算和冗长

如果您 运行 make(jobs = c(imports = 4, targets = 6))drake 将在您的本地计算机上使用 4 个进程来进行预处理。 make(verbose = 4) 显示比默认设置更多的进度消息。