您好,登錄后才能下訂單哦!
使用實(shí)現(xiàn)EHPC完美并行的高效批處理方案的示例分析,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
在高性能計(jì)算場(chǎng)景中,用戶一次業(yè)務(wù)計(jì)算可以劃分為大量的任務(wù),每個(gè)任務(wù)的處理邏輯相同,但是輸入文件、參數(shù)設(shè)置和輸出文件不同。由于每個(gè)任務(wù)處理邏輯相似,執(zhí)行時(shí)彼此沒(méi)有依賴(lài),按照高性能計(jì)算的并行計(jì)算模式,可歸為 “embarrassing parallel”一類(lèi)(又被稱(chēng)為完美并行問(wèn)題),這類(lèi)問(wèn)題很少或根本不需要將問(wèn)題分成許多并行任務(wù)的工作,通這些并行任務(wù)之間很少或沒(méi)有依賴(lài)或需要通信,這類(lèi)問(wèn)題有一個(gè)另外的名稱(chēng),叫做“批處理”,是高性能計(jì)算領(lǐng)域最“完美”的一種場(chǎng)景。在此,給出了基于阿里云彈性高性能計(jì)算場(chǎng)景的數(shù)組作業(yè)解決方案——利用E-HPC集成的作業(yè)調(diào)度系統(tǒng),將用戶的批處理任務(wù)自動(dòng)分配到數(shù)組作業(yè),實(shí)現(xiàn)在云超算集群上高并發(fā)執(zhí)行。同時(shí),依靠“云”彈性,動(dòng)態(tài)擴(kuò)展集群的計(jì)算資源,控制批處理的完成時(shí)間。
先通過(guò)一個(gè)示例介紹批處理的場(chǎng)景,然后討論高性能計(jì)算集群以及數(shù)組作業(yè)。
在高性能計(jì)算領(lǐng)域中,存在大批量、可同時(shí)處理的計(jì)算場(chǎng)景,如以下freebayes應(yīng)用場(chǎng)景,不同任務(wù)均使用freebayes應(yīng)用程序,但是每個(gè)任務(wù)處理不同的輸入文件(--bam-list)、不同的參數(shù)(-r)和不同的結(jié)果文件(--vcf)。由于作業(yè)量巨大,需要任務(wù)的并發(fā)執(zhí)行,以縮短任務(wù)處理時(shí)間。
高性能計(jì)算集群是將大量的計(jì)算節(jié)點(diǎn)通過(guò)網(wǎng)絡(luò)互聯(lián),進(jìn)行統(tǒng)一的管理和調(diào)度,為大規(guī)模應(yīng)用運(yùn)行提供計(jì)算環(huán)境,包括賬號(hào)管理、調(diào)度管理、文件系統(tǒng)、集群監(jiān)控等模塊。
由于集群包含大量計(jì)算節(jié)點(diǎn),通常為多個(gè)用戶共同使用,每個(gè)用戶可以提交多個(gè)作業(yè),每個(gè)作業(yè)需要一個(gè)或多個(gè)計(jì)算節(jié)點(diǎn)。集群資源的分配是由調(diào)度管理協(xié)調(diào),以避免資源使用沖突,常用的調(diào)度管理軟件包括PBS,Slurm,SGE,LSF等。
數(shù)組作業(yè)是一組作業(yè)的集合,可以執(zhí)行一條提交作業(yè)的命令,提交作業(yè)集合中的所有作業(yè),每個(gè)作業(yè)用各自的index取值進(jìn)行區(qū)分。
如使用PBS調(diào)度器提交1個(gè)數(shù)組作業(yè),文件名為 qjob.sh,內(nèi)容如下:
#!/bin/bash #PBS -N arrjob # 作業(yè)名稱(chēng) #PBS -l nodes=1:ppn=1 # 每個(gè)作業(yè)需要1個(gè)計(jì)算節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)1個(gè)核的資源 #PBS -J 1-3 # 數(shù)組作業(yè)的作業(yè)編號(hào)為1,2,3 echo $PBS_ARRAY_ID # 每個(gè)作業(yè)的編號(hào)在PBS_ARRAY_ID 環(huán)境變量中
qjob.sh腳本定義了一個(gè)數(shù)組作業(yè),包含3個(gè)作業(yè)。作業(yè)編號(hào)范圍用-J
指定,取值為1-3。在具體作業(yè)執(zhí)行時(shí),每個(gè)作業(yè)的編號(hào)通過(guò)環(huán)境變量$PBS_ARRAY_ID
獲取。通過(guò)以下命令就可以提交qjob.sh 作業(yè):
qsub ./qjob.sh
此時(shí),創(chuàng)建了3個(gè)作業(yè),而作業(yè)能否立刻執(zhí)行,需要調(diào)度器根據(jù)集群空閑資源和作業(yè)的資源需求來(lái)定。若資源充裕,3個(gè)作業(yè)可以同時(shí)運(yùn)行。
從批處理和數(shù)組作業(yè)介紹看,數(shù)組作業(yè)適用批處理計(jì)算的場(chǎng)景,但做到簡(jiǎn)易使用,還存在以下問(wèn)題:
批處理任務(wù)與作業(yè)的對(duì)應(yīng)關(guān)系?當(dāng)任務(wù)數(shù)量巨大時(shí),是一個(gè)任務(wù)就是一個(gè)作業(yè),還是一個(gè)作業(yè)包含多個(gè)任務(wù)?
如何從$PBS_ARRAY_ID
到不同任務(wù)的關(guān)聯(lián)?并能夠方便對(duì)應(yīng)不同任務(wù)的不同參數(shù)?
如何跟蹤任務(wù)的執(zhí)行情況?如何方便查看任務(wù)日志?在個(gè)別任務(wù)執(zhí)行失敗后,如何能夠快速的篩選,并在調(diào)整后重新執(zhí)行?
為此,我們給出使用數(shù)組作業(yè)解決批處理的方案,包括批處理任務(wù)到作業(yè)分配、批處理任務(wù)定義和任務(wù)運(yùn)行及追蹤功能。
當(dāng)批處理任務(wù)數(shù)目巨大時(shí),如果每個(gè)任務(wù)都分配一個(gè)作業(yè),調(diào)度器的負(fù)載就加重,雖然調(diào)度器能夠顯示不同作業(yè)的運(yùn)行狀態(tài),作業(yè)數(shù)目過(guò)大,也會(huì)導(dǎo)致查看不方便。此外,相鄰任務(wù)在一個(gè)節(jié)點(diǎn)執(zhí)行,如果使用相同文件,可以重用節(jié)點(diǎn)的本地緩存。
為此,若任務(wù)數(shù)為Nt,作業(yè)數(shù)為Nj,每個(gè)作業(yè)處理的任務(wù)數(shù)為 Nt/Nj,如果不能整除,作業(yè)編號(hào)小于Nt%Nj的作業(yè)多處理一個(gè)任務(wù)。如之上批處理任務(wù),如果Nt/Nj=2,但不能整除,作業(yè)編號(hào)小的作業(yè)會(huì)處理3個(gè)任務(wù),而編號(hào)大的作業(yè),會(huì)處理2個(gè)任務(wù)。
從批處理任務(wù)示例中我們可以看出,每個(gè)任務(wù)進(jìn)行部分參數(shù)不同,若將這些變化的部分用變量代替,則批處理任務(wù)的處理腳本為(存放在文件 task.sh中):
$ cat task.sh #!/bin/bash echo "process $bamlist and $chrvar" #other shell commands 如通過(guò)cd $bamlist freebayes --bam-list $bamlist -r $chrvar --vcf /home/user/result/out-$bamlist.vcf ret=$? # 保留主要程序的退出狀態(tài) # other shell commands # ... ... exit $ret # 任務(wù)執(zhí)行狀態(tài),0為成功,非0表示失敗
其中,用$bamlist
表示 --bam-list 選項(xiàng)的變化取值和--vcf參數(shù)取值的變化部分,用$chrvar
表示 -r選型的變化取值。
將具體變化的取值,存儲(chǔ)在變量名同名的文件中,每一行代表不同的取值,示例中有2個(gè)變量,因此需要兩個(gè)文件——bamlist和chrvar。
$ cat bamlist bam1_100 bam101_200 bam201_300 bam301_400 bam401_500 bam501_600 bam601_700 bam701_800 bam801_900 ... ... bam901_1000 bam1001_1100
$ cat chrvar chr01:1-1000 chr01:1001-2000 chr03:100-200 chr12:1000-2000 chr02:100-1100 chr03:1000-2000 chr05:1000-2000 chr08:1000-2000 chr08:3000-6000 ... ... chr01:8000-9000 chr06:1000-2000
在批處理任務(wù)定義后之后,需要實(shí)現(xiàn)任務(wù)與作業(yè)映射、變量文件的解析和賦值。這些通用功能,E-HPC提供了ehpcarrayjob.py
python 腳本,進(jìn)行處理,數(shù)組作業(yè)的腳本名若為qjob.sh,其內(nèi)容為:
$ cat qjob.sh #!/bin/bash PBS -N bayes.job #PBS -l nodes=1:ppn=1 #PBS -J 1-Nj cd $PBS_O_WORKDIR # 表示打開(kāi)提交作業(yè)的目錄。 python ehpcarrayjob.py -n Nj -e ./task.sh bamlist chrvar
通過(guò)qsub命令提交到集群上,有PBS進(jìn)行調(diào)度,實(shí)現(xiàn)批量執(zhí)行(其中Nj為作業(yè)的數(shù)目,根據(jù)需求進(jìn)行替換)。
$ python ehpcarrayjob.py -h usage: ehpcarrayjob.py [-h] -n NJOBS -e EXECFILE argfiles [argfiles ...] positional arguments: argfiles optional arguments: -h, --help show this help message and exit -n NJOBS, --njobs NJOBS number of jobs -e EXECFILE, --execfile EXECFILE job command file
其中:
-n表示有多少個(gè)作業(yè)
-e指明每個(gè)任務(wù)的處理腳本(需要帶路徑)
argfiles 一個(gè)或多個(gè),指定多個(gè)參數(shù)文件。
作業(yè)提交后,數(shù)組作業(yè)會(huì)分配一個(gè)作業(yè)id,如“1[].manager”,每個(gè)子作業(yè)都有自己的子作業(yè)編號(hào),如從1-Nj。
ehpcarrayjob.py會(huì)生成以”作業(yè)id“為名的目錄(如1[].manager),每個(gè)子作業(yè)在該目錄下有“l(fā)og.子作業(yè)編號(hào)”命名的日志文件,記錄每個(gè)作業(yè)的執(zhí)行情況。
當(dāng)任務(wù)的返回作狀態(tài)為非0(失?。r(shí),會(huì)將任務(wù)變量的取值在”作業(yè)id“目錄下記錄到名為”fails.變量名.子作業(yè)編號(hào)“的文件中。待確定失敗原因,修改處理腳本后,方便重新提交作業(yè)。
站在用戶的角度,每次數(shù)值計(jì)算任務(wù)來(lái)了,除了要?jiǎng)澐趾门康娜蝿?wù),即使有遺留的腳本,還需要改寫(xiě)每個(gè)任務(wù)的處理腳本。
此外,還要面對(duì)以下運(yùn)行場(chǎng)景的問(wèn)題:
這次計(jì)算需要多少資源?
到那里找這些資源?
任務(wù)能運(yùn)行起來(lái)嗎,出錯(cuò)了怎么找原因?
任務(wù)會(huì)不會(huì)重算、漏算?
機(jī)器利用能不能銜接上,會(huì)不會(huì)出現(xiàn)長(zhǎng)時(shí)間空閑?
使用阿里云彈性高性能計(jì)算(E-HPC)的批處理處理方案可以解決以上問(wèn)題,讓工作更專(zhuān)注。
可以看出,借助E-HPC方案用戶僅需要通過(guò)以下幾個(gè)步驟:
將批處理任務(wù)中變化的取值提取出來(lái),單獨(dú)存儲(chǔ)到一個(gè)文件中,文件名符合shell規(guī)范,如bamlist, chrvar。
編寫(xiě)任務(wù)處理的腳本,使用變量名(文件名同名)替換任務(wù)中的變化取值,如task.sh。
編寫(xiě)數(shù)組作業(yè)腳本,指明每個(gè)作業(yè)的資源需求,總作業(yè)數(shù),調(diào)用 ehpcarrayjob.py啟動(dòng)批處理任務(wù)執(zhí)行,如qjob.sh。
用qsub提交作業(yè),進(jìn)入”作業(yè)id“的目前查看任務(wù)處理進(jìn)度以及又問(wèn)題的任務(wù)列表。作業(yè)的運(yùn)行狀態(tài)根據(jù)集群的資源狀態(tài)進(jìn)行判斷,如果集群節(jié)點(diǎn)充足,所有作業(yè)均可以運(yùn)行;如果資源不滿足,少量作業(yè)可以先執(zhí)行。
同時(shí)E-HPC“云”超算方案還有以下優(yōu)勢(shì):
具備HPC集群原有特性,方便用戶登陸集群進(jìn)行編譯和調(diào)試單個(gè)任務(wù)的處理邏輯,并通過(guò)E-HPC內(nèi)置應(yīng)用級(jí)監(jiān)控模塊集諦進(jìn)行監(jiān)控、分析、優(yōu)化應(yīng)用運(yùn)行行為。
借助E-HPC,可以直接將配置好的環(huán)境擴(kuò)展到新加的計(jì)算節(jié)點(diǎn)上。同時(shí),使用低配置的登陸和管控節(jié)點(diǎn)長(zhǎng)久保留已配置環(huán)境。
根據(jù)當(dāng)前的任務(wù)處理效率,在“云”上動(dòng)態(tài)地更換計(jì)算實(shí)例類(lèi)型,并擴(kuò)充計(jì)算資源來(lái)調(diào)整任務(wù)的處理時(shí)間,以應(yīng)對(duì)緊急的任務(wù)處理。
看完上述內(nèi)容,你們掌握使用實(shí)現(xiàn)EHPC完美并行的高效批處理方案的示例分析的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。