1. 程式人生 > >slurm作業管理:一次提交執行多個任務

slurm作業管理:一次提交執行多個任務

針對搶佔式的作業排程系統,如果分配節點時候是獨佔節點,那麼每次申請的資源最少就是1個節點。如何實現一次提交作業,計算多個任務呢?(包括序列、openmp或mpi的任務)。最簡單的方式就是按照自己的需求寫一個執行指令碼,然後通過作業管理系統提交即可。下面給出一個具體的例子加以說明,先給出例項,然後給出詳細解釋:

#!/bin/bash

cd ~/helloworld
yhrun -N1 -n1 ./helloworld &

cd ~/gaussian
export OMP_NUM_THREADS=2 
yhrun -N1 -n1 ./g09

cd ~/vasp
yhrun -N1 -n3 ./vasp &

cd
~/lmp export OMP_NUM_THREADS=3 yhrun -N1 -n2 ./lmp < in.lj & wait

詳細解釋如下:

#!/bin/bash
# 這是一個bash的指令碼
# 腳本里面寫什麼,就會執行什麼
# 我將會申請1個有12cpu核的計算節點,具體如何分配這些核做計算,我自己說了算

# 先用1個核執行一個helloworld吧
cd ~/helloworld # 進入到helloworld所在目錄
yhrun -N1 -n1 ./helloworld &

# yhrun 是天河系列的叢集的"mpirun"
# -N1表示1個節點
# -n1表示一個核
# helloworld 是 可執行程式的名字 # & 表示放到後臺執行(計算節點的後臺),如果不寫的話,指令碼就會卡在這一行, # 直到執行完這一行,才會往下執行。而我們希望同時執行多個任務,所以放到後臺 # 再用2個核,執行一個openmp的程式吧 cd ~/gaussian export OMP_NUM_THREADS=2 yhrun -N1 -n1 ./g09 & # OMP_NUM_THREADS=2 表示用OMP執行緒數=2 # ./g09 是一個openmp程式的名字(舉例) # 再用3個核,執行一個mpi的程式吧 cd ~/vasp yhrun -N1 -n3 ./vasp & # -n3 啟用3個mpi程序,執行mpi任務
# 最後用6個核,執行一個mpi+openmp的程式吧 cd ~/lmp export OMP_NUM_THREADS=3 yhrun -N1 -n2 ./lmp < in.lj & # 設定n=2,omp=3 開啟2個mpi程序,每個mpi程序開啟3個omp執行緒 # ./lmp 是mpi+openmp的程式名 # < in.lj 給定輸入檔案 # 末尾增加 wait # 增加wait,讓指令碼等待以上後臺任務執行結束後再停止 # 不新增的話,指令碼執行到末尾就結束了,作業也就結束了。

當然,其實還有一種更為“精確”的控制每個程序執行哪個任務的高階寫法,但對於普通使用者,一般沒這個需求,故不在此介紹了。如確實有這個需求的歡迎留言。

我的個人網站:傳送門