如果任务之间的数据流量很大,那么利用dask多处理调度程序的最有效方法是什么?

时间:2016-12-12 23:43:58

标签: python parallel-processing dask

我们有一个dask计算图(非常自定义,所以我们使用dask延迟而不是集合)。我在文档中读到当前的调度策略是LIFO,这样工作进程就有很大的机会获得它刚刚为图表中的下一步计算的数据。但据我所知,任务 即使在这种情况下,计算结果仍然(de)序列化为硬盘驱动器。

所以问题是我要保持多少性能提升 尽可能少地执行图中独立计算的单一路径:

A)沿着每条路径的许多小“地图”任务

t --> t --> t -->...
                     some reduce stage
t --> t --> t -->...

B)每条路径都有一个巨大的“地图”任务

   T ->
        some reduce stage
   T -> 

谢谢!

1 个答案:

答案 0 :(得分:2)

dask多处理调度程序会自动将线性任务链融合到单个任务中,因此上面的案例A将自动成为案例B.

如果您的工作负载更复杂并且需要节点间通信,那么您可能希望在单台计算机上尝试分布式调度程序。它更智能地管理工人之间的数据移动。

airone@airone:/usr/lib/mono/4.5$ ls -l | grep msco
-rw-r--r-- 1 root root 1525760 dic 13 01:46 mscorlib.dll
airone@airone:/usr/lib/mono/4.5$ 

进一步阅读

校正

另外,就像一张纸条一样,Dask并没有在磁盘上保留中间结果。相反,它直接在流程之间传递中间结果。