參考:
MSI Job Submission and Scheduling (PBS Scripts)
一 介紹
超算系統使用作業隊列來管理 計算任務 的執行。將計算任務提交到作業隊列后,它們將在隊列中等待,直到有可用的適當的計算資源。
常見的排隊系統為PBS(Portable Batch System.)。要將作業提交到PBS隊列,用戶可以創建PBS作業腳本(PBS job scripts)。 PBS作業腳本包含有關計算所需資源的信息,以及用於執行計算的命令。
二 PBS Script格式
PBS作業腳本是一個小型文本文件,其中包含有關作業所需資源的信息,包括時間,節點數和內存。 PBS腳本還包含 讓超算系統執行的命令(commands needed to begin executing the desired computation)。比如linux系統命令(由超算的操作系統決定)。
PBS作業腳本示例:
1 #!/bin/bash -l 2 #PBS -l walltime=8:00:00,nodes=1:ppn=8,mem=10gb 3 #PBS -m abe 4 #PBS -M sample_email@umn.edu 5 cd ~/program_directory 6 module load intel 7 module load ompi/intel 8 mpirun -np 8 program_name < inputfile > outputfile
PBS腳本的第一行定義了將使用哪種shell讀取腳本(系統將如何讀取文件)。建議使第一行#!/ bin / bash -l
用於PBS查詢系統的命令以 #PBS 開頭。
上面的示例腳本中的第二行包含PBS資源請求。該示例作業將需要8個小時,每個節點8個處理器核(ppn),以及10 GB的內存(mem)。資源請求必須包含適當的值;如果請求的時間,處理器或內存不適合硬件,則該作業將無法運行。
包含#PBS -m abe和#PBS -M sample_email@umn.edu的兩行都是與向用戶發送郵件電子郵件有關的命令。這些行的第一行指示PBS系統在作業中止,開始或結束時發送消息電子郵件。第二個命令指定要使用的電子郵件地址。可以使用電子郵件中的信息來分析工作失敗的原因。
樣本PBS腳本的其余部分包含將要開始計算的命令。 PBS腳本應包含適當的更改目錄命令以到達job執行位置(該腳本將在用戶主目錄中啟動)。 PBS腳本還需要包含計算可能需要的任何軟件模塊的模塊加載命令。 PBS腳本的最后幾行包含用於執行計算的命令。在上面的示例中,最后一行包含執行命令,以啟動程序,該程序使用MPI通信在8個處理器內核上運行。
三 提交Script
1. 提交腳本: qsub -q queuename scriptname
quename是提交到的隊列的名稱,scriptname是作業腳本的名稱。 該命令的-q quename部分可以省略,在這種情況下,作業將提交到設置為默認隊列的任何隊列。 或者,可以將隊列規范放在作業腳本中(請參見下文)。
2. 查看提交的任務狀態 qstat -u username
此命令將顯示指定作業的狀態以及相關的作業ID號。 命令qstat本身將顯示系統上的所有作業。
3. 取消提交的作業 qdel jobIDnumber
應使用通過使用qstat命令確定的適當的作業ID號替換jobIDnumber。
四 PBS Script Commands
下表總結了可在PBS作業腳本中使用的一些命令。 前兩個命令(解釋器規范和資源請求)是必需的,而其他命令是可選的。 下面的每個PBS命令都應在PBS腳本內占一行。
PBS command | Effect |
---|---|
#!/bin/bash -l | 如何解讀PBS文件,需要在第一行。Specifies how the PBS file should be read (by the bash interpreter). A statement like this is required to be the first line of a PBS script. |
#PBS -l walltime=2:00:00,nodes=1:ppn=8,pmem=2500mb | 需要的資源。The resource request (required). The resource request must specify the job walltime (hours:minutes:seconds), number of nodes, and processor cores per node (ppn). It is recommended to specify either the required memory per processor core (pmem), or the required total memory (mem). |
#PBS -m abe | 發送郵件。Makes the PBS system send message emails when the job aborts, begins, or ends. |
#PBS -M sample_email@umn.edu | 發送郵件。Specifies the email address that should be used when the PBS system sends message emails. |
#PBS -N jobname | 設定這個任務的名字。Specifies a name for the job that will appear in the job queue. |
#PBS -o output_filename | 輸出文件。Directs the job standard output to be placed in the named file. |
#PBS -e error_filename | 錯誤信息文件。Directs the job error output to be placed in the named file. |
#PBS -q queue_name | 提交到的隊列。Specifies that the job should be run in the named queue. |
(1) PBS 作業腳本選項 (若無-C 選項,則每項前面加‘#PBS’)
-a date_time : date_time 格式為:[[[[CC]YY]MM]DD]hhmm[.SS]
表示經過date_time 時間后作業才可以運行。
-c interval : 定義作業的檢查點間隔,如果機器不支持檢查點,則忽略此選項。
-C directive_prefix :在腳本文件中以directive_prefix 開頭的行解釋為qsub 的命
令選項。(若無此選項,則默認為’#PBS’ )
-e path :將標准錯誤信息重定向到path
-I :以交互方式運行
-j join :將標准輸出信息與標准錯誤信息合並到一個文件join 中去。
-k keep :定義在執行結點上保留標准輸出和標准錯誤信息中的哪個文件。
keep 為o 表示保留前者,e 表示后者,oe 或eo 表示二者都保留,
n 表示皆不保留。若忽略此選項,二者都不保留。
-l resource_list : 定義資源列表。以下為幾個常用的資源種類。
cput=N : 請求N 秒的CPU 時間; N 也可以是hh:mm:ss 的形式。
mem=N[K|M|G][B|W]:請求N {kilo|mega|giga}{bytes|words} 大小的內存。
nodes=N:ppn=M :請求N 個結點,每個結點M 個處理器。
-m mail_options :mail_option 為a:作業abort 時給用戶發信;為b:作業開始運行發信;為e:
作業結束運行時發信。若無此選項,默認為a。
-M user_list : 定義有關此作業的mail 發給哪些用戶。
-N name : 作業名,限15 個字符,首字符為字母,無空格。
-o path : 重定向標准輸出到path。
-p priority : 任務優先級,整數,[-1024,1023],若無定義則為0.
-q destination : destination 有三種形式: queue , @server,queue@server。
-r y|n : 指明作業是否可運行,y 為可運行,n 為不可運行。
-S shell : 指明執行運行腳本所用的shell,須包含全路徑。
-u user_list : 定義作業將在運行結點上以哪個用戶名來運行。
-v variable_list : 定義export 到本作業的環境變量的擴展列表。
-V : 表明qsub 命令的所有環境變量都export 到此作業。
-W additional_attributes : 作業的其它屬性。
-z : 指明qsub 命令提交作業后,不在終端顯示作業號。
(2) 運行腳本同LINUX 下一般的運行腳本文件。
[注]:腳本文件中的mpirun_rsh 命令行中的節點列表文件要用環境變量表示
$PBS_NODEFILE,這個環境變量表示由pbs 自動分配給作業的節點列表;
節點數為命令行中指定的進程數。
格式如下:
mpirun_rsh –np 進程數 –hostfile $PBS_NODEFILE 可執行程序名
五 舉個栗子
pthread2.pbs(用來執行 pthread2.exe文件,並傳遞兩個main函數參數: 10000000 線程數(此處為申請的系統內核數)
#!/bin/bash #PBS -N pthread #PBS -q qstudent #PBS -l nodes=1:ppn=16 #PBS -j oe cd $PBS_O_WORKDIR procs=$(cat $PBS_NODEFILE | wc -l) date +%s.%N #輸出程序開始時間 #./pthread2 1000000000 $procs uname -a date +%s.%N #輸出程序結束時間 #此空行不能省略
提交命令 qsub pthread2.pbs 返回作業ID(此處為20246
查看作業,使用 qstat -R ,C表示完成狀態,Q表示在排隊,R表示在運行 此處任務作業轉台為C運行完了
作業結果保存在文件(name).o(job_id)中,此處為pthread.o20246
通過cat命令查看作業結果文件的內容。