我在台灣杉三號上使用了224核心,為什麼是在6個節點上執行?而不是在預期的4個節點上執行?
台灣杉三號為泛用型計算主機,提供許多領域不同需求的計算服務,每個計算工作需求核心數也不一樣,不一定會完全使用到整個節點的全部56個計算核心,因此就會出現部分節點有閒置核心的情況,造成計算資源零碎不連續分佈。為充分使用這些零碎的計算資源,大部分的排程系統都會有把計算工作派送到這些閒置核心的功能,台灣杉三號在今年(2021)8月啟用此功能。
若您的計算工作沒有特別指定要多少節點或每個節點使用多少核心(--ntasks-per-node),那麼有些計算核心就會被分配到前述的情況的節點上,容易出現一個計算工作在不同的計算節點上有不同的使用核心數(process數),有的節點也許是1核心、有的也許是5核心等不一的情況,造成計算效能低落,甚至是出現結果偏差的情況。
SLURM上與計算核心數/節點數比較相關且常用的設定,有以下4個:
-n, --ntasks=<number>
--ntasks-per-node=<ntasks>
-c, --cpus-per-task=<ncpus>
-N, --nodes=<nodes>
其中--cpus-per-task(-c)預設值是1,只有在執行OpenMP(請注意:OpenMP與OpenMPI不同)計算時才需要設定,其餘時候可以忽略。
--ntasks(-n)、--ntasks-per-node與--nodes(-N) 三者可同時使用或單獨使用,各有不同意義。
a.只指定--ntasks=n,也就是只要mpi processes是n個,不管在幾個節點上執行都可。
b.指定--ntasks=n和--ntasks-per-node=b,每個節點執行b個mpi process,mpi processes總數為n;若不為倍數,最後一個節點上的mpi process數目為餘數
c.指定--ntasks=n和--nodes=N,n個mpi processes平均在N個節點上執行
d.指定--ntasks-per-node=b和--nodes=N,在每個節點上執行b個mpi processes,於N個節點上執行,共有bxN個mpi processes
範例:
1.只指定--ntasks=220,可能會在4個以上的節點上執行。
2.指定--ntasks=220、--ntasks-per-node=56,共會在4個節點上執行,其中三個節點有56個processes、一個是52個processes
3.指定--ntasks=220、--nodes=4,共會在4個節點上執行,每個節點執行55個processes。
4.指定--ntasks-per-node=56、--nodes=4,共會在4個節點上執行,每個節點執行56個processes,共有56x4=224個processes
綜合上述,請依照您的計算模式需求撰寫job script設定,以免出現計算工作派送不如預期的情況,造成您的計算額度浪費。