簡體   English   中英

使用DAG的Condor作業,其中一些作業需要運行同一主機

[英]Condor job using DAG with some jobs needing to run the same host

我有一個計算任務,該任務分為幾個獨立的程序執行,並具有依賴性。 我正在使用Condor 7作為任務調度程序(在Vanilla Universe中,由於對程序的約束超出了我的能力范圍,因此不涉及檢查點),因此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的並行執行。

謝謝你的幫助。

Condor沒有任何簡單的解決方案,但是至少應該有一個可行的解決方案:

讓B在執行節點上留下一些狀態,可能是文件形式,類似於MyJobRanHere=UniqueIdentifier" 。使用STARTD_CRON支持來檢測此狀態並在機器ClassAd中播發它。請D使用Requirements=MyJobRanHere=="UniqueIdentifier" 。D的最后清理,或者一個新的節點E的一部分,它消除了狀態。如果你正在運行大量的通過,你可能需要清除遺留的狀態偶爾的工作。

我不知道答案,但是您應該在Condor Users郵件列表中問這個問題。 在Condor中支持DAG功能的人們會對其進行監視並做出響應。 請參閱此頁面以獲取訂閱信息。 這是相當低的流量。

通常,將兩個作業同時保留在Condor的同一主機上而沒有事先將它們鎖定到特定主機,DAG或不鎖定DAG相當困難。 我實際上想不出一種可行的方法來使B在C之前開始,或者C在B之前開始。如果您願意強制B必須始終在C之前開始,那么您可以參加工作B的工作在開始運行時執行的操作是修改作業C的ClassAd的“ 需求”部分,以使其具有“ Machine ==”字符串,其中是所登陸的計算機B的名稱。 這也將要求作業C提交,直到作業B運行為止才提交或完全不提交。作業B也必須將其釋放,作為其啟動工作的一部分。

那很復雜...

因此,我只是想了一下:您可以使用Condor的動態啟動/插槽功能並折疊DAG來實現所需的功能。 在當前有兩個單獨的節點B和C的DAG中,您可以將其折疊為一個節點B',該節點在計算機上啟動時將並行運行B和C。 作為作業要求的一部分,您注意到它在一台機器上需要2個CPU。 切換您的起點以使用動態插槽配置,以便計算機通告其所有資源,而不僅是靜態分配的插槽。 現在,您可以始終在一台計算機上同時運行B和C。 當隊列中有幾個多CPU作業且有很多單CPU作業時,動態插槽會出現一些飢餓問題,但這至少是一個更容易解決的問題。

另一種選擇是使用特殊的作業屬性標記B':

MultiCPUJob = True

並將其定位到計算機上的插槽1:

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

並有一個靜態的插槽啟動策略,其中指出:“如果具有MultiCPUJob = True的作業嘗試在我的插槽1上運行,則搶占了該計算機上插槽2中的任何作業,因為我知道該作業將需要2個內核/ CPU ”。

這效率低下,但是可以使用6.8.x之后的任何版本的Condor來完成。 我實際上在我自己的靜態分區服務器場中使用了這種類型的設置,因此,如果一項作業需要全部使用計算機進行基准測試,則無需重新配置計算機就可以實現。

如果您有興趣了解有關該搶占選項的更多信息,請告訴我,我可以為您指出在condor-user列表檔案中的一些進一步的配置閱讀。

解決方案是利用以下事實:即使DAGMan尚未運行,您也可以在運行DAGMan的同時修改提交描述。 假設A -> B -> C的簡單DAG。 如果希望所有節點都在同一主機上運行,​​則可以執行以下操作:

  1. 在節點A上定義POST腳本。

  2. 后腳本在condor_history中搜索完成的節點A的ClusterId。類似condor_history -l -attribute LastRemoteHost -m1 $JOB_ID ...您需要清理輸出,而不必清理,但是您將剩下運行節點A的主機。

  3. 然后,發布腳本搜索並修改相關的作業提交文件,並在提交文件的頂部將作業要求插入其中。 只需確保您逐步建立您的工作要求,以便他們提出新要求(如果有)。

  4. 發布腳本完成后,DAGMan將尋找提交就緒節點的機會,在此示例中,我們有一個: B 現在,將使用您在步驟3中添加的新要求來完成B的提交,以便它將在與A相同的執行主機上運行。

我目前正在從事大量工作。 效果很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM