蔣鳳釵
(廣東省國(guó)土資源技術(shù)中心,廣東 廣州 510075)
在智能化和大數(shù)據(jù)背景下,如何加強(qiáng)自然資源機(jī)構(gòu)信息化建設(shè),推動(dòng)國(guó)土資源數(shù)據(jù)管理的深入推進(jìn),是當(dāng)前思考和研究的重點(diǎn)。而在“十三五”提出的《國(guó)家信息化規(guī)劃》(以下簡(jiǎn)稱《規(guī)劃》)方案中,更是強(qiáng)調(diào)要以大數(shù)據(jù)作為基礎(chǔ),結(jié)合國(guó)土資源數(shù)據(jù)實(shí)際,建立縱向聯(lián)動(dòng)和橫向協(xié)同結(jié)合的國(guó)土資源共享服務(wù)平臺(tái),并重點(diǎn)解決國(guó)土資源數(shù)據(jù)集成管理難、計(jì)算效率等和數(shù)據(jù)服務(wù)能力差的問(wèn)題,高度實(shí)現(xiàn)我國(guó)國(guó)土資源空間數(shù)據(jù)治理能力的現(xiàn)代化。而近幾年來(lái),廣東省國(guó)土資源部門(mén)嚴(yán)格按照《規(guī)劃》要求,大力推動(dòng)國(guó)土資源信息化管理,如構(gòu)建一體化的數(shù)據(jù)資源管理中,建設(shè)國(guó)土資源信息管理與服務(wù)平臺(tái)等,從而為自然資源業(yè)務(wù)管理提供了重要技術(shù)支撐,實(shí)現(xiàn)了跨部門(mén)、跨業(yè)務(wù)和跨層級(jí)的多業(yè)務(wù)應(yīng)用。在取得以上成果的背景下,部分業(yè)務(wù)還有待進(jìn)一步提升,如國(guó)土資源數(shù)據(jù)管理、大數(shù)據(jù)的國(guó)土資源數(shù)據(jù)分類等方面。而針對(duì)國(guó)土資源數(shù)據(jù)的管理,目前主流解決方案是采用Hadoop,依托該框架中的HDFS 文件管理系統(tǒng)實(shí)現(xiàn)國(guó)土資源數(shù)據(jù)的分布式存儲(chǔ)[1-3];在數(shù)據(jù)分類方面,通常采用K-means[4-6]、SVM[7-9]等。但實(shí)踐認(rèn)為,Hadoop框架的高吞吐和低響應(yīng)的特點(diǎn)已經(jīng)不能滿足實(shí)時(shí)大數(shù)據(jù)的應(yīng)用需求[10]。因此本研究嘗試結(jié)合國(guó)土遙感圖像數(shù)據(jù)和Spark技術(shù)的特點(diǎn),構(gòu)建一個(gè)基于Spark的高效國(guó)土資源數(shù)據(jù)分類架構(gòu),并對(duì)該架構(gòu)的進(jìn)行試驗(yàn)驗(yàn)證,從而為國(guó)土資源數(shù)據(jù)的自動(dòng)管理提供借鑒。
目前主流的并行架構(gòu)包含兩類:一類是基于Hadoop的MapReduce 并行架構(gòu);一類是基于內(nèi)存式計(jì)算的Spark,其中可兼容各種計(jì)算模式,且相對(duì)于Hadoop 講,具有更高的性能。Spark的核心在于彈性分布式數(shù)據(jù)集,通過(guò)該數(shù)據(jù)集可將中間計(jì)算的部分或全部數(shù)據(jù)緩存在內(nèi)存中,從而在并行計(jì)算中反復(fù)使用,且該數(shù)據(jù)提供了豐富的操作函數(shù)。Spark的執(zhí)行流程如圖1所示。
圖1 Spark作業(yè)執(zhí)行圖
在上述的Spark 執(zhí)行過(guò)程中,最為關(guān)鍵的包含三個(gè)階段:一是驅(qū)動(dòng)器節(jié)點(diǎn)生成RDD,這是Spark 計(jì)算的核心,通過(guò)將數(shù)據(jù)轉(zhuǎn)換為RDD,從而執(zhí)行不同的算子和函數(shù);二是切分,目的是實(shí)現(xiàn)調(diào)度;三是生成任務(wù),即將每階段的轉(zhuǎn)換到工作節(jié)點(diǎn)上執(zhí)行。
SVM 作為機(jī)器學(xué)習(xí)的一種,主要通過(guò)結(jié)構(gòu)化風(fēng)險(xiǎn)最小的方式來(lái)提高自身的學(xué)習(xí)泛化能力,進(jìn)而實(shí)現(xiàn)在樣本較少的情況下,獲取良好的統(tǒng)計(jì)規(guī)律。SVM 的基本思想是找到一個(gè)最優(yōu)分類面,使正負(fù)類數(shù)據(jù)的分類間隔最大。具體數(shù)學(xué)描述為[11]:
設(shè)訓(xùn)練樣本(xi,yi),xRn,y(-1,1),i=(1,2,…,l),l 表示樣本數(shù),n為維數(shù)。當(dāng)線性可分的時(shí)候,則存在最優(yōu)分類超平面,具體為:
對(duì)優(yōu)化目標(biāo)取極值,從而得到:
式(2)中,C為懲罰參數(shù),ξi、ζi為松弛因子,ε表示損失函數(shù)。
引入Lagrange 乘子求解上述優(yōu)化問(wèn)題,從而得到最優(yōu)決策函數(shù)為:
式(3)中,ai、bi為L(zhǎng)agrange系數(shù),且根據(jù)K-T條件,上式的解必須滿足:
而對(duì)于非線性分類時(shí),SVM 只需通過(guò)核函數(shù)即可將樣本映射到高維空間H中,進(jìn)而經(jīng)非線性問(wèn)題轉(zhuǎn)換為線性問(wèn)題,最終在高維空間中實(shí)現(xiàn)分類。
傳統(tǒng)的算法效率提高改進(jìn)主要包含兩類:一是采用Hadoop 框架中的MapReduce 并行框架對(duì)SVM 算法進(jìn)行并行化處理,如劉倩(2018)通過(guò)MapReduce將數(shù)據(jù)集進(jìn)行分塊訓(xùn)練,然后再將訓(xùn)練后的數(shù)據(jù)集進(jìn)行合并訓(xùn)練,以此大大提高了傳統(tǒng)SVM算法運(yùn)行的效率;二是對(duì)SVM算法和數(shù)據(jù)進(jìn)行優(yōu)化處理,如宮文峰(2020)通過(guò)對(duì)svm 的參數(shù)進(jìn)行優(yōu)化,并借助CNN神經(jīng)網(wǎng)絡(luò)對(duì)特征集進(jìn)行篩選,以提高SVM算法自身數(shù)據(jù)分類的效率;劉金燕(2020)則在優(yōu)化前,提出對(duì)分類數(shù)據(jù)進(jìn)行處理,剔除其中的無(wú)效數(shù)據(jù),以提高分類的效率和準(zhǔn)確率。以上基于SVM 的改進(jìn)主要是通過(guò)MapReduce 并行化,或者是對(duì)SVM算法本身進(jìn)行改進(jìn),以此來(lái)提高算法分類效率和準(zhǔn)確率。但MapReduce在處理數(shù)據(jù)是需要與其他節(jié)點(diǎn)保持高度并行,而Spark 對(duì)特定的數(shù)據(jù)集進(jìn)行高效迭代。因此,基于以上的考慮,本文引入Spark 框架進(jìn)行并行化處理,以提高SVM分類算法處理效率。與此同時(shí),傳統(tǒng)的遙感圖像分類主要是依賴于MPI 多進(jìn)程,即借助MPI 整體并行控制能力,將海量數(shù)據(jù)的計(jì)算轉(zhuǎn)為分布式計(jì)算,從而將大任務(wù)分解為多個(gè)小任務(wù)。但單一的MPI也存在局限,即不同實(shí)現(xiàn)不同集群節(jié)點(diǎn)信息的共享,且計(jì)算能力受到限制。CUDA 具有強(qiáng)大的單機(jī)計(jì)算能力。綜上本研究嘗試在Spark 環(huán)境下,在MPI 多進(jìn)程中嵌入CUDA 并行框架。在發(fā)揮CUDA 的單機(jī)計(jì)算能力同時(shí),又利用MPI 的整體并行控制能力和問(wèn)題分解能力,具體改進(jìn)框架如圖2所示。
根據(jù)圖2的并行處理框架,首先在每臺(tái)集群節(jié)點(diǎn)服務(wù)器上安裝HDFS、Spark、MPI等,在安裝完成后,將數(shù)據(jù)上傳到HDFS文件儲(chǔ)存系統(tǒng)中,然后執(zhí)行Spark程序,進(jìn)而實(shí)現(xiàn)MPI將數(shù)據(jù)分發(fā)給子進(jìn)程,而CUDA發(fā)揮單機(jī)計(jì)算優(yōu)勢(shì),實(shí)現(xiàn)高效率的并行計(jì)算。
圖2 基于Spark的MPI-CUDA 處理框架流程
結(jié)合圖2的改進(jìn)方案,將基于Spark的SVM并行化分類方案設(shè)計(jì)為如圖3所示。該方案的具體步驟為:在運(yùn)行SVM算法前,首先將數(shù)據(jù)上傳到HDFS中,從而為后續(xù)的并行化分類提供參考。在該架構(gòu)中主要分為兩部分:一是訓(xùn)練模型,即通過(guò)訓(xùn)練樣本對(duì)SVM模型進(jìn)行訓(xùn)練,從而達(dá)到最優(yōu)SVM模型。具體來(lái)講,Spark首先從HDFS文件中讀取數(shù)據(jù),將得到的RDD分布式數(shù)據(jù)集分發(fā)到各個(gè)集群節(jié)點(diǎn)。當(dāng)各個(gè)節(jié)點(diǎn)對(duì)數(shù)據(jù)進(jìn)行訓(xùn)練后,將RDD數(shù)據(jù)集轉(zhuǎn)換為SVM要求的格式,然后通過(guò)MPI接口程序?qū)颖具M(jìn)行訓(xùn)練,并同時(shí)調(diào)用CUDA進(jìn)行并行計(jì)算。最后將訓(xùn)練得到的最優(yōu)參數(shù)構(gòu)建SVM分類模型。二是測(cè)試訓(xùn)練。在完成最優(yōu)SVM 模型的參數(shù)尋優(yōu)后,將最優(yōu)的參數(shù)分發(fā)到各個(gè)節(jié)點(diǎn),并通過(guò)該最優(yōu)參數(shù)構(gòu)建的SVM對(duì)數(shù)據(jù)進(jìn)行分類,并最終合并各個(gè)節(jié)點(diǎn)的分類結(jié)果,得到整體的RDD數(shù)據(jù)集。
圖3 SVM 算法的高性能并行計(jì)算處理整體框架圖
節(jié)點(diǎn)模型的訓(xùn)練如圖4所示。在該訓(xùn)練過(guò)程中,首先通過(guò)MPI主進(jìn)程將數(shù)據(jù)分發(fā)給各個(gè)次進(jìn)程,換句話說(shuō)就是將數(shù)據(jù)分發(fā)給各個(gè)子節(jié)點(diǎn),各個(gè)子節(jié)點(diǎn)進(jìn)行SVM訓(xùn)練。SVM參數(shù)的初始化,包括迭代次數(shù)、懲罰因子C 和Gamma 系數(shù)(系數(shù)用k 表示);然后通過(guò)迭代得到局部最優(yōu)的Gamma 系數(shù),且每次迭代后,都剔除非邊界樣本點(diǎn);合并局部支持向量,并將合并得到的局部向量作為下層的層疊輸入;最后合并所有的局部支持向量,得到最優(yōu)的SVM訓(xùn)練模型。
圖4 節(jié)點(diǎn)訓(xùn)練實(shí)現(xiàn)過(guò)程
測(cè)試數(shù)據(jù)的SVM分類流程如圖5所示。首先各個(gè)節(jié)點(diǎn)會(huì)通過(guò)MPI 開(kāi)啟多進(jìn)程,然后調(diào)用CUDA 并行處理方式實(shí)現(xiàn)對(duì)數(shù)據(jù)的計(jì)算與分類。在完成分類后,次進(jìn)程將結(jié)果發(fā)送給主進(jìn)程,再通過(guò)repartition函數(shù)對(duì)得到的結(jié)果進(jìn)行合并,得到RDD數(shù)據(jù)集;最后通過(guò)Geo Py Spark將分類結(jié)果寫(xiě)成圖。
圖5 測(cè)試數(shù)據(jù)分類實(shí)現(xiàn)流程
為驗(yàn)證上述并行化方案的可行性與科學(xué)性,通過(guò)對(duì)比實(shí)驗(yàn)的方式對(duì)上述設(shè)計(jì)方案進(jìn)行驗(yàn)證。具體設(shè)計(jì)為四個(gè)試驗(yàn),具體試驗(yàn)方案見(jiàn)表1所示。
表1 試驗(yàn)方案
5.2.1 數(shù)據(jù)來(lái)源
本試驗(yàn)數(shù)據(jù)選擇Landsat8的影像數(shù)據(jù),成像時(shí)間為2019年8月5日,數(shù)據(jù)范圍為廣東東部及沿海等大部分地區(qū)。通過(guò)影像分析,將樣本分為五個(gè)類型:建設(shè)用地、農(nóng)業(yè)用地、水體、濕地植被、灘涂。然后利用Clip工具對(duì)影像圖像進(jìn)行裁剪,進(jìn)而作為樣本數(shù)據(jù),以整幅影像圖作為測(cè)試數(shù)據(jù)。將上述的樣本數(shù)據(jù)和測(cè)試數(shù)據(jù)上傳到HDFS 系統(tǒng)中,為后續(xù)的SVM分類奠定基礎(chǔ)。
5.2.2 環(huán)境搭建
本試驗(yàn)環(huán)境搭建主要分為兩部分:一是對(duì)單節(jié)點(diǎn)環(huán)境搭建,二是對(duì)集群節(jié)點(diǎn)環(huán)境進(jìn)行搭建。其中單機(jī)Hadoop選擇hadoop-2.7.4 版本,Spark 選擇Spark-2.1.0,JDK 選擇1.80,操作系統(tǒng)選擇CentOS7。在實(shí)驗(yàn)測(cè)試情景方面,分別按CPU 串行、MPI 多核、CUDA 并行、MPI-CUDA 四個(gè)測(cè)試情景進(jìn)行搭建,且MPI開(kāi)啟進(jìn)程為5個(gè)次進(jìn)程。集群搭建環(huán)境見(jiàn)表2,總共設(shè)計(jì)6個(gè)集群節(jié)點(diǎn),1個(gè)為主節(jié)點(diǎn),其余五個(gè)為子節(jié)點(diǎn)。
表2 集群服務(wù)節(jié)點(diǎn)搭建
通過(guò)對(duì)數(shù)據(jù)集的訓(xùn)練試驗(yàn),設(shè)定C=1.0,Gamma=0.1。
(1) 方案一測(cè)試結(jié)果
方案一的試驗(yàn)測(cè)試結(jié)果見(jiàn)圖6所示。
圖6 單節(jié)點(diǎn)下不同情境的測(cè)試時(shí)間和分類精度
根據(jù)試驗(yàn)結(jié)果看出,CPU串行下的SVM訓(xùn)練與分類耗時(shí)最高,達(dá)到5852s,而MPI-CUDA并行下的SVM分類訓(xùn)練與分類耗時(shí)最少,為927s,比傳統(tǒng)CPU 串行分類效率高6.3倍,說(shuō)明采用MPI-CUDA并行分類效率要明顯高于傳統(tǒng)的并行或串行SVM 分類。然而在分類精度方面,本研究得到的分類結(jié)果要低于CPU 和CUDA,主要原因是因?yàn)镸PICUDA是通過(guò)整合各子進(jìn)程分類結(jié)果的方式得到最終SVM模型,從而導(dǎo)致最終得到的模型不一定為最優(yōu)的分類模型,因此得到的分類精度要低,但兩者之間的分類精度相差較小,在試驗(yàn)可接受范圍內(nèi)。
(2) 方案二測(cè)試結(jié)果
研究認(rèn)為不同的進(jìn)程數(shù)會(huì)影響樣本訓(xùn)練和分類的效率。因此構(gòu)建單機(jī)節(jié)點(diǎn)下不同進(jìn)程數(shù),以對(duì)比分析MPI-CUDA的SVM并行分類效率與精度。試驗(yàn)結(jié)果如圖7所示。
圖7 不同進(jìn)程數(shù)下的SVM分類時(shí)間與分類精度
根據(jù)上述的試驗(yàn)結(jié)果看出,隨著次進(jìn)程數(shù)的不斷增加,SVM并行算法的分類精度不斷降低,精度從94.64%降低到92.42%。同時(shí)當(dāng)進(jìn)程數(shù)在8的時(shí)候,分類的速度開(kāi)始逐步趨于平穩(wěn)。但是隨著進(jìn)程數(shù)的增加,分類的效率卻明顯提高,從進(jìn)程數(shù)為1 的時(shí)候下的4513s,下降到653s。根據(jù)以上結(jié)果可以看出,并行分類有助于提高分類效率,但進(jìn)程數(shù)并不是越多越好。
(3) 方案三測(cè)試結(jié)果
在多個(gè)節(jié)點(diǎn)下,運(yùn)行基于MPI-CUDA 的SVM 并行化程序,每節(jié)點(diǎn)進(jìn)程數(shù)統(tǒng)一設(shè)置為5,評(píng)價(jià)指標(biāo)以并行環(huán)境與單機(jī)環(huán)境下分類處理時(shí)間之比(加速比)作為評(píng)價(jià)依據(jù)。
圖8 不同節(jié)點(diǎn)下SVM的耗時(shí)情況和加速比
根據(jù)上述三個(gè)實(shí)驗(yàn)方案的測(cè)試結(jié)果看出,隨著節(jié)點(diǎn)數(shù)量的增加,SVM并行分類的效率也在不斷提高,但變化服務(wù)在逐步趨緩。而從加速比來(lái)看,當(dāng)節(jié)點(diǎn)數(shù)增加的同時(shí),加速比也在不斷增加,表明節(jié)點(diǎn)數(shù)的增加,分類的效率也越來(lái)越高。
通過(guò)以上的研究看出,本研究構(gòu)建的MPI-CUDA 的SVM并行方案可靠,可實(shí)現(xiàn)SVM分類的高性能分類。但以上研究也存在缺陷,那就是并行化處理后的SVM 分類精度有所降低,但降低幅度在試驗(yàn)可接受的范圍內(nèi),但通過(guò)本改進(jìn),確實(shí)可大幅度提高傳統(tǒng)串行SVM分類的效率,降低分類時(shí)間。因此,在下一步的研究中,本研究應(yīng)重點(diǎn)就如何整合不同節(jié)點(diǎn)訓(xùn)練模型下的最優(yōu)SVM模型進(jìn)行研究。