2017-08-25 735 views
1

我發現這讓我在這似乎不過工作我仍然不確定,如果我完全理解爲什麼,所以這個問題的腳本到一些非常類似的問題..SLURM每個節點提交多個任務?

我的問題(例如):在3個節點,我想在每個節點上運行12個任務(總共36個任務)。另外每個任務都使用OpenMP並應使用2個CPU。在我的情況下,一個節點有24個CPU和64GB內存。我的腳本是:

#SBATCH --nodes=3 
#SBATCH --ntasks=36 
#SBATCH --cpus-per-task=2 
#SBATCH --mem-per-cpu=2000 

export OMP_NUM_THREADS=2 

for i in {1..36}; do 
    srun -N 1 -n 1 ./program input${i} >& out${i} & 
done 

wait 

這似乎是工作,因爲我需要,一個節點上連續運行的任務,直到該節點上的所有CPU都在使用,然後繼續運行下一個節點上的進一步任務,直至所有的CPU再次使用等。

我的問題..我不確定這是否實際上是它做的(?),因爲我沒有完全理解srun關於-n的手冊頁,而且我還沒有之前使用過srun。 主要是我的困惑來自於「-n」:在-n的手冊頁中,「默認是每個節點有一個任務,..」,所以我期望如果我使用「srun -n 1」,只有一個任務會可以在每個節點上運行,但似乎並非如此。 此外,當我嘗試如「srun -n 2 ./program」它似乎只運行兩個完全相同的程序兩次不同的任務,而無法使用不同的輸入文件..我想不出爲什麼這會有用?

回答

1

除了必須使用srun的--exclusive選項(在此例中具有不同於sbatch的含義)之外,您的設置是正確的。

至於您對srun的用處的評論,程序的行爲可以根據環境變量$SLURM_TASK_ID或MPI程序情況下的排名進行更改。您的困惑源於您的程序不是寫成並行(來自2個OMP線程),而srun是爲了啓動並行程序,大部分時間基於MPI

1

另一種方法是一次運行所有任務。 由於輸入和輸出文件取決於等級,包裝需要

您SLURM腳本將

#SBATCH --nodes=3 
#SBATCH --ntasks=36 
#SBATCH --cpus-per-task=2 
#SBATCH --mem-per-cpu=2000 

export OMP_NUM_THREADS=2 

srun -n 36 ./program.sh 

和您的包裝program.sh

#!/bin/sh 

exec ./program input${SLURM_PROCID} > out${SLURM_PROCID} 2>&1 
相關問題