1

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

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

类似地,为了使用依赖图,显示 3k+ 个对象使其无法使用。能够在单个“输出类型”组下折叠某些对象会很好。

4

1 回答 1

1

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

不幸的是,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)显示比默认设置更多的进度消息。

于 2018-12-19T01:27:38.167 回答