使用實現(xiàn)EHPC完美并行的高效批處理方案的示例分析

使用實現(xiàn)EHPC完美并行的高效批處理方案的示例分析,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

公司專注于為企業(yè)提供網(wǎng)站設計制作、成都網(wǎng)站建設、微信公眾號開發(fā)、商城網(wǎng)站建設,微信小程序定制開發(fā),軟件按需設計網(wǎng)站等一站式互聯(lián)網(wǎng)企業(yè)服務。憑借多年豐富的經(jīng)驗,我們會仔細了解各客戶的需求而做出多方面的分析、設計、整合,為客戶設計出具風格及創(chuàng)意性的商業(yè)解決方案,成都創(chuàng)新互聯(lián)公司更提供一系列網(wǎng)站制作和網(wǎng)站推廣的服務。

使用EHPC實現(xiàn)“完美并行”的高效批處理方案

在高性能計算場景中,用戶一次業(yè)務計算可以劃分為大量的任務,每個任務的處理邏輯相同,但是輸入文件、參數(shù)設置和輸出文件不同。由于每個任務處理邏輯相似,執(zhí)行時彼此沒有依賴,按照高性能計算的并行計算模式,可歸為 “embarrassing parallel”一類(又被稱為完美并行問題),這類問題很少或根本不需要將問題分成許多并行任務的工作,通這些并行任務之間很少或沒有依賴或需要通信,這類問題有一個另外的名稱,叫做“批處理”,是高性能計算領域最“完美”的一種場景。在此,給出了基于阿里云彈性高性能計算場景的數(shù)組作業(yè)解決方案——利用E-HPC集成的作業(yè)調(diào)度系統(tǒng),將用戶的批處理任務自動分配到數(shù)組作業(yè),實現(xiàn)在云超算集群上高并發(fā)執(zhí)行。同時,依靠“云”彈性,動態(tài)擴展集群的計算資源,控制批處理的完成時間。

背景介紹

先通過一個示例介紹批處理的場景,然后討論高性能計算集群以及數(shù)組作業(yè)。

批處理

在高性能計算領域中,存在大批量、可同時處理的計算場景,如以下freebayes應用場景,不同任務均使用freebayes應用程序,但是每個任務處理不同的輸入文件(--bam-list)、不同的參數(shù)(-r)和不同的結果文件(--vcf)。由于作業(yè)量巨大,需要任務的并發(fā)執(zhí)行,以縮短任務處理時間。

使用實現(xiàn)EHPC完美并行的高效批處理方案的示例分析

高性能計算集群與數(shù)組作業(yè)介紹

高性能計算集群是將大量的計算節(jié)點通過網(wǎng)絡互聯(lián),進行統(tǒng)一的管理和調(diào)度,為大規(guī)模應用運行提供計算環(huán)境,包括賬號管理、調(diào)度管理、文件系統(tǒng)、集群監(jiān)控等模塊。

由于集群包含大量計算節(jié)點,通常為多個用戶共同使用,每個用戶可以提交多個作業(yè),每個作業(yè)需要一個或多個計算節(jié)點。集群資源的分配是由調(diào)度管理協(xié)調(diào),以避免資源使用沖突,常用的調(diào)度管理軟件包括PBS,Slurm,SGE,LSF等。

數(shù)組作業(yè)是一組作業(yè)的集合,可以執(zhí)行一條提交作業(yè)的命令,提交作業(yè)集合中的所有作業(yè),每個作業(yè)用各自的index取值進行區(qū)分。

如使用PBS調(diào)度器提交1個數(shù)組作業(yè),文件名為 qjob.sh,內(nèi)容如下:

#!/bin/bash

#PBS -N arrjob                 # 作業(yè)名稱
#PBS -l nodes=1:ppn=1         # 每個作業(yè)需要1個計算節(jié)點,每個節(jié)點1個核的資源
#PBS -J 1-3                 # 數(shù)組作業(yè)的作業(yè)編號為1,2,3

