我有超過200個工作需要提交給sge集羣。我會把它們提交給兩個問題。其中一個問題有一臺我不想提交工作的機器。我如何排除該機器?我發現,可能會有所幫助的唯一的事情是(假設提供給Q1三個有效的節點和所有Q2的可用節點是有效的):不包括來自sge下的qsub命令的節點
qsub -q [email protected] [email protected] [email protected] q2.q
我有超過200個工作需要提交給sge集羣。我會把它們提交給兩個問題。其中一個問題有一臺我不想提交工作的機器。我如何排除該機器?我發現,可能會有所幫助的唯一的事情是(假設提供給Q1三個有效的節點和所有Q2的可用節點是有效的):不包括來自sge下的qsub命令的節點
qsub -q [email protected] [email protected] [email protected] q2.q
有一個很好的繞過了這一點。
生成一個簡單的bash文件:
#!/bin/bash
sleep 6000 #replace 6000 with any long period of time that will be enough to submit your jobs
提交此作業要排除,直到他們完全佔據它的節點。
Wuala,你的節點是排除的。
我發現的最佳方法是在要允許執行的節點上設置自定義資源,然後在提交作業時需要該資源。
在qmon中,轉到「複雜」配置並添加一個新屬性。將名稱設置爲「my_allowed」和快捷方式,例如「m_a」,類型爲BOOL,與==的關係,可請求爲Yes,可以使用否,以及「添加」。將您的更改提交給複雜的配置。
下一步可能更容易從命令行執行,但您也可以在qmon中執行此操作。您需要將您的耗材添加到每臺主機上,以便讓您的作業能夠運行。在qmon中,您可以轉到主機配置,選擇執行主機,然後依次打開每個主機,單擊消耗品/固定屬性選項卡,然後將剛剛配置的新複合體添加爲「True」作爲值。在命令行中,您可以使用「qconf -sel」獲取執行主機的列表。這個列表適合傳遞給循環並挑選出你不想包含的主機。做這樣的事情:
qconf -sel | grep -v host_to_exclude | while read host; do
EDITOR="ed" qconf -me $h <<EOL
/complex_values/s/$/,my_test=True/
w
q
EOL
done
這讓你以編程方式編輯主機(通常不被qconf允許,因爲它想爲你啓動你的編輯器)。它通過將編輯器設置爲「ed」來完成此操作(您必須確保已安裝ed編輯器...先嚐試手動運行它,然後鍵入「q」以脫身)。 ed獲取stdin上的編輯命令列表,所以我們給它三個命令。第一個編輯行上的complex_values包含my_test值。第二個寫出臨時文件,第三個退出編輯。
qsub -q whatever -l my_test=True my_prog.sh
-l選項設置一個上限和my_test =真說,作業只能運行:
一旦你做到了這一點,與需要新的複雜的限制選項提交您的工作主機具有值爲True的複雜my_test。由於該組合系統不是可使用的,所以它仍然可以在每個主機上運行儘可能多的作業(達到主機的插槽限制),但它將避免沒有將my_test組合系統設置爲True的主機。
這是一個黑客,但唯一的解決方案適用於我(+1)。我嘗試了一打qsub變種,但他們要麼沒有區別或導致錯誤.... – DaveFar