如何减少任务流中的留白?

问题描述 投票:1回答:1

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

PS:我需要将计算扩展到1000多个工作者,所以减少工作者的数量对我来说不是一个选择。

图片为 工人数量=16

形象为: 工人人数=32人

形象为: 工人数量=64人

python-3.x dask dask-distributed
1个回答
0
投票

正如你所提到的,任务流图中的白色空间意味着存在一些低效率,导致工人不是一直在活动。

这可能是由很多原因造成的。 下面我列举几个。

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

看了你的图片,我觉得这些都不适用于你。

相反,我看到有一些不活动的间隙,然后是活动的间隙。 我猜测这是由你在本地运行的一些代码引起的。 我猜测你的代码看起来像下面这样。

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

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

我建议对你的本地计算进行剖析,看看发生了什么。 请看 https:/docs.dask.orgenlatestphases-of-computation.html。

© www.soinside.com 2019 - 2024. All rights reserved.