最近需要用到集群做實(shí)驗(yàn),學(xué)習(xí)下集群相關(guān)的內(nèi)容。
什么是服務(wù)器集群
服務(wù)器集群其實(shí)就是將很多服務(wù)器(或者簡(jiǎn)單理解為主機(jī))集中起來一起進(jìn)行同一種服務(wù),在客戶端看來就像是只有一個(gè)服務(wù)器。集群可以利用多個(gè)計(jì)算機(jī)進(jìn)行并行計(jì)算從而獲得很高的計(jì)算速度,也可以用多個(gè)計(jì)算機(jī)做備份,若使用過程中任何一個(gè)機(jī)器壞了,整個(gè)系統(tǒng)不影響正常使用,但是如果同時(shí)壞的機(jī)器過多,一般是半數(shù)以上,則需要維修了。
集群各服務(wù)器節(jié)點(diǎn)間通過高性能的互連網(wǎng)絡(luò)連接;各節(jié)點(diǎn)除了可以作為一個(gè)單一的計(jì)算資源供交互式用戶使用外,還可以協(xié)同工作并表現(xiàn)為一個(gè)單一的、集中的計(jì)算資源供并行計(jì)算任務(wù)使用。
集群的硬件基礎(chǔ)
1 集群一般配制刀片計(jì)算節(jié)點(diǎn)的CPU或GPU作為計(jì)算節(jié)點(diǎn)
系統(tǒng)配備并行文件系統(tǒng),各組刀片機(jī)之間的網(wǎng)絡(luò)連接
系統(tǒng)配制登陸管理節(jié)點(diǎn)(一個(gè)性能強(qiáng)大的主機(jī),類似臺(tái)式機(jī),主要負(fù)責(zé)管理節(jié)點(diǎn),計(jì)算一般放在GPU上進(jìn)行,另外配的有專門的存儲(chǔ)裝置,一般容量TB為計(jì)量),部署的集群管理系統(tǒng)。用戶可根據(jù)登錄節(jié)點(diǎn)IP,登錄集群,提交作業(yè),編譯程序。
資源信息簡(jiǎn)表
計(jì)算資源信息如下表。
1 會(huì)將整個(gè)集群劃分為若干個(gè)隊(duì)列(Queue),并根據(jù)隊(duì)列的資源配置情況進(jìn)行相應(yīng)的命名;
2 每個(gè)隊(duì)列下有若干個(gè)計(jì)算節(jié)點(diǎn)(nodes),每個(gè)計(jì)算節(jié)點(diǎn)配制若干個(gè)CPU(ppn);
3 對(duì)集群的一些其他信息說明和限制情況說明,如,CPU的型號(hào)和核數(shù),用戶可提交的作業(yè)樹,每個(gè)作業(yè)的最大運(yùn)行時(shí)間等。
在往集群上投遞任務(wù)之前,首先要了解一下,該任務(wù)所需的計(jì)算資源是否能被集群所滿足。
PBS((Portable Batch System)任務(wù)管理系統(tǒng)
PBS 是一種常用的作業(yè)管理系統(tǒng),其他類似的還有 LSF 和 SLURM。PBS會(huì)根據(jù)一個(gè)集群上的可用計(jì)算節(jié)點(diǎn)的計(jì)算資源管理和調(diào)度所有計(jì)算作業(yè)(無(wú)論是批處理作業(yè)還是交互式作業(yè))。
PBS的目前包括openPBS, PBS Pro和Torque三個(gè)主要分支. 其中OpenPBS是最早的PBS系統(tǒng), 目前已經(jīng)沒有太多后續(xù)開發(fā),PBS pro是PBS的商業(yè)版本, 功能最為豐富. Torque是Clustering公司接過了OpenPBS, 并給與后續(xù)支持的一個(gè)開源版本。
其中,開源版本Torque主要包含下面的進(jìn)程:
1 PBS服務(wù)守護(hù)進(jìn)程: pbs_server 負(fù)責(zé)接收作業(yè)提交,位于服務(wù)節(jié)點(diǎn)
2 PBS調(diào)度守護(hù)進(jìn)程: pbs_sched 負(fù)責(zé)調(diào)度作業(yè),位于服務(wù)節(jié)點(diǎn)
3 PBS MOM守護(hù)進(jìn)程: pbs_mom 負(fù)責(zé)監(jiān)控本機(jī)并執(zhí)行作業(yè),位于所有計(jì)算節(jié)點(diǎn)
PBS — Torque 安裝配置步驟
1 在 master(管理結(jié)點(diǎn)上)解壓安裝包
[root@master tmp]# tar zxvf torque-2.3.0.tar.gz
2 進(jìn)入到解壓后的文件夾
[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
3 生成后面安裝計(jì)算節(jié)時(shí)需要的5個(gè)腳本文件, 作為在其它機(jī)器上安裝用的安裝包,運(yùn)行完后會(huì)生成幾個(gè)torque-package-*.sh文件
[root@master torque-2.3.0]# make packages
4 初始化配置
[root@master torque-2.3.0]# sudo ./torque.setup wangwei #設(shè)置wangwei用戶為管理用戶
5 設(shè)置計(jì)算節(jié)點(diǎn)
配置 /var/spool/torque/server_priv/nodes 文件(如果沒有就手動(dòng)添加),指定哪些節(jié)點(diǎn)作為計(jì)算節(jié)點(diǎn),若管理節(jié)點(diǎn)不參與計(jì)算則去掉ww-master
ww-master np=8
ww-slave1 np=8
ww-slave2 np=8
6 Torque主要是由三個(gè)主要部件組成
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è),位于所有計(jì)算節(jié)點(diǎn)上
# sudo pbs_server //在服務(wù)器節(jié)點(diǎn)執(zhí)行
# sudo pbs_sched //在服務(wù)器節(jié)點(diǎn)執(zhí)行
# sudo pbs_mom //在計(jì)算節(jié)點(diǎn)執(zhí)行
# sudo trqauthd
源碼安裝命令細(xì)節(jié)(這種最好就是root權(quán)限了,不然有些包,無(wú)法安裝)
linux下,源碼的安裝一般由3個(gè)步驟組成:配置(configure)、編譯(make)、安裝(make install)
./configure的作用是檢測(cè)系統(tǒng)配置,生成makefile文件,以便你可以用make和make install來編譯和安裝程序。
./configure --prefix --with;其中–prefix指的是安裝路徑,–with指的是安裝本文件所依賴的庫(kù)文件
如果不指定prefix,則可執(zhí)行文件默認(rèn)放在/usr/local/bin,庫(kù)文件默認(rèn)放在/usr/local/lib,配置文件默認(rèn)放在/usr/local/etc。其它的資源文件放在/usr /local/share
./configure是源代碼安裝的第一步,主要的作用是對(duì)即將安裝的軟件進(jìn)行配置,檢查當(dāng)前的環(huán)境是否滿足要安裝軟件的依賴關(guān)系,但并不是所有的tar包都是源代碼的包,
你先ls,看有沒有configure或者makefile文件。
如果有configure,就./configure,有很多參數(shù)。如果系統(tǒng)環(huán)境合適,就會(huì)生成makefile,否則會(huì)報(bào)錯(cuò)。
如果有makefile,就直接make,然后make install。
PBS常用命令(有些商業(yè)集群,相關(guān)命令已改變,即以下的命令可能不完全適用于您的集群)
查看節(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))
其中使用 qstat 列出所有節(jié)點(diǎn)的狀態(tài),包含下面的信息
主要會(huì)包括以下幾個(gè)方面信息:
Job ID 任務(wù)ID號(hào)
Name 任務(wù)腳本名稱
User 用戶名
Time Use 任務(wù)運(yùn)行時(shí)間
S State 任務(wù)狀態(tài)
B 只用于任務(wù)向量,表示任務(wù)向量已經(jīng)開始執(zhí)行
E 任務(wù)在運(yùn)行后退出
H 任務(wù)被服務(wù)器或用戶或者管理員阻塞
Q 任務(wù)正在排隊(duì)中,等待被調(diào)度運(yùn)行
R 任務(wù)正在運(yùn)行
S 任務(wù)被服務(wù)器掛起,由于一個(gè)更高優(yōu)先級(jí)的任務(wù)需要當(dāng)前任務(wù)的資源
T 任務(wù)被轉(zhuǎn)移到其它執(zhí)行節(jié)點(diǎn)了
U 由于服務(wù)器繁忙,任務(wù)被掛起
W 任務(wù)在等待它所請(qǐng)求的執(zhí)行時(shí)間的到來(qsub -a)
X 只用于子任務(wù),表示子任務(wù)完成
C 表示程序正在被關(guān)閉,一般是程序運(yùn)行錯(cuò)誤,報(bào)錯(cuò)
Queue 任務(wù)執(zhí)行所在隊(duì)列
qstat -q (列出隊(duì)列使用信息)
qstat -n (列出隊(duì)列中使用的節(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è)移動(dòng)到另一個(gè)隊(duì)列
qalter: 更改作業(yè)資源屬性
修改pbs隊(duì)列:
將任務(wù)號(hào)為JOBID的任務(wù),轉(zhuǎn)移到Batch5 隊(duì)列繼續(xù)排隊(duì)
qalter <JOBID> -W queue=Batch5
改變cpu數(shù)量:
qalter -l nodes=1:ppn=10 <JOBID>
qalter pbs
刪除任務(wù)
qdel jobid (取消任務(wù))
任務(wù)提交qsub
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隊(duì)列,所需資源為,1個(gè)節(jié)點(diǎn),節(jié)點(diǎn)使用1個(gè)cpu, 40GB物理內(nèi)存,該任務(wù)命名jobname
更多命令
-N 任務(wù)名稱
-q 指定Queue
-l resource_list 指定任務(wù)所需資源
一般包括:
* cput=N, 請(qǐng)求N秒CPU時(shí)間,N也可以寫成hh:mm::ss,單位分別是 時(shí):分:秒
* mem=N[K|M|G|][B|W], 請(qǐng)求N大小的內(nèi)存
* nodes=N, N個(gè)節(jié)點(diǎn)
* ppn=M, 每個(gè)節(jié)點(diǎn)需要M個(gè)cpu
-e path 將標(biāo)準(zhǔn)錯(cuò)誤重定向到path
-o path 標(biāo)準(zhǔn)輸出重定向到path
-j join 將標(biāo)準(zhǔn)輸出信息與標(biāo)準(zhǔn)錯(cuò)誤信息合并到同一個(gè)文件join中去
-p priority 任務(wù)優(yōu)先級(jí),整數(shù),無(wú)定義默認(rèn)0
-m mail_options mail_option =a:左右abort時(shí)給用戶發(fā)信;=b:作業(yè)開始時(shí)發(fā)信;=e:作業(yè)結(jié)束時(shí)發(fā)信. 默認(rèn)=a
2 PBS通過sh腳本執(zhí)行命令
在 PBS 腳本中以 #PBS 方式指定
在PBS系統(tǒng)中,用戶使用qsub命令提交用戶程序。用戶運(yùn)行程序的命令 以及 PBS環(huán)境變量設(shè)置 共同組成了PBS作業(yè)腳本。
注釋為 “#” 開頭
PBS指令為 “#PBS” 開頭
shell命令 (運(yùn)行腳本的命令)
#參數(shù)解析
#指定節(jié)點(diǎn)數(shù)目 ppn指每個(gè)節(jié)點(diǎn)運(yùn)行的cpu數(shù)量(4個(gè)小節(jié)點(diǎn),每個(gè)48個(gè)CPU)
#PBS -l nodes=1:ppn=16
#指定合并到標(biāo)準(zhǔn)輸出文件中
#PBS -j oe
#設(shè)置程序運(yùn)行的最大時(shí)間192小時(shí)
#PBS -l walltime=192:00:00
#指定qsub的所有環(huán)境變量都傳遞到批處理作業(yè)中
#PBS -V
#輸出文件
#PBS -o /public/home/tang/chaim/back_info/$jobname.out
#錯(cuò)誤輸出文件
#PBS -e /public/home/tang/chaim/back_info/$jobname.err
cd PBS_O_OUTDIR
# 程序執(zhí)行命令
python script.py -i inputdir -o outdir
執(zhí)行腳本命令
# 執(zhí)行腳本
qsub run.sh
# 制定命令開始運(yùn)行的時(shí)間
qusb -a 070000 run.s #7天后運(yùn)行程序,此時(shí)是處于W狀態(tài)(等待狀態(tài))
qsub -a 2400 run.s #24h后運(yùn)行程序
3 通過交互式的方式執(zhí)行任務(wù)
[#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 ~]$
$
4 PBS常用環(huán)境變量
PBS_ENVIRONMENT:批處理作業(yè)為 PBS_BATCH,交互式作業(yè)為 PBS_INTERACTIVE
PBS_JOBID:PBS 系統(tǒng)給作業(yè)分配的標(biāo)識(shí)號(hào)
PBS_JOBNAME:用戶指定的作業(yè)名稱
PBS_NODEFILE:包含作業(yè)所用計(jì)算節(jié)點(diǎn)的文件名
PBS_QUEUE:作業(yè)所執(zhí)行的隊(duì)列名稱
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è)的最初隊(duì)列名稱
PBS_O_WORKDIR:執(zhí)行 qsub 命令所在的絕對(duì)路徑文章來源:http://www.zghlxwxcb.cn/news/detail-721455.html
REF:http://events.jianshu.io/p/45e3f88086f3#1675845949194文章來源地址http://www.zghlxwxcb.cn/news/detail-721455.html
到了這里,關(guān)于【科普】集群基礎(chǔ)和PBS任務(wù)管理常用命令的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!