由於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正在嘗試爲每項工作使用所有節點。
'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
如果我理解正確,是的,但要確保CPUS列中'sinfo-N1'的輸出確實是20.(Slurm可以配置爲處理硬件線程,就好像它們是實際內核一樣。) – damienfrancois 2014-09-09 21:20:14
啊,所以我檢查了'SelectTypeParameters = CR_CORE_MEMORY'的信息,事實證明,在這種情況下_On具有超線程的節點,每個線程都被視爲CPU以滿足作業的資源需求_。 'sinfo -l -N'確認每個節點的確有40個cpus。設置'-c 40'似乎已經解決了我的問題;我現在似乎正在像我所期望的那樣讓自己獲得節點。謝謝 - 在你的回答中,你是否介意改變「...... Slurm認爲它每節點有20個cpu」到40?我認爲這就是你的意思。 – Evan 2014-09-09 21:50:23