2017-10-20 37 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任務擴展到超過最大連接數)。我會更新問題以反映這種情況。 –