2017-10-20 35 views
1

使用分布式来调度运行在谷歌计算引擎上的大量相互依赖的任务。当我在中途启动一个额外的工作实例时,没有任何任务被安排到它(尽管它与调度程序一起正常登记)。我相信这是因为(从http://distributed.readthedocs.io/en/latest/scheduling-state.html#distributed.scheduler.decide_worker):完全基于空闲而不是数据通信来调度任务

“如果任务需要数据通信,然后我们选择以尽量减少工人之间发送的字节数它优先于工人入住。”

一旦我中途运行任务树,所有剩余的任务将取决于已经运行的任务的结果。因此,如果我解释上述引用的话,那么不管新员工多么闲散,都不会安排新的工作人员,因为依赖数据从来就不存在,但总是在“老”工人身上。

但是,我确定要传输的数据量非常少,通常只是一个小字符串。所以在这种情况下,让闲置胜过数据通信会更有意义。是否可以允许这样(例如,设置了“调度策略”或甚至有一个数据-VS-无所事事权衡系数中可能被调整

更新后的注释#1:??

并发因素:每个任务都使用资源框架来确保它运行在cpu绑定任务的工作集(“CPU = 1”)上或运行在网络绑定任务的工作集上(“NET = 1”)这种分离是为了避免超载/下载服务器和限制/下载任务达到某个最大值,同时仍然可以扩展其他任务,但是根据http://distributed.readthedocs.io/en/latest/work-stealing.html,在这些情况下不会发生任务窃取?一种允许在保持t的同时窃取任务的方式他资源限制?

更新2:我看到有一个公开的问题:https://github.com/dask/distributed/issues/1389。有计划实施吗?

回答

0

虽然Dask更喜欢安排减少沟通的工作,但它也承认这并非总是最好的。一般来说,Dask会在首先完成的计算机上执行任务,同时考虑通信成本和超载工作人员的现有任务积压。

有关负载的详细信息平衡,你可以考虑阅读本文档页面:

http://distributed.readthedocs.io/en/latest/work-stealing.html

+0

啊,那么这可能是这个问题:“如果一个任务已经明确限定为在特定的工人运行(例如就像需要特殊硬件的情况一样),那么我们不会偷盗。“我所有的任务都有自定义的限制,因为我有不同的CPU集合或者网络绑定任务,我不希望网络绑定任务在CPU工作人员上运行(为了避免连接到最多/最少的服务器),反之亦然(为了能够将我的cpu-bound任务扩展到超过最大连接数)。我会更新问题以反映这种情况。 –