echo $PBS_ARRAY_ID             # 每個作業(yè)的編號在PBS_ARRAY_ID 環(huán)境變量中

qjob.sh腳本定義了一個數(shù)組作業(yè),包含3個作業(yè)。作業(yè)編號范圍用-J指定,取值為1-3。在具體作業(yè)執(zhí)行時,每個作業(yè)的編號通過環(huán)境變量$PBS_ARRAY_ID獲取。通過以下命令就可以提交qjob.sh 作業(yè):

qsub ./qjob.sh

此時,創(chuàng)建了3個作業(yè),而作業(yè)能否立刻執(zhí)行,需要調(diào)度器根據(jù)集群空閑資源和作業(yè)的資源需求來定。若資源充裕,3個作業(yè)可以同時運行。

使用數(shù)組作業(yè)解決批處理任務

從批處理和數(shù)組作業(yè)介紹看,數(shù)組作業(yè)適用批處理計算的場景,但做到簡易使用,還存在以下問題:

  1. 批處理任務與作業(yè)的對應關系?當任務數(shù)量巨大時,是一個任務就是一個作業(yè),還是一個作業(yè)包含多個任務?

  2. 如何從$PBS_ARRAY_ID到不同任務的關聯(lián)?并能夠方便對應不同任務的不同參數(shù)?

  3. 如何跟蹤任務的執(zhí)行情況?如何方便查看任務日志?在個別任務執(zhí)行失敗后,如何能夠快速的篩選,并在調(diào)整后重新執(zhí)行?

為此,我們給出使用數(shù)組作業(yè)解決批處理的方案,包括批處理任務到作業(yè)分配、批處理任務定義和任務運行及追蹤功能。

批處理任務到作業(yè)分配

當批處理任務數(shù)目巨大時,如果每個任務都分配一個作業(yè),調(diào)度器的負載就加重,雖然調(diào)度器能夠顯示不同作業(yè)的運行狀態(tài),作業(yè)數(shù)目過大,也會導致查看不方便。此外,相鄰任務在一個節(jié)點執(zhí)行,如果使用相同文件,可以重用節(jié)點的本地緩存。

為此,若任務數(shù)為Nt,作業(yè)數(shù)為Nj,每個作業(yè)處理的任務數(shù)為 Nt/Nj,如果不能整除,作業(yè)編號小于Nt%Nj的作業(yè)多處理一個任務。如之上批處理任務,如果Nt/Nj=2,但不能整除,作業(yè)編號小的作業(yè)會處理3個任務,而編號大的作業(yè),會處理2個任務。

task-map-job.jpg

批處理任務定義

從批處理任務示例中我們可以看出,每個任務進行部分參數(shù)不同,若將這些變化的部分用變量代替,則批處理任務的處理腳本為(存放在文件 task.sh中):

$ cat task.sh
#!/bin/bash
echo "process $bamlist and $chrvar"
#other shell commands 如通過cd $bamlist 
freebayes --bam-list   $bamlist -r $chrvar  --vcf   /home/user/result/out-$bamlist.vcf
ret=$? # 保留主要程序的退出狀態(tài)
# other shell commands
# ... ... 

exit $ret # 任務執(zhí)行狀態(tài),0為成功,非0表示失敗

其中,用$bamlist表示 --bam-list 選項的變化取值和--vcf參數(shù)取值的變化部分,用$chrvar表示 -r選型的變化取值。

將具體變化的取值,存儲在變量名同名的文件中,每一行代表不同的取值,示例中有2個變量,因此需要兩個文件——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

任務運行與追蹤

