李 楊,李朝奎,方 軍,吳柏燕,陳愛民
(1. 湖南科技大學 地理空間信息技術國家地方聯合工程實驗室,湖南 湘潭 411201;2. 湖南科技大學 地理空間信息湖南省工程實驗室,湖南 湘潭 411201;3. 湘潭市地理空間信息應用工程技術研究中心,湖南 湘潭 411000)
社會經濟的高速發(fā)展對自然環(huán)境的影響日益加劇,造成地質災害頻發(fā)。如何有效監(jiān)測并預警地質災害的發(fā)生、減少災害對人類的損失是一項長期而艱巨的任務。一直以來,很多學者通過建立各種災害預測模型來對地質災害進行預警,比如文獻[1]以模糊綜合評判法和地質-氣象耦合模型為基礎對滑坡災害進行預警;文獻[2]初步建立了較為完善的地質災害綜合監(jiān)測自動預警方法體系,實現了對不同災害類型的自動預警。但上述地質災害預警方法僅限于對單個地質災害點進行災變監(jiān)測與分析預警,對于大范圍地質災害發(fā)生的情況,預警速度很慢,難以保證預警的時效性。采用并行計算的方法對大規(guī)模數據進行快速處理和計算,能有效提高地質災害預警效率,但并行計算架構的構建卻是一個較難解決的問題。首先,地質災害預警所采用的數據是由多種監(jiān)測儀器采集的多源數據,并行計算架構中對多源數據的存儲和調用是需要解決的問題之一;其次,在地質災害并行計算中需要使用到矢量空間數據和多源監(jiān)測數據在計算節(jié)點間的通信[3],這又是需要解決的另一問題;再次,采用怎樣的并行計算方法對計算任務分解能最大限度地達到提高預警效率的目的,同樣是要思考的問題。
當前較為主流的并行計算框架有Hadoop MapReduce、Spark、Phoenix、Disco、Mars等,但這些并行計算框架的共同特點是需要搭建大型的并行計算平臺,而高性能服務器較為昂貴,而且要進行適合多源數據的開發(fā),過程較為復雜。相對于上述并行計算框架,采用基于消息傳遞機制(MPI)的并行計算方法可直接使用MPI提供的接口進行編程實現,使用普通的PC機即可完成并行計算環(huán)境的搭建,同時,使用Socket套接字來進行并行計算節(jié)點間矢量空間數據的傳輸,可避免MPI因信道擁堵而帶來的通信故障,確保了本文倡導的地質災害預警并行計算架構的可行性和穩(wěn)定性。
從算法設計的角度分析,并行計算可分為數據級并行和任務級并行。數據級并行對計算對象進行分解,各線程操作相同,且相互獨立;任務級并行則對計算任務進行分解,每個線程執(zhí)行不同計算任務且依賴其他線程。地質災害預警的計算目標是研究區(qū)內的地質災害隱患點,地質災害隱患點的潛在危險等級受其自身的巖土構成、水系、植被、地勢起伏等因素影響,發(fā)生地質災害的誘發(fā)因素包括降雨、地表位移、深部位移、土體含水率等。因此對每個地質災害隱患點的預警相互獨立且操作相同,在預警數據預處理的基礎上,采用基于數據級任務分解的并行計算方法[4],以地質災害隱患點為計算單元的子任務進行并行計算。
本文著重探討了大范圍地質災害預警并行計算架構的設計與應用中的關鍵技術難題,包括:①搭建地質災害預警并行計算架構;②解決并行計算架構中的關鍵技術問題,包括地質災害預警模型、數據管理、任務監(jiān)控與調度以及節(jié)點通信;③地質災害預警并行計算架構實驗驗證。
根據層次結構劃分,并行計算架構可以劃分為四層,如圖1所示。各層功能如下:
圖1 并行計算架構圖Fig.1 Parallel computing frame
1)數據管理層:矢量空間數據、預警模型相關配置參數、監(jiān)測數據以及預警結果等均存儲在Oracle數據庫中,計算過程中的中間結果在Oracle數據庫創(chuàng)建的臨時表中進行存儲。
2)任務調度層:是整個并行計算架構的核心部分,主要負責將任務分配到各計算節(jié)點上,達到負載均衡的目的。并行計算和傳統的串行計算最大的區(qū)別就是并行計算需要考慮各計算節(jié)點的運行狀態(tài),計算任務在各個節(jié)點的分配以及計算結果的整合等。計算任務在任務提交管理器排隊等待提交,等待集群資源空閑時才可提交計算任務[5]。
3)通信層:對于通訊量較小的算法輸入參數等消息采用MPI進行通信,對于通訊量較大的空間矢量數據采用底層Socket管道進行快速文件傳輸[6]。
4)計算層:主要由并行地質災害預警模型算法模塊組成。各個節(jié)點分別部署一個并行地質災害預警模型算法包。本部分是整個并行計算架構的核心內容,結合MPI多進程技術從底層研發(fā),有效提升并行計算性能[7]。該地質災害預警模型選取了潛勢度算法和模糊綜合評判法對地質災害預警模型進行并行化封裝,其目的是最大限度地提升地質災害預警并行計算的效率。
本文提出的地質災害預警并行計算架構以Oracle為數據庫支撐,MPI和Socket套接字負責并行計算節(jié)點的通信減少人工控制通信的開發(fā)成本,并行計算架構的任務管理與調度采用優(yōu)先隊列式管理,通過Master節(jié)點監(jiān)控集群工作狀態(tài),合理分配任務到各計算節(jié)點,實現負載均衡[8]。本文地質災害預警并行計算架構中,計算任務讀取由串行計算完成;自計算任務由數據級任務分解成子任務開始,直到各執(zhí)行進程分別將計算結果傳回Oracle數據庫的各階段計算工作均由并行計算完成。
1.2.1 地質災害預警算法模型
地質災害預警算法模型如圖2子任務計算[9]部分,首先對預警數據進行預處理操作,剔除未返回監(jiān)測數據的地質災害隱患點,將有監(jiān)測數據的地質災害隱患點根據威脅人口數量的優(yōu)先級進行排序,然后判斷同一個地質災害隱患點返回的監(jiān)測指標種類,若返回的監(jiān)測指標種類未超過兩種則進入單指標預警模型,反之,則進入多指標預警模型對該地質災害隱患點進行預警計算。
圖2 地質災害預警并行計算實現流程圖Fig.2 Parallel computing of geological disaster early warning
1)單指標預警模型
單指標預警模型主要根據研究區(qū)內歷史地質災害的相關經驗[10],對不同監(jiān)測指標的各級預警設定一定的預警閾值,當該監(jiān)測指標的數值達到某個預警閾值時則判定該地質災害隱患點處于該級預警風險等級。
2)多指標預警模型
多指標預警模型主要采用地質災害潛勢度[11]和模糊綜合評判法[12]作為算法依據。
首先,通過地質災害潛勢度計算各地質災害隱患點的地質災害風險等級,計算地質災害潛勢度的值(G)。
式(1)中,qi為各因子權重;Qi為因子定量值(CF值)
然后,將地質災害風險等級作為地質災害預警的評價因子之一,其他評價因子有降雨量,表面位移,深部位移,GNSS位移,含水率,泥位等。模糊評價集[12-15]分為高風險、中風險、低風險和無風險。該方法利用模糊數學的隸屬度理論對收到若干因素影響的事物或對象做出了定量的總體評價,適合地質災害預警分級這樣的非確定性問題的解決[16-19]。
1.2.2 數據級任務分解
數據級任務分解是與任務級任務分解相對而言的,其特點是對計算對象進行分解,各線程操作相同,且相互獨立。地質災害預警的計算目標是研究區(qū)內的地質災害隱患點。地質災害隱患點的潛在危險等級受其自身的巖土構成、水系、植被、地勢起伏等因素影響,發(fā)生地質災害的誘發(fā)因素包括降雨、地表位移、深部位移、土體含水率等。因此對每個地質災害隱患點的預警相互獨立且操作相同,在預警數據預處理的基礎上,以地質災害隱患點為分析計算單元,采用基于數據級任務分解的并行計算方法,對并行計算任務作并行計算是行之有效的途徑。
1.2.3 數據管理
地質災害預警并行計算需要用到的數據包括矢量空間數據、監(jiān)測數據、預警模型參數等,這些數據均存儲在Master服務器的Oracle數據庫中。在并行計算過程中,數據讀操作遠大于寫操作,因此如何快速讀取數據而避免數據庫訪問并發(fā)性問題是并行計算讀取數據必須要解決的問題。為提高并行計算過程中數據訪問效率,減少數據讀操作等待時間,采用Oracle高級復制機制的過程級復制。當存在對數據進行大規(guī)模更新和批處理操作時采用這種復制方案[20],正好符合地質災害預警并行計算時監(jiān)測數據的大量讀取操作。這個功能在大規(guī)模讀寫操作中非常實用,而且可以提高并行計算性能的穩(wěn)定性和負載平衡。
1.2.4 任務監(jiān)控與調度
地質災害預警并行計算的任務調度由資源管理器和任務調度器組成[4],負責計算任務的提交、排隊分發(fā)和狀態(tài)監(jiān)控。資源管理器負責實時獲取子節(jié)點心跳信息,解析該節(jié)點的現狀,包括內存、CPU占有率、硬盤資源等,根據資源管理器提供的監(jiān)控結果,對計算任務進行分配,以做到合理利用資源保證并行計算效率。
任務調度器采用改進的FIFO算法[6],即在監(jiān)測數據預處理的基礎上,對計算任務內的地質災害隱患點以威脅人口的數量從多到少的順序進行任務提交。根據理論分析,可以通過改變任務執(zhí)行順序來實現負載平衡。本文改進的任務調度算法可抽象理解為以下幾個步驟:①將地質災害預警接受任務匯總到提交任務管理器;②對任務提交管理器中的任務使用調度算法,得到任務待提交隊列;③資源管理器實時監(jiān)控集群計算資源狀況,當計算資源空閑且存在待提交計算任務,按照任務排序依次提交;當計算資源滿載則暫停提交。
1.2.5 節(jié)點通信
消息傳遞接口(MPI)只適用于浮點型、字符型和整型3種數據類型,適合傳遞簡單的輸入參數或小型矩陣數組[7],一旦數據量過大很容易造成信道阻塞。本地質災害預警并行計算架構中MPI主要負責啟動地質災害預警算法包和并行計算節(jié)點間小容量數據的通信[5]。
對于并行計算中較大容量的數據傳輸則直接利用Socket套接字進行通信,避免因MPI的信道阻塞[3]而帶來的通信故障。
搭建由4臺普通PC機組成的集群,其中1臺作為主控制節(jié)點(命名為Master),另外3臺是工作節(jié)點(命名為Slave1--3),1Gbps高速交換機作為集群互聯網絡。試驗集群的配置見表1。
表1 集群配置表Tab.1 Conf i guration able of PC clusters
地質災害并行計算實現流程如圖2所示。為驗證該地質災害預警并行計算架構的實際計算能力,本文將該并行計算架構應用于某省2016年8月2~4日臺風造成的大范圍強降雨進行地質災害預警工作。該測試算例包括2 657個地質災害隱患點,監(jiān)測數據共計達900多萬條。并行計算環(huán)境如2.1節(jié)所述。通過使用不等數量的執(zhí)行進程,依次對測試進行計算實驗,計算結果見表2。
表2 地質災害監(jiān)測預警并行計算耗費時間Tab.2 Parallel computing time of geological disaster early warning
表2中:當進程數為1時,表示串行計算模式;當進程數為4、8、16時為并行計算模式。并行計算總耗時為任務讀取時間、任務分解時間、子任務并行計算時間和通信時間相加之總和。本實驗通過改變執(zhí)行進程數量,測試不同進程數量并行計算所需要的時間。當運行一個執(zhí)行進程時用時167.74 s,隨著執(zhí)行進程數量的增加,地質災害預警并行計算總用時逐漸減少,當執(zhí)行進程數量增加到16個時,計算時間為19.678s。此時,并行計算對地質災害預警的計算用時得到了大幅縮減。并行計算耗時如圖3所示。
圖3 并行計算耗時與節(jié)點數關系Fig.3 Relationship between the number of nodes and parallel computing cost time
以執(zhí)行一個進程總的耗費時間作為地質災害預警并行計算為基準[15],計算運行不同數量進程時的加速比,如圖4所示。加速比隨執(zhí)行進程數目的增加而增大,但隨著執(zhí)行進程的增加,各個執(zhí)行進程之間的通信時間增加,加速比曲線斜率逐漸減小。
圖4 并行加速比Fig.4 Parallel acceleration ratio
實驗結果表明:
1)以地質災害隱患點為單位對地質災害預警計算進行數據級任務分解,啟用多個執(zhí)行進程進行并行計算可以大幅減少地質災害預警的計算時間,能夠獲得一定的加速比。
2)本文提出的地質災害預警并行計算架構可以進行大規(guī)模地質災害隱患點預警的并行計算,滿足地質災害預警時效性的需求[16-20]。
采用數據級任務分解方法對地質災害預警計算任務進行分解,設計了并行計算架構。將該并行計算架構應用于某省2016年8月2~4日臺風造成的大范圍強降雨進行地質災害預警工作,得到如下結論:
1)采用Oracle高級復制機制極大地避免了并行計算過程中數據訪問并發(fā)性問題。
2)采用改進的FIFO算法保證了并行計算的負載均衡。
3)使用消息傳遞接口(MPI)和Socket套接字分別對小容量的模型參數和大容量空間數據進行通信。
4)將本文設計的地質災害預警并行計算架構應用到實際地質災害預警工作中,取得了良好的效果,大幅縮短了大范圍地質災害預警所需的時間,滿足了地質災害實時預警的需要。