Python 3.x 如何减少任务流中的空白?

Python 3.x 如何减少任务流中的空白?,python-3.x,dask,dask-distributed,Python 3.x,Dask,Dask Distributed,我在Dask中使用分布式计算为不同数量的工人获得了任务流。我可以观察到,随着工人数量的增加(从16人增加到32人,增加到64人),任务流中的空白也会增加,这会降低并行计算的效率。即使我增加每个工作人员的工作量(即,每个工作人员的计算次数更多),我也会得到类似的趋势。有人能建议如何减少空白吗 PS:我需要将计算扩展到1000个工人,因此减少工人数量不是我的选择 图像用于: 图像用于: 下图:正如您所提到的,任务流图中的空白表示存在一些低效率问题,导致工作人员无法始终处于活动状态 这可能是由许多原因

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

PS:我需要将计算扩展到1000个工人,因此减少工人数量不是我的选择

图像用于:

图像用于:


下图:

正如您所提到的,任务流图中的空白表示存在一些低效率问题,导致工作人员无法始终处于活动状态

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

  • 极短任务(亚毫秒)
  • 不太可并行的算法
  • 任务图中序列化代价高昂的对象
  • 看看你的照片,我觉得这些都不适合你

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

    for i in ...:
        results = dask.compute(...) # do some dask work
        next_inputs = ...  # do some local work
    
    所以你在做一些当地的工作。这可能是Dask的错误(可能构建和序列化图形需要很长时间),也可能是代码的错误(可能构建下一次计算的输入需要一些时间)


    我建议您对本地计算进行分析,以了解发生了什么。请参见

    正如您所提到的,任务流图中的空白表示存在一些效率低下的情况,导致工作人员无法始终处于活动状态

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

  • 极短任务(亚毫秒)
  • 不太可并行的算法
  • 任务图中序列化代价高昂的对象
  • 看看你的照片,我觉得这些都不适合你

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

    for i in ...:
        results = dask.compute(...) # do some dask work
        next_inputs = ...  # do some local work
    
    所以你在做一些当地的工作。这可能是Dask的错误(可能构建和序列化图形需要很长时间),也可能是代码的错误(可能构建下一次计算的输入需要一些时间)


    我建议您对本地计算进行分析,以了解发生了什么。请参见

    我建议生成一份性能报告:在该报告中,您可以查看Worker和scheduler的管理图表。也许有什么东西跳出来帮助解释为什么没有工作发生(长时间写入磁盘/序列化/等等)。如果你在html中没有看到任何粘贴链接的内容,我建议你生成一个性能报告:在报告中,你可以查看Worker和scheduler的管理图表。也许有什么东西跳出来帮助解释为什么没有工作发生(长时间写入磁盘/序列化/等等)。如果您没有看到任何内容,请发布html以将链接粘贴到此处。。谢谢你的回答。。在循环内,我使用“提交”进行分布式计算,并使用“聚集”仅在循环外计算最终结果。循环大小相当大(如10000)。当我使用较少的worker(例如8)时,空格出现的频率较低(例如100个循环后),但是当我使用大量worker(例如64)时,空格出现的频率较高(例如每10个循环一次)。事实证明,垃圾收集是问题所在。我在代码开头添加了gc.disable(),现在空格消失了!:DHi。。谢谢你的回答。。在循环内,我使用“提交”进行分布式计算,并使用“聚集”仅在循环外计算最终结果。循环大小相当大(如10000)。当我使用较少的worker(例如8)时,空格出现的频率较低(例如100个循环后),但是当我使用大量worker(例如64)时,空格出现的频率较高(例如每10个循环一次)。事实证明,垃圾收集是问题所在。我在代码开头添加了gc.disable(),现在空格消失了!:D