语境
我正在使用 dask.distributed 跨机器并行计算。因此,我有 dask-workers 在连接到 dask-scheduler 的不同机器上运行,然后我可以将我的自定义图表与所需的键一起提交到该机器上。
由于网络安装限制,我的输入数据(和输出存储)仅可用于机器的子集('i/o-hosts')。我试图以两种方式处理这个问题:
- i/o 操作中涉及的所有任务都限制在 i/o 主机上(它们只能在运行在可以访问数据的机器上的工作人员上运行),非 i/o 任务仅限于非 i/o 主机上
- 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)。这似乎也适用于资源框架。
问题
有没有一种好方法可以将任务限制与窃取工作结合起来?