杜翠 程遠水 張千里
1.中國鐵道科學研究院集團有限公司鐵道建筑研究所,北京 100081;
2.中國鐵道科學研究院集團有限公司高速鐵路軌道技術(shù)國家重點實驗室,北京 100081
探地雷達(Ground Penetrating Radar,GPR)是一種快速、無損、高效的地球物理探測方法,廣泛應用于交通設施檢測、地質(zhì)勘察、環(huán)境工程等領域。作為一種高效的淺層地球物理檢測技術(shù),GPR以高頻或超高頻電磁波為信息載體,利用不同介電常數(shù)傳播介質(zhì)之間的界面對電磁波的反射特性和傳播速度變化規(guī)律,對目標物進行探測和定位,具有連續(xù)探測和實時顯示的特點[1]。GPR技術(shù)是鐵路路基、隧道等基礎設施檢測的重要手段[2-4]。隨著鐵路運營里程的迅速增長,GPR數(shù)據(jù)量呈指數(shù)增長趨勢。實現(xiàn)快速、智能的海量GPR數(shù)據(jù)處理與智能識別,為鐵路智能檢測監(jiān)測提供技術(shù)支撐。
GPR數(shù)據(jù)處理技術(shù)在處理中小尺度數(shù)據(jù)集上已經(jīng)相對成熟。但這些技術(shù)絕大部分基于單計算節(jié)點,涉及的算法往往高度串行化[5-6]。此外,已有的實現(xiàn)方法多基于傳統(tǒng)的單機計算機體系結(jié)構(gòu)和計算模型,完全無法適用于當前大內(nèi)存、多源異構(gòu)、高度并行化的硬件架構(gòu)體系。新一代高性能硬件架構(gòu)體系的快速發(fā)展,給海量GPR數(shù)據(jù)快速處理的開展創(chuàng)造了新的機遇。目前,由于地震數(shù)據(jù)規(guī)模較大,已開展了較多基于集群模式的算法并行化研究[7-9],采用了CPU并行、CPU+GPU異構(gòu)并行、Hadoop等技術(shù)。大量高精度、大區(qū)域的GPR檢測數(shù)據(jù)可以利用并行技術(shù)進行處理,極大提高處理效率[10-12]。
本文提出海量GPR數(shù)據(jù)的分布式存儲方法,適應多種文件組成結(jié)構(gòu),提高數(shù)據(jù)I/O效率,研究具有較強適應性和較高擴展性的負載均衡并行技術(shù),建立面向數(shù)據(jù)并行+算法并行的混合并行計算模式。
以高容錯性為特點的分布式文件系統(tǒng)HDFS(Hadoop Distributed File System)可以利用大量廉價PC機組建成一個來存儲超大文件的集群文件系統(tǒng)。當一臺服務器的存儲容量已經(jīng)不能承載需要儲存的數(shù)據(jù)集時,數(shù)據(jù)集會被分成多個塊以分布存儲在機架的各個服務器上。在進行數(shù)據(jù)存儲時,HDFS是以數(shù)據(jù)流的方式寫入的,在實現(xiàn)分布式存儲的同時還具有一次寫入、多次讀取的高效訪問模式。
GPR原始數(shù)據(jù)為非結(jié)構(gòu)化的特定文件格式,如意大利IDS雷達的*.dt格式,中國礦業(yè)大學(北京)GR雷達的*.gpr、*.raw、*.dat格式等。這些文件格式的共同點在于采用二進制存儲,分為文件頭和數(shù)據(jù)道2部分,數(shù)據(jù)道的道頭也包含特定的標記信息。在本文研究中,為適應HDFS分塊存儲的模式,將文件頭信息存入關(guān)系型數(shù)據(jù)庫MySQL中,數(shù)據(jù)道則分塊存儲到HDFS中。
探地雷達數(shù)據(jù)劃分的主要目的是將待處理的探地雷達數(shù)據(jù)合理、均衡地劃分給計算環(huán)境包含的所有計算節(jié)點,使得不同計算節(jié)點承擔的計算任務量大體相當,從而在并行計算開始前盡可能保證負載均衡。數(shù)據(jù)劃分策略的有效性體現(xiàn)在:各計算節(jié)點分配的數(shù)據(jù)盡可能不相交,具有較小的劃分時間消耗比例及均衡的任務量分配比例。如果以原始文件為拆分顆粒度,有時導致單個計算單元過大,且無法動態(tài)調(diào)整,從而不能實現(xiàn)并行計算過程中的負載均衡。
首先,確定不同算法類型包含的數(shù)據(jù)粒度。探地雷達的數(shù)據(jù)特點在于各道數(shù)據(jù)間無依賴關(guān)系,可根據(jù)道號進行切分。根據(jù)不同算法原理,可將GPR信號處理算法中的數(shù)據(jù)粒度設置為單道A-scan較小的B-scan。假如以B-scan為計算單元,則應注意源文件大小或者分布式存儲單塊數(shù)據(jù)量應為B-scan大小的整數(shù)倍,以適應數(shù)據(jù)邊界。
然后,將算法按計算步驟合理拆分為子任務。從數(shù)據(jù)起點開始,沿里程方向逐個數(shù)據(jù)粒度移動,在各個數(shù)據(jù)粒度內(nèi)按照規(guī)則對各個計算單元進行各個子任務的處理,從而完成全部計算。當數(shù)據(jù)粒度為B-scan時,假如單個節(jié)點劃分的數(shù)據(jù)量過大,容易產(chǎn)生物理內(nèi)存不足的情況,從而導致其他節(jié)點等待,無法實現(xiàn)負載均衡。
因此,在任務拆分時,應驗證集群內(nèi)存資源是否滿足數(shù)據(jù)粒度×節(jié)點數(shù)量的需求,從而得出數(shù)據(jù)粒度的最大閾值,并保留一定的冗余空間。
采用Hadoop平臺的MapReduce并行計算框架。MapReduce封裝了并行處理、容錯處理、數(shù)據(jù)本地化優(yōu)化、負載均衡等技術(shù)難點的細節(jié),這使得MapReduce庫易于使用。MapReduce處理數(shù)據(jù)流如圖1所示。數(shù)據(jù)流首先進行分片,與HDFS的分塊大小一致,然后每個分片會分配給用戶定義的map方法進行處理(通過JNI調(diào)用dsp_alg),之后針對reduce的數(shù)量產(chǎn)生對應的輸出分片,得到map方法輸出的<key,value>對后,把相同key值相同的放到一起,最后輸出結(jié)果。
圖1 MapReduce處理數(shù)據(jù)流
Hadoop平臺中以Slot作為計算資源的分配單位,map任務和reduce任務都是在Slot上運行。Slot可以理解為單位計算資源,與CPU對應。由于存在數(shù)據(jù)傾斜或者計算傾斜,每個任務的運行時間不同,可能會出現(xiàn)某個Slot任務完成空閑了,而其他的Slot上還有大量的任務沒有完成。顯而易見,如果此時能夠把其他Slot的任務放到這個Slot上來運行會大大提高系統(tǒng)的資源使用率,同時能夠提升任務的處理效率及系統(tǒng)的吞吐量。
解決方法整體上分靜態(tài)負載均衡和動態(tài)負載均衡兩類。靜態(tài)負載均衡大多是進行算法優(yōu)化,改變用戶程序,使得整個作業(yè)的執(zhí)行時間盡可能降低。這樣的負載均衡一般都是需要對于當前的作業(yè)任務、輸入數(shù)據(jù)特征和各個機器節(jié)點資源有先驗知識。
相比于靜態(tài)負載均衡,動態(tài)負載均衡不需要改變用戶的應用代碼,也不要針對不同的輸入數(shù)據(jù)做算法定制優(yōu)化,系統(tǒng)能夠自動地完成均衡工作。動態(tài)負載均衡關(guān)注的是Slot的空閑與否,在運行時根據(jù)當前運行狀況做出負載分配決策。當系統(tǒng)中出現(xiàn)空閑Slot時,從正在運行的task中挑選一個作為Straggler,即系統(tǒng)中節(jié)點的任務,從計算任務重的Slot中遷移一部分任務到空閑Slot中。
為驗證本文提出的GPR數(shù)據(jù)并行處理方法的應用效果,利用某線路路基檢測數(shù)據(jù)進行測試。測試數(shù)據(jù)集由5個40 000道數(shù)據(jù)的雷達文件組成,執(zhí)行的算法工作流包含背景去噪、增益、一維濾波、二維濾波、滑動平均共5個步驟。Hadoop集群測試環(huán)境見表1,由9個節(jié)點組成,其中1個節(jié)點為主節(jié)點,8個節(jié)點為計算節(jié)點。
表1 Hadoop集群測試環(huán)境
將計算任務拆分為不同大小的顆粒度,計算效率見圖2。可知:當最小顆粒度為單個原始文件(40 000道)時,共耗時9 min 42 s。將雷達文件采用本文方法進行分布式存儲,以支撐任意大小道集的并行顆粒度,切片道數(shù)從640到3 200,計算耗時變化不大,為1 min 13 s~1 min 31 s。通過對并行顆粒度進一步細分,大幅優(yōu)化了計算性能,提升了集群資源的利用率。
圖2 不同顆粒度并行的計算效率對比
對本文采用的動態(tài)負載均衡效果進行測試,測試結(jié)果見表2。可知:場景1設置全部節(jié)點執(zhí)行1次二維濾波算法,耗時31 min27 s;場景2設置全部節(jié)點執(zhí)行2次二維濾波算法,耗時60 min17 s,約為場景1的1.92倍。場景3設置1/2的計算節(jié)點(A類)執(zhí)行1次二維濾波算法,1/2的計算節(jié)點(B類)執(zhí)行2次二維濾波算法。假如采用靜態(tài)負載均衡,將數(shù)據(jù)平均分配至各節(jié)點,則B類節(jié)點耗時將約為A類節(jié)點的2倍,最后運行時間與場景2近似,很明顯這種情況下A類節(jié)點的算力未充分利用。采用本文設計的動態(tài)負載均衡方法,將會有2/3的數(shù)據(jù)流轉(zhuǎn)到A類節(jié)點,1/3的數(shù)據(jù)流轉(zhuǎn)到B類節(jié)點,使得所有節(jié)點的計算量大致相等。場景3耗時42 min 6 s,約為場景1的1.34倍,達到了很好的負載均衡效果。
表2 負載均衡測試結(jié)果
對10 GB數(shù)據(jù)運行二維濾波算法,計算時間與加速比見圖3??芍寒斶M程數(shù)小于物理核數(shù)16時,啟動的進程數(shù)加倍,計算耗時減少接近1/2。當進程數(shù)大于物理核數(shù)時,計算性能只有微小的提升。通過測試集群,在8臺物理服務器計算集群上多進程并行可以使二維濾波性能提升100倍左右(相對于單機單進程)。通過8臺服務器一共8×16核=128核,可知集群并行本身框架調(diào)度數(shù)據(jù)讀寫等有一定的消耗,并不能完全達到實際核數(shù)使用上的性能翻倍。鑒于集群并行計算環(huán)境為Linux,并不運行其他軟件,故可以按照實際物理核數(shù)來設置單服務器的并行數(shù),以獲取最大的性能加速比。
圖3 二維濾波并行計算時間與加速比
隨著鐵路運營里程的快速增長以及檢測頻次的增加,路基、隧道等基礎設施探地雷達檢測數(shù)據(jù)量呈指數(shù)增長,傳統(tǒng)的單機處理模式無法滿足時效性要求。本文設計了GPR數(shù)據(jù)的分布式存儲方法,采用Hadoop平臺的MapReduce并行計算框架,基于動態(tài)負載均衡方法建立了混合并行計算模型,并搭建了9節(jié)點集群環(huán)境進行了測試試驗。對并行顆粒度進一步細分大幅優(yōu)化了計算性能,在模擬迭代算法場景下取得了較好的負載均衡效果,服務器的進程數(shù)可按照實際物理核數(shù)設置,以獲取最大的加速比。在未來的研究中,將探究各類算法的細粒度拆分方法,進一步完善數(shù)據(jù)+算法的混合并行計算模式。