2014-09-03 63 views
1

由於Matlab將如何利用計算集羣資源的限制,我想創建多個作業,每個作業都使用給定節點上的所有核心。我可以將--array選項與其他參數一起使用,以確保我在單獨的節點上獲得每項作業。在sbatch中使用--array和--nodelist

#SBATCH --array=1-2 
#SBATCH -t 24:00:00 
#SBATCH -n 1 
#SBATCH -c 20 
#SBATCH -N 1 
#SBATCH --exclusive 
#SBATCH --mem-per-cpu 4000 

module add ~/matlab/2014a 

srun matlab -nodisplay -r "myfun($SLURM_ARRAY_TASK_ID);quit" 
:但是,由於某種原因,我們的羣集上的SLURM時間表使用-c選項是把上已經在使用的節點我的工作,即使我想最大程度的發揮核心給定節點上

使用--exclusive選項似乎沒有改變任何東西。我一直對單個任務也有同樣的問題,我的解決方法是檢查哪些節點未被使用,並使用--nodelist選項來請求這些節點。有沒有辦法將--array與--nodelist結合使用,以便列表中的每個作業和節點按照一一對應的方式進行匹配?現在SLURM正在嘗試爲每項工作使用所有節點。

回答

1

三種可能性:

  1. 要麼節點有運行SLURM的控制是因爲生病,終止以前的工作,或者是因爲其他用戶不公平集羣使用的外鬼的工作。由於Slurm在分配節點之前沒有檢查節點的負載,因此可以面對您所描述的情況。

  2. 或者的slurm.confShared參數可以設置爲Force' to deny you the use of --exclusive`和超線程可以啓用,導致SLURM要考慮它的每個節點的CPU 40

  3. slurm.confShared參數可以是設置爲Exclusive以外的其他節點,而節點位於兩個不同的分區中,這是導致節點超額訂閱的配置。

使用scontrol show config命令獲取有關配置的更多信息。

+0

'scontrol show config'沒有列出名爲「Shared」的參數,但是'sinfo -l'確實顯示「Share」被列爲所有分區的「Force」。我很好奇你對超線程的評論。我們的簇被設置爲'SelectType = select/cons_res; SelectTypeParameters = CR_CORE_MEMORY'。這意味着我不必要求單個線程,對嗎?我們的節點有20個核心,每個核心有2個線程。所以正確的資源請求將是'-N 1; -c 20'? – Evan 2014-09-09 21:10:11

+0

如果我理解正確,是的,但要確保CPUS列中'sinfo-N1'的輸出確實是20.(Slurm可以配置爲處理硬件線程,就好像它們是實際內核一樣。) – damienfrancois 2014-09-09 21:20:14

+0

啊,所以我檢查了'SelectTypeParameters = CR_CORE_MEMORY'的信息,事實證明,在這種情況下_On具有超線程的節點,每個線程都被視爲CPU以滿足作業的資源需求_。 'sinfo -l -N'確認每個節點的確有40個cpus。設置'-c 40'似乎已經解決了我的問題;我現在似乎正在像我所期望的那樣讓自己獲得節點。謝謝 - 在你的回答中,你是否介意改變「...... Slurm認爲它每節點有20個cpu」到40?我認爲這就是你的意思。 – Evan 2014-09-09 21:50:23