在批處理任務定義后之后,需要實現(xiàn)任務與作業(yè)映射、變量文件的解析和賦值。這些通用功能,E-HPC提供了ehpcarrayjob.py python 腳本,進行處理,數(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 # 表示打開提交作業(yè)的目錄。

python ehpcarrayjob.py -n Nj -e ./task.sh bamlist chrvar

通過qsub命令提交到集群上,有PBS進行調(diào)度,實現(xiàn)批量執(zhí)行(其中Nj為作業(yè)的數(shù)目,根據(jù)需求進行替換)。

$ 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表示有多少個作業(yè)

-e指明每個任務的處理腳本(需要帶路徑)

argfiles 一個或多個,指定多個參數(shù)文件。

作業(yè)提交后,數(shù)組作業(yè)會分配一個作業(yè)id,如“1[].manager”,每個子作業(yè)都有自己的子作業(yè)編號,如從1-Nj。

ehpcarrayjob.py會生成以”作業(yè)id“為名的目錄(如1[].manager),每個子作業(yè)在該目錄下有“l(fā)og.子作業(yè)編號”命名的日志文件,記錄每個作業(yè)的執(zhí)行情況。

當任務的返回作狀態(tài)為非0(失?。r,會將任務變量的取值在”作業(yè)id“目錄下記錄到名為”fails.變量名.子作業(yè)編號“的文件中。待確定失敗原因,修改處理腳本后,方便重新提交作業(yè)。

總結

站在用戶的角度,每次數(shù)值計算任務來了,除了要劃分好批量的任務,即使有遺留的腳本,還需要改寫每個任務的處理腳本。

此外,還要面對以下運行場景的問題:

這次計算需要多少資源?
 到那里找這些資源?
 任務能運行起來嗎,出錯了怎么找原因?
 任務會不會重算、漏算?
 機器利用能不能銜接上,會不會出現(xiàn)長時間空閑?

使用阿里云彈性高性能計算(E-HPC)的批處理處理方案可以解決以上問題,讓工作更專注。

可以看出,借助E-HPC方案用戶僅需要通過以下幾個步驟:

  1. 將批處理任務中變化的取值提取出來,單獨存儲到一個文件中,文件名符合shell規(guī)范,如bamlist, chrvar。

  2. 編寫任務處理的腳本,使用變量名(文件名同名)替換任務中的變化取值,如task.sh。

  3. 編寫數(shù)組作業(yè)腳本,指明每個作業(yè)的資源需求,總作業(yè)數(shù),調(diào)用 ehpcarrayjob.py啟動批處理任務執(zhí)行,如qjob.sh。

用qsub提交作業(yè),進入”作業(yè)id“的目前查看任務處理進度以及又問題的任務列表。作業(yè)的運行狀態(tài)根據(jù)集群的資源狀態(tài)進行判斷,如果集群節(jié)點充足,所有作業(yè)均可以運行;如果資源不滿足,少量作業(yè)可以先執(zhí)行。

同時E-HPC“云”超算方案還有以下優(yōu)勢:

  1. 具備HPC集群原有特性,方便用戶登陸集群進行編譯和調(diào)試單個任務的處理邏輯,并通過E-HPC內(nèi)置應用級監(jiān)控模塊集諦進行監(jiān)控、分析、優(yōu)化應用運行行為。

  2. 借助E-HPC,可以直接將配置好的環(huán)境擴展到新加的計算節(jié)點上。同時,使用低配置的登陸和管控節(jié)點長久保留已配置環(huán)境。

  3. 根據(jù)當前的任務處理效率,在“云”上動態(tài)地更換計算實例類型,并擴充計算資源來調(diào)整任務的處理時間,以應對緊急的任務處理。

看完上述內(nèi)容,你們掌握使用實現(xiàn)EHPC完美并行的高效批處理方案的示例分析的方法了嗎?如果還想學到更多技能或想了解更多相關內(nèi)容,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

分享題目:使用實現(xiàn)EHPC完美并行的高效批處理方案的示例分析
當前路徑:http://muchs.cn/article16/pdpedg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供關鍵詞優(yōu)化網(wǎng)站建設、品牌網(wǎng)站制作、、網(wǎng)站排名、域名注冊

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化