【问题标题】:Design computation graph in dask在 dask 中设计计算图
【发布时间】:2018-06-15 15:57:30
【问题描述】:

到目前为止,我已经使用 dask 和 get 和一个字典来定义我的任务的依赖关系图。但这意味着我必须从一开始就定义我的所有图表,现在我想不时添加新任务(依赖于旧任务)。

我已经阅读了distributed 包,它看起来很合适。我已经看到了两种可能的选项来定义我的图表:

  1. 使用delayed,并定义每个任务之间的依赖关系:

    t1 = delayed(f)()
    t2 = delayed(g1)(t1)
    t3 = delayed(g2)(t1)
    dask.compute([t2, t3])
    
  2. 使用map/submit,然后执行以下操作:

    t1 = client.submit(f)
    t2 = client.map(g1, [t1])[0]
    t3 = client.map(g2, [t1])[0]
    

你觉得哪个更合适? 谢谢!

【问题讨论】:

    标签: python dask dask-distributed dask-delayed


    【解决方案1】:

    如果你的目标是随着时间的推移改变你的计算,那么你应该使用 Dask 的 concurrent.futures API,这里描述:

    http://dask.pydata.org/en/latest/futures.html

    【讨论】:

    • 为了更清楚 - 我有一个图表(大约 500 个节点),过了一会儿我想添加另一个图表(其中一些任务依赖于 prev 任务)。添加每个图表的最佳方法是什么?跟期货有关吗?声明一个未来依赖于另一个未来的方式是什么?
    • 是的,期货可以轻松做到这一点。我建议通读上面提到的文档,然后在不清楚的情况下提出其他问题。
    • 我读过关于期货的文章,现在我明白了如何使用它们。但我还有一个问题:在调度/性能方面,什么更好?将所有任务定义为期货(并使用 client.submit),还是使用延迟来定义图形?如果我理解正确,延迟是惰性的,所以整个图(大约 500 个节点)将在计算之前构建,并且 client.submit 不是惰性的。
    • 两者都不是更好。正如你所说,一个是懒惰的,一个是即时的。否则,它们几乎都相同。
    • 非常感谢!我将使用 client.submit,因为它更容易一些
    猜你喜欢
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多