3

语境

我正在使用 dask.distributed 跨机器并行计算。因此,我有 dask-workers 在连接到 dask-scheduler 的不同机器上运行,然后我可以将我的自定义图表与所需的键一起提交到该机器上。

由于网络安装限制,我的输入数据(和输出存储)仅可用于机器的子集('i/o-hosts')。我试图以两种方式处理这个问题:

  1. i/o 操作中涉及的所有任务都限制在 i/o 主机上(它们只能在运行在可以访问数据的机器上的工作人员上运行),非 i/o 任务仅限于非 i/o 主机上
  2. i/o 操作中涉及的所有任务都绑定到提供资源“io”(i/o 主机)的工作人员,非 i/o 任务绑定到提供资源“计算”的非 i/o 主机上的工作人员'。

不允许非 i/o 任务在 i/o 主机上运行的想法是确保他们的工作人员可用于 i/o 任务。

问题

这两种方法都按预期工作,因为它们将 i/o 任务限制在正确的工作人员身上。但是我注意到,当使用这两种方法中的任何一种时,只有极少数的工作人员会积累大量的任务,而其他大多数工作人员仍然处于空闲状态。

在阅读了如何在工作人员之间分配任务后,我发现工作窃取似乎是故意禁用的受限任务(http://distributed.readthedocs.io/en/latest/work-stealing.html)。这似乎也适用于资源框架。

问题

有没有一种好方法可以将任务限制与窃取工作结合起来?

4

0 回答 0