2010-02-26 59 views
2

我有一個計算任務被拆分成幾個單獨的程序執行,並且依賴關係。我使用Condor 7作爲任務調度程序(使用Vanilla Universe,由於對無法實現的程序有所限制,因此不涉及檢查點設置),因此DAG看起來像是一個自然的解決方案。但是有些程序需要在同一臺主機上運行。在Condor手冊中我找不到如何做到這一點的參考。使用DAG的Condor作業與一些需要運行同一主機的作業

例DAG文件:

JOB A A.condor 
JOB B B.condor 
JOB C C.condor  
JOB D D.condor 
PARENT A CHILD B C 
PARENT B C CHILD D 

我需要表達B和d需要在同一計算機節點上運行,而不會破壞B的並行執行和C.

感謝您的幫幫我。

回答

2

神鷹沒有任何簡單的解決辦法,但至少有一個雜牌,應該工作:

具有B-留下一些國家背後的執行節點上,可能在一個文件的形式,即說了什麼像MyJobRanHere=UniqueIdentifier"。使用STARTD_CRON support來檢測這個廣告它在機器ClassAd中。有D使用Requirements=MyJobRanHere=="UniqueIdentifier"。 D的最後清理的一部分,或者也許是一個新的節點E,它將刪除狀態。如果你通過大量工作,你可能需要偶爾清除遺留狀態。

+0

好伎倆,我採用了一種相似和簡單的方法,最後:作業B和D都在同一個腳本中運行,但D等待C在共享驅動器上的已知位置創建一個文件。 – 2010-09-06 06:50:16

1

我不知道答案,但你應該在Condor Users郵件列表上提出這個問題。支持Condor中的DAG功能的人員將對其進行監控並作出響應。有關訂閱信息,請參見this page。這是相當低的流量。

在Condor的同一主機上將兩個作業保持在一起,而不事先將它們鎖定到特定主機,DAG或沒有DAG,通常相當困難。我實際上想不出一種真正可行的方法來讓B在C或C之前開始B之前開始。如果你願意強制B必須始終在C之前開始,那麼你可以參與工作B的一部分當它開始運行時,請修改Job C的ClassAd的Requirements部分,以便它具有「Machine ==」字符串,其中是機器B的名稱。這還需要提交作業C,直到B正在運行,B還將作爲其啓動工作的一部分發布。

這是相當複雜的...

所以我只是有一個想法:你可以用禿鷹的動態startd /插槽的功能和摺疊您的DAG達到你想要的東西。在當前有兩個單獨節點B和C的DAG中,您可以將它摺疊到一個節點B'中,該節點在機器上啓動時可同時運行B和C.作爲工作要求的一部分,您注意到它需要一臺機器上的2個CPU。切換你的startd以使用動態插槽配置,以便機器公佈其所有資源,而不僅僅是靜態分配的插槽。現在,您一直在一臺機器上同時運行B和C.如果在有大量單CPU作業的隊列中有幾個多CPU作業,那麼動態插槽會遇到一些問題,但這至少是一個更容易解決的問題。

另一種選擇是用一個特殊的職業屬性標記B」:

MultiCPUJob = True 

而就在機器上的插槽1個目標是:

Requirements = Slot == 1 && ...your other requirements... 

而且有說靜態插槽startd政策,「如果一個MultiCPUJob = True的作業試圖在我的插槽1上運行,搶先於該機器上第2個插槽中的任何作業,因爲我知道這個作業需要2個核心/ CPU」。

這是效率低下的,但可以用任何版本的Condor過去的6.8.x來完成。我實際上在我自己的靜態分區農場中使用這種類型的設置,所以如果一項工作需要一臺機器來進行基準測試,那麼它可能會發生,而無需重新配置機器。

如果您有興趣瞭解更多關於搶先選項的信息,請告訴我們,我可以指出您在condor-user列表存檔中進一步閱讀配置。

+0

感謝您的提示。 – 2010-03-09 08:28:36

+0

郵件發送,如果我得到有意義的答案,總結在這裏 – 2010-03-24 09:59:54

+0

沒有答案的清單:-(也許這是不可行的,我會解決這個問題 – 2010-04-17 11:27:35

1

這裏的解決方案是使用這樣的事實:即使在DAGMan運行時,只要DAGMan尚未提交節點,您也可以修改提交描述。假設一個簡單的DAG A -> B -> C。如果你希望所有節點在同一主機上運行,​​你可以做到以下幾點:

  1. 節點A定義後腳本

  2. 後處理腳本搜索condor_history爲完成節點A的羣ID 。類似condor_history -l -attribute LastRemoteHost -m1 $JOB_ID ...您需要清理輸出以及不需要的東西,但是您將與運行節點A的主機一起使用。

  3. 然後,後腳本搜索並修改相關作業提交文件,插入在他們的提交文件頂部的工作職位要求。只要確保你逐步建立你的工作要求,以便他們拿起這個新的要求,如果它存在。

  4. 當帖子腳本完成後,DAGMan會查看提交就緒節點,在本例中我們有一個:B。 B的提交現在將按照您在步驟3中添加的新要求完成,以便它將在與A相同的執行主機上運行。

我這樣做目前有很多工作。它效果很好。