2015-11-25 48 views
1

我使用condor在幾個小時內完成大約100個進程的批處理。這些過程完成後,我需要從第一批開始下一批運行,這個過程重複數十次。我的神鷹池大於100個核心,我想限制我的condor集羣一次只能執行100個進程,這樣condor在第一個進程完成之後纔開始進行下一個進程。這可能嗎?condor計劃的併發進程數量限制

+1

所以,要明確一點,你有一套工作,如: a1 - > a2 - > a3 ----> a10 b1 - > b2 - > b3 ----> b10 其中a3需要a2完成,a2需要a1等? –

+1

或者a2是否需要a1和b1先完成? –

回答

1

這聽起來像是你正在運行一個檢查點的工作,然後下一個工作讀取該檢查點並執行一些操作並寫出一個新的檢查點等10次。我不確定爲什麼你需要按照你的方式分解它,爲什麼不只是有一個包裝腳本來查找檢查點文件並使用它,或者從頭開始?

另一種選擇是在提交文件中使用「要求」,並列出只能運行作業的100臺機器或核心。例如:

Requirements = (machine == "astrolab01") || (machine == "astrolab02") || (machine == "astrolab03") 

將確保您永遠不會同時運行超過3個工作。除非這些機器有多個內核,那麼你需要做的是這樣的:

Requirements = (name == "[email protected]") || (name == "[email protected]") 
1

您需要使用DAG管理器 - 這允許您定義作業之間的父子關係,這樣就可以等待結果開始第二份工作之前的第一份工作。

DAGman還有一個MAX_JOBS_RUNNING設置,它可以限制活動作業的總數。

這是全部記錄在8.4手冊的第2.10節。您可能需要使用某種腳本來構建DAG文件,並且有一個位置可用於存儲運行的臨時結果 - 作業無法將數據直接從父項傳遞給子項。輸出從第一次運行收集到工作目錄中,然後從工作目錄發送到下一個作業。