1. 服務(wù)器集群
服務(wù)器集群就是指將很多服務(wù)器集中起來一起進(jìn)行同一種服務(wù),在客戶端看來就像是只有一個服務(wù)器,集群可以利用多個計算機(jī)進(jìn)行并行計算從而獲得很高的計算速度,也可以用多個計算機(jī)做備份,從而使得任何一個機(jī)器壞了整個系統(tǒng)還是能正常運(yùn)行捅儒。
集群是一組獨(dú)立的計算機(jī)(節(jié)點(diǎn))的集合體,節(jié)點(diǎn)間通過高性能的互連網(wǎng)絡(luò)連接;各節(jié)點(diǎn)除了可以作為一個單一的計算資源供交互式用戶使用外巧还,還可以協(xié)同工作并表現(xiàn)為一個單一的鞭莽、集中的計算資源供并行計算任務(wù)使用。
1.1. 集群系統(tǒng)基本信息
- 集群配制的刀片計算節(jié)點(diǎn)的CPU麸祷,GPU配制情況
- 系統(tǒng)配備的并行文件系統(tǒng)澎怒,各組刀片機(jī)之間的網(wǎng)絡(luò)連接
- 系統(tǒng)配制的登陸管理節(jié)點(diǎn),部署的集群管理系統(tǒng)阶牍。用戶可根據(jù)登錄節(jié)點(diǎn)IP喷面,登錄集群,提交作業(yè)走孽,編譯程序惧辈。
1.2. 集群計算資源列表
- 一般在搭建好集群之后,都會給出集群計算資源列表磕瓷,類似于上圖的幾個部分盒齿。
首先,會將整個集群劃分為若干個隊列(Queue)困食,并根據(jù)隊列的資源配置情況進(jìn)行相應(yīng)的命名边翁; 其次,每個隊列下有若干個計算節(jié)點(diǎn)(nodes)硕盹,每個計算節(jié)點(diǎn)配制若干個CPU(ppn)符匾;最后,就是對集群的一些其他信息說明和限制情況說明莱睁,如,CPU的型號和核數(shù)芒澜,用戶可提交的作業(yè)樹仰剿,每個作業(yè)的最大運(yùn)行時間等。 - 在往集群上投遞任務(wù)之前痴晦,首先要了解一下南吮,該任務(wù)所需的計算資源是否能被集群所滿足。
2. PBS任務(wù)管理系統(tǒng)
2.1 PBS 簡介
PBS (Protable Batch System) 是一種常用的作業(yè)管理系統(tǒng)誊酌,其他類似的還有 LSF 和 SLURM部凑。
- PBS會根據(jù)一個集群上的可用計算節(jié)點(diǎn)的計算資源管理和調(diào)度所有計算作業(yè)(無論是批處理作業(yè)還是交互式作業(yè))。
目前有兩個版本:OpenPBS(開源)和PBSPro(商業(yè))碧浊。TORQUE:基于PBS項目的開源軟件涂邀,可以認(rèn)為是開源的OpenPBS的改進(jìn)版。主要包括:
- PBS Server:運(yùn)行于集群的管理節(jié)點(diǎn)箱锐。創(chuàng)建并接受作業(yè)比勉、修改作業(yè)、激活調(diào)度器(PBS Scheduler)以及通知PBS執(zhí)行器(PBS Moms)執(zhí)行作業(yè)
- PBS Scheduler:根據(jù)資源管理器獲知各個節(jié)點(diǎn)的資源狀況和系統(tǒng)的作業(yè)信息生成相應(yīng)的作業(yè)優(yōu)先級列表
- PBS Moms:每個節(jié)點(diǎn)均有一個后臺進(jìn)程,該進(jìn)程真正啟動和停止提交到該節(jié)點(diǎn)的作業(yè)
2.2 PBS --- Torque 安裝配置步驟 (來自博客)
該部分來自于博客浩聋,只為加深對PBS的理解
1观蜗、在 master(管理結(jié)點(diǎn)上)解壓安裝包
[root@master tmp]# tar zxvf torque-2.3.0.tar.gz
2、進(jìn)入到解壓后的文件夾
配置: ./configure--with-default-server=master
編譯: make
安裝: make install
[root@master torque-2.3.0]# ./configure--with-default-server=master
[root@master torque-2.3.0]# make
[root@master torque-2.3.0]# make install
- 生成后面安裝計算節(jié)時需要的5個腳本文件, 作為在其它機(jī)器上安裝用的安裝包衣洁,運(yùn)行完后會生成幾個torque-package-*.sh文件
[root@master torque-2.3.0]# make packages
- 初始化配置
[root@master torque-2.3.0]# sudo ./torque.setup wangwei #設(shè)置wangwei用戶為管理用戶
- 設(shè)置計算節(jié)點(diǎn)
配置 /var/spool/torque/server_priv/nodes 文件(如果沒有就手動添加)墓捻,指定哪些節(jié)點(diǎn)作為計算節(jié)點(diǎn),若管理節(jié)點(diǎn)不參與計算則去掉ww-master
ww-master np=8
ww-slave1 np=8
ww-slave2 np=8
- 這里需要說明一下坊夫,Torque主要是由三個主要部件組成
pbs_server PBS服務(wù)守護(hù)進(jìn)程砖第,負(fù)責(zé)接收作業(yè)提交,位于服務(wù)節(jié)點(diǎn)上
pbs_sched PBS調(diào)度守護(hù)進(jìn)程践樱,負(fù)責(zé)調(diào)度作業(yè)厂画,位于服務(wù)節(jié)點(diǎn)上
pbs_mom PBS MOM守護(hù)進(jìn)程, 負(fù)責(zé)監(jiān)控本機(jī)并執(zhí)行作業(yè)拷邢,位于所有計算節(jié)點(diǎn)上
# sudo pbs_server //在服務(wù)器節(jié)點(diǎn)執(zhí)行
# sudo pbs_sched //在服務(wù)器節(jié)點(diǎn)執(zhí)行
# sudo pbs_mom //在計算節(jié)點(diǎn)執(zhí)行
# sudo trqauthd
主要步驟大概就這么多袱院,不過一般也不需要自己去配置和安裝。
以上所有代碼均來自別人的博客
linux下瞭稼,源碼的安裝一般由3個步驟組成:配置(configure)忽洛、編譯(make)、安裝(make install)
./configure的作用是檢測系統(tǒng)配置环肘,生成makefile文件欲虚,以便你可以用make和make install來編譯和安裝程序。
./configure --prefix --with悔雹;其中--prefix指的是安裝路徑复哆,--with指的是安裝本文件所依賴的庫文件
如果不指定prefix,則可執(zhí)行文件默認(rèn)放在/usr/local/bin腌零,庫文件默認(rèn)放在/usr/local/lib梯找,配置文件默認(rèn)放在/usr/local/etc。其它的資源文件放在/usr /local/share./configure是源代碼安裝的第一步益涧,主要的作用是對即將安裝的軟件進(jìn)行配置锈锤,檢查當(dāng)前的環(huán)境是否滿足要安裝軟件的依賴關(guān)系,但并不是所有的tar包都是源代碼的包闲询,
你先ls久免,看有沒有configure或者makefile文件。
如果有configure扭弧,就./configure阎姥,有很多參數(shù),看樓下的吧鸽捻。如果系統(tǒng)環(huán)境合適丁寄,就會生成makefile氨淌,否則會報錯。
如果有makefile伊磺,就直接make盛正,然后make install。
2.3 常用PBS命令
查看節(jié)點(diǎn)狀態(tài)
pbsnodes (查看所有節(jié)點(diǎn))
pbsnodes -l free (查看空閑節(jié)點(diǎn))
pbsnodes 某節(jié)點(diǎn) (查看某節(jié)點(diǎn)狀態(tài))節(jié)點(diǎn)切換
ssh 某節(jié)點(diǎn) (轉(zhuǎn)到某節(jié)點(diǎn))退出節(jié)點(diǎn)
exit (離開節(jié)點(diǎn))查看任務(wù)運(yùn)行狀態(tài)
qstat (列出所有作業(yè)運(yùn)行狀態(tài))
主要會包括以下幾個方面信息:
- Job ID 任務(wù)ID號
- Name 任務(wù)腳本名稱
- User 用戶名
- Time Use 任務(wù)運(yùn)行時間
- S State 任務(wù)狀態(tài)
* B 只用于任務(wù)向量屑埋,表示任務(wù)向量已經(jīng)開始執(zhí)行
* E 任務(wù)在運(yùn)行后退出
* H 任務(wù)被服務(wù)器或用戶或者管理員阻塞
* Q 任務(wù)正在排隊中豪筝,等待被調(diào)度運(yùn)行
* R 任務(wù)正在運(yùn)行
* S 任務(wù)被服務(wù)器掛起,由于一個更高優(yōu)先級的任務(wù)需要當(dāng)前任務(wù)的資源
* T 任務(wù)被轉(zhuǎn)移到其它執(zhí)行節(jié)點(diǎn)了
* U 由于服務(wù)器繁忙摘能,任務(wù)被掛起
* W 任務(wù)在等待它所請求的執(zhí)行時間的到來(qsub -a)
* X 只用于子任務(wù)续崖,表示子任務(wù)完成
* C 表示程序正在被關(guān)閉,一般是程序運(yùn)行錯誤团搞,報錯
Queue 任務(wù)執(zhí)行所在隊列
qstat -q (列出隊列使用信息)
qstat -n (列出隊列中使用的節(jié)點(diǎn))
qstat -f jobid (查看jobid任務(wù)的詳細(xì)信息)提交任務(wù)到集群
qsub 文件名.pbs/.sh (提交任務(wù))
echo "script.py" | qsub -l q batch1 -l nodes=1:ppn=2 (直接在終端設(shè)置PBS資源命令严望,并在此資源下提交可執(zhí)行腳本)任務(wù)掛起,釋放逻恐,重新加載
qhold:掛起作業(yè)
qrls:釋放掛起的作業(yè)
qrerun:重新運(yùn)行作業(yè)任務(wù)更改
qmove:將作業(yè)移動到另一個隊列
qalter: 更改作業(yè)資源屬性
修改pbs隊列:
將任務(wù)號為JOBID的任務(wù)像吻,轉(zhuǎn)移到Batch5 隊列繼續(xù)排隊
qalter <JOBID> -W queue=Batch5
改變cpu數(shù)量:
qalter -l nodes=1:ppn=10 <JOBID>
qalter pbs刪除任務(wù)
qdel jobid (取消任務(wù))
2.4 qsub 提交任務(wù)
2.4.1 通過終端提交任務(wù)
- 通過命令行參數(shù)傳遞給 qsub 命令
echo "python script.py -i inputdir -o outdir " | qsub -q Batch1 -l nodes=1:ppn=1 -l mem=40gb -N jobname
執(zhí)行script.py 腳本, 通過pbs投遞任務(wù), 任務(wù)提交到Batch1隊列复隆,所需資源為拨匆,1個節(jié)點(diǎn),節(jié)點(diǎn)使用1個cpu, 40GB物理內(nèi)存挽拂,該任務(wù)命名jobname
- -N 任務(wù)名稱
- -q 指定Queue
- -l resource_list 指定任務(wù)所需資源
一般包括:
* cput=N惭每, 請求N秒CPU時間,N也可以寫成hh:mm::ss亏栈,單位分別是 時:分:秒
* mem=N[K|M|G|][B|W], 請求N大小的內(nèi)存
* nodes=N, N個節(jié)點(diǎn)
* ppn=M, 每個節(jié)點(diǎn)需要M個cpu - -e path 將標(biāo)準(zhǔn)錯誤重定向到path
- -o path 標(biāo)準(zhǔn)輸出重定向到path
- -j join 將標(biāo)準(zhǔn)輸出信息與標(biāo)準(zhǔn)錯誤信息合并到同一個文件join中去
- -p priority 任務(wù)優(yōu)先級台腥,整數(shù),無定義默認(rèn)0
- -m mail_options mail_option =a:左右abort時給用戶發(fā)信绒北;=b:作業(yè)開始時發(fā)信黎侈;=e:作業(yè)結(jié)束時發(fā)信. 默認(rèn)=a
2.4.2 PBS通過sh腳本執(zhí)行命令
- 在 PBS 腳本中以 #PBS 方式指定
在PBS系統(tǒng)中,用戶使用qsub命令提交用戶程序镇饮。用戶運(yùn)行程序的命令 以及 PBS環(huán)境變量設(shè)置 共同組成了PBS作業(yè)腳本蜓竹。 - 注釋為 “#” 開頭
- PBS指令為 “#PBS” 開頭
- shell命令 (運(yùn)行腳本的命令)
例如 run.sh
#參數(shù)解析
#指定節(jié)點(diǎn)數(shù)目 ppn指每個節(jié)點(diǎn)運(yùn)行的cpu數(shù)量(4個小節(jié)點(diǎn)箕母,每個48個CPU)
#PBS -l nodes=1:ppn=16
#指定合并到標(biāo)準(zhǔn)輸出文件中
#PBS -j oe
#設(shè)置程序運(yùn)行的最大時間192小時
#PBS -l walltime=192:00:00
#指定qsub的所有環(huán)境變量都傳遞到批處理作業(yè)中
#PBS -V
#輸出文件
#PBS -o /public/home/tang/chaim/back_info/$jobname.out
#錯誤輸出文件
#PBS -e /public/home/tang/chaim/back_info/$jobname.err
cd PBS_O_OUTDIR
# 程序執(zhí)行命令
python script.py -i inputdir -o outdir
# 執(zhí)行腳本
qsub run.sh
# 制定命令開始運(yùn)行的時間
qusb -a 070000 run.s #7天后運(yùn)行程序储藐,此時是處于W狀態(tài)(等待狀態(tài))
qsub -a 2400 run.s #24h后運(yùn)行程序
2.4.3 通過交互式的方式執(zhí)行任務(wù)
- qsub -I
- qsub -I -q Batch1 -l nodes=1:ppn=1 -l mem=80gb -N jobname
[#11#Rd01@login ~]$
$qsub -I -q Batch1 -l nodes=1:ppn=1 -l mem=80gb -N jobname
qsub: waiting for job 1230615.admin to start
qsub: job 1230615.admin ready
[#1#Rd01@comput4 ~]$
$
2.5 PBS常用環(huán)境變量
- PBS_ENVIRONMENT:批處理作業(yè)為 PBS_BATCH,交互式作業(yè)為 PBS_INTERACTIVE
- PBS_JOBID:PBS 系統(tǒng)給作業(yè)分配的標(biāo)識號
- PBS_JOBNAME:用戶指定的作業(yè)名稱
- PBS_NODEFILE:包含作業(yè)所用計算節(jié)點(diǎn)的文件名
- PBS_QUEUE:作業(yè)所執(zhí)行的隊列名稱
- PBS_O_HOME:執(zhí)行 qsub 命令的 HOME 環(huán)境變量值
- PBS_O_PATH:執(zhí)行 qsub 命令的 PATH 環(huán)境變量值
- PBS_O_SHELL:執(zhí)行 qsub 命令的 SHELL 環(huán)境變量值
- PBS_O_HOST:執(zhí)行 qsub 命令節(jié)點(diǎn)名稱
- PBS_O_QUEUE:提交的作業(yè)的最初隊列名稱
- PBS_O_WORKDIR:執(zhí)行 qsub 命令所在的絕對路徑
Ref