如何减少任务流中的白色space?

How to reduce white space in the task stream?

我在 Dask 中使用分布式计算为不同数量的工人获得了任务流。我可以观察到,随着 worker 数量的增加(从 16 到 32 再到 64),任务流中的空白区域也会增加,这会降低并行计算的效率。即使我增加了每个工人的工作量(即每个工人的计算量更多),我也得到了类似的趋势。谁能建议如何减少空白区域?

PS:我需要将计算扩展到 1000 个 worker,因此减少 worker 的数量对我来说不是一个选择。

图像:No. of workers = 16

图像:No. of workers = 32

图像:No. of workers = 64

如您所述,任务流图中的白色 space 表示存在一些低效率导致工作人员并非一直处于活动状态。

这可能是由多种原因造成的。我将在下面列出一些:

  1. 非常短的任务(亚毫秒)
  2. 可并行化程度不高的算法
  3. 任务图中序列化成本高昂的对象
  4. ...

看着你的照片,我认为这些都不适合你。

相反,我看到有 inactivity 的间隙,然后是 activity 的间隙。我的猜测是,这是由您在本地 运行 的某些代码引起的。我的猜测是您的代码如下所示:

for i in ...:
    results = dask.compute(...) # do some dask work
    next_inputs = ...  # do some local work

所以你在做一些本地工作时被阻止了。这可能是 Dask 的错(可能需要很长时间来构建和序列化你的图)或者可能是你的代码的错(可能为下一次计算构建输入需要一些时间)。

我建议分析您的本地计算以查看发生了什么。参见 https://docs.dask.org/en/latest/phases-of-computation.html