有没有一种“分块”的德雷克输出方式来加快计划验证和显示?

时间:2018-12-14 13:58:04

标签: r drake-r-package

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

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

同样,出于使用依赖图的目的,显示3k +个对象使其不可用。能够将某些对象折叠在单个“输出类型”组下会很好。

1 个答案:

答案 0 :(得分:1)

很好的问题。我知道您在说什么,而且我一直都在思考这个问题。实际上,尝试摆脱延迟是我drake在2019年的首要任务之一。

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