Dask:延迟与期货和任务图生成

Dask: delayed vs futures and task graph generation

我有几个关于 Dask 的基本问题:

  1. 当我想使用 dask 进行分布式计算(即在集群上)时必须使用 Futures 是否正确?
  2. 在那种情况下,即在处理期货时,任务图仍然是推理计算的方式。如果是,我该如何创建它们。
  3. 一般情况下,无论是使用 future 还是 delayed,我如何获取与任务图关联的字典?

作为编辑: 我的应用是我想在我的本地机器或集群上并行化一个 for 循环(即它应该在集群上工作)。

作为第二次编辑: 我想我也不太清楚 Futures 和延迟计算之间的关系。

感谢

1) 是的。如果你通过网络发送数据,你必须有某种方式来询问计算机为你进行计算,数字运算是如何进行的,而 Futures 或多或少地代表了这一点。

2) 不。使用 Futures,您正在急切地执行函数 - 尽快启动计算,然后等待结果返回(来自本地的另一个 thread/process,或来自一些远程你已经卸载了工作)。这里的相关抽象是一个 Queque(具体来说是 Priority Queque)。

3) 例如,对于延迟实例,您可以执行 some_delayed.dask,或者对于数组,Array.dask;可选择将整个内容包装在 dict() 或 vars() 中。不过,我不确定它是否对每个 API 都以这种方式可靠地设置(我假设是这样,但你知道他们是怎么说我们两个人的假设的……)。

4) 最简单的类比可能是:Delayed 本质上是一个奇特的 Python yield 函数包装器; Future 本质上是一个奇特的 async/await 函数包装器。