劉 露,申國偉,郭 春,崔允賀,蔣朝惠,伍大勇
(1.貴州大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院,貴州 貴陽 550025; 2.貴州省軟件工程與信息安全特色重點實驗室,貴州 貴陽 550025;3.科大訊飛股份有限公司,安徽 合肥 230011)
在大數(shù)據(jù)時代,批量計算和流計算是2種典型的分布式計算任務(wù)。隨著廣告點擊流、網(wǎng)絡(luò)數(shù)據(jù)流等流式數(shù)據(jù)越來越多,分布式流計算受到越來越多的關(guān)注。隨著開源生態(tài)的發(fā)展,目前典型的分布式流計算框架有Storm[1]、Flink[2]、Spark Streaming[3]等。Spark Streaming作為Spark core API[4]的擴(kuò)展,生態(tài)圈成熟,支持實時數(shù)據(jù)流的處理,且具有可擴(kuò)展、高吞吐量、容錯等特點,成為主流的分布式流分析框架。
Spark Streaming作為一種通用的分布式流計算平臺,平臺的通用性和兼容性是當(dāng)初設(shè)計考慮的重要因素,特定的業(yè)務(wù)應(yīng)用依賴于默認(rèn)參數(shù)配置,往往難以發(fā)揮最優(yōu)性能。因此,在Spark Streaming上針對不同的業(yè)務(wù)應(yīng)用進(jìn)行參數(shù)配置優(yōu)化是性能優(yōu)化的關(guān)鍵。目前圍繞Spark Streaming的性能優(yōu)化主要包括2個方向:調(diào)度優(yōu)化與參數(shù)優(yōu)化。
調(diào)度優(yōu)化是指Spark Steaming針對不同作業(yè)進(jìn)行動態(tài)調(diào)度,以實現(xiàn)平臺的性能提升。Kross等人[5]以Spark Streaming為例,提出一種通過建模和仿真來預(yù)測Spark Streaming應(yīng)用程序響應(yīng)時間的方法。Venkataraman等人[6]在Spark上構(gòu)建了一種在線自適應(yīng)算法,并和Spark Streaming進(jìn)行集成。該算法允許流平臺自動調(diào)整批處理大小,能夠根據(jù)數(shù)據(jù)速率、工作負(fù)載行為和可用資源的變化快速調(diào)整批處理大小。Ajila等人[7]在Spark Streaming上實現(xiàn)了一種數(shù)據(jù)驅(qū)動的優(yōu)先級調(diào)度方法,將輸入數(shù)據(jù)項進(jìn)行優(yōu)先級配置,確保優(yōu)先級較高的先于優(yōu)先級較低的數(shù)據(jù)項進(jìn)行處理。
在Spark Streaming性能優(yōu)化領(lǐng)域中,參數(shù)優(yōu)化是另一個研究熱點。在執(zhí)行流計算任務(wù)時需要預(yù)先設(shè)置配置參數(shù),如果參數(shù)配置不當(dāng),會降低Spark Streaming執(zhí)行流作業(yè)的執(zhí)行性能。作為Spark生態(tài)圈一員,Spark Streaming可配置參數(shù)有200多個。目前針對參數(shù)優(yōu)化的方法大體分為手動方法和自動方法。手動方法對參數(shù)調(diào)試人員有著較高的要求。調(diào)參時不僅需要清楚Spark Streaming中每個配置參數(shù)的含義及參數(shù)之間的關(guān)系,還要明確不同參數(shù)配置組合對流作業(yè)不同方面的影響。調(diào)參過程中最為困難的是可配置參數(shù)取值空間大,例如當(dāng)只調(diào)整3個參數(shù)時,每個配置參數(shù)取值如果有10種可能,則會存在1000種參數(shù)組合配置。因此人工調(diào)參的方式將耗費(fèi)大量人力,且難以得到較優(yōu)的參數(shù)配置。
早期Spark參數(shù)優(yōu)化方案主要是設(shè)計搜索算法,從較大的配置空間中尋找到較優(yōu)參數(shù)配置。常見的搜索算法有遺傳算法[8-9]、爬山算法[10-11]、隨機(jī)策略法[12]等搜索算法。目前Spark Streaming自動參數(shù)配置方法以設(shè)計參數(shù)調(diào)優(yōu)方案為主,例如Prasad等人[13]通過觀察RDD對應(yīng)Partition數(shù)目,建立一種能夠在實際部署流應(yīng)用程序之前預(yù)測其性能的線性回歸模型來降低Spark Streaming的處理時間,但需要研究者多次人為設(shè)置微批處理時間來統(tǒng)計數(shù)據(jù)。Cheng等人[14]提出了一種基于強(qiáng)化學(xué)習(xí)中Policy Gradient算法[15]的在線調(diào)優(yōu)方法,動態(tài)調(diào)度Spark Streaming中的并行微批作業(yè),并自動調(diào)整參數(shù),以提高性能和資源效率。上述方法需要研究者對于Spark Streaming內(nèi)部原理結(jié)構(gòu)深入研究,并修改源碼才能實現(xiàn),很難具有通用性。
在實際應(yīng)用場景中,直接獲得當(dāng)前流作業(yè)在Spark Streaming集群環(huán)境的最佳參數(shù)配置是困難的。因此,本文提出一種基于深度強(qiáng)化學(xué)習(xí)[16]的Spark Streaming參數(shù)優(yōu)化方法(A Spark Streaming Parameter Optimization Method Based on Deep Reinforcement Learning, DQN-SSPO),與前人所做工作的不同之處在于,本文方法在不修改Spark Streaming內(nèi)部程序結(jié)構(gòu)情況下,通過研究Spark Streaming可配置參數(shù)與流作業(yè)運(yùn)行性能之間的關(guān)系進(jìn)而得到優(yōu)化后的參數(shù)配置,提高流計算任務(wù)的執(zhí)行性能。主要工作有:
1)本文將優(yōu)化Spark Streaming參數(shù)配置問題轉(zhuǎn)化為深度強(qiáng)化學(xué)習(xí)中的最大回報獲得問題,不需要修改Spark Streaming源碼,可降低人工參數(shù)調(diào)優(yōu)的不確定性。
2)針對Spark Streaming參數(shù)空間維度高的問題,本文設(shè)計權(quán)重狀態(tài)空間轉(zhuǎn)移方法來提高深度強(qiáng)化學(xué)習(xí)前期模型訓(xùn)練獲得高反饋的概率。
3)在3種典型Spark Streaming流計算任務(wù)上實驗,當(dāng)使用DQN-SSPO方法得到優(yōu)化參數(shù)組合配置后,總處理時間及總調(diào)度時間都有較大縮減。
Spark Streaming參數(shù)優(yōu)化問題為:設(shè)置合理化參數(shù)組合配置從而提高Spark Streaming流計算任務(wù)性能,而實際中由于參數(shù)空間維度過高導(dǎo)致確定較優(yōu)參數(shù)配置變得尤為困難。
深度強(qiáng)化學(xué)習(xí)是一種無需人工提取狀態(tài)和特征,結(jié)合深度學(xué)習(xí)的感知能力以及強(qiáng)化學(xué)習(xí)的決策能力的新型方法,在計算機(jī)視覺、無人駕駛等方面取得了良好的成績。DQN-SSPO算法設(shè)計將深度強(qiáng)化學(xué)習(xí)應(yīng)用到Spark Streaming參數(shù)優(yōu)化問題中,將降低Spark Streaming總延遲時間作為最終目標(biāo)。圖1為DQN-SSPO算法中馬爾科夫決策過程。
圖1 DQN-SSPO馬爾科夫決策過程
圖1中S表示參數(shù)狀態(tài)空間;A表示參數(shù)狀態(tài)空間轉(zhuǎn)移的動作空間;R表示在狀態(tài)S下采取動作A所得的即時獎勵。DQN-SSPO算法利用馬爾科夫決策過程構(gòu)建參數(shù)優(yōu)化算法。本文對DQN-SSPO馬爾科夫決策過程中的關(guān)鍵要素做如下設(shè)計。
1)狀態(tài)空間S。
由每個參數(shù)取值范圍共同轉(zhuǎn)換為參數(shù)狀態(tài)空間,狀態(tài)空間轉(zhuǎn)換步長設(shè)置為1。Sk表示參數(shù)狀態(tài),其組成原理如圖2所示。其中Pi為第i個參數(shù)的參數(shù)空間,i∈{0,1,…,N},N為參數(shù)個數(shù)。
圖2 參數(shù)狀態(tài)組合方式
2)動作空間A。
針對每個參數(shù)空間設(shè)計一個游標(biāo)指向參數(shù)空間的坐標(biāo)。動作空間A=[A0,A1],分別對應(yīng)“增加1位”與“減少1位”這2種動作。
3)即時獎勵R。
本文為了評估在當(dāng)前參數(shù)狀態(tài)S下采取動作A后得到的即時獎勵R(S,A),設(shè)計一種參數(shù)動態(tài)獎勵機(jī)制。由流計算任務(wù)在參數(shù)狀態(tài)S下進(jìn)行分析后返回的一組性能評價指標(biāo)與默認(rèn)參數(shù)下所獲得的性能評價指標(biāo)進(jìn)行參數(shù)動態(tài)獎勵機(jī)制計算后,得到當(dāng)前狀態(tài)的獎勵R,其中性能評價指標(biāo)包括總處理時間Tprocess和總調(diào)度時間Tschedule,R的具體計算過程如圖3所示。
圖3 參數(shù)動態(tài)獎勵機(jī)制
深度強(qiáng)化學(xué)習(xí)模型訓(xùn)練前期,智能體并不清楚環(huán)境的情況,所以前期模型訓(xùn)練很緩慢,需要一定的時間熟悉環(huán)境才能得到更好的獎勵。如何合理化設(shè)計深度強(qiáng)化學(xué)習(xí)Agent探索方向是提高模型訓(xùn)練收斂速度的關(guān)鍵,但由于Spark Streaming參數(shù)空間太大,使強(qiáng)化學(xué)習(xí)模型訓(xùn)練前期探索時間過長,不利于模型收斂。針對此問題,本文提出權(quán)重狀態(tài)空間轉(zhuǎn)移方法,使得模型在探索環(huán)境時有引導(dǎo)性地進(jìn)行參數(shù)空間轉(zhuǎn)移,加快模型的訓(xùn)練速度。具體步驟如下所示,其中關(guān)鍵參數(shù)的權(quán)重作為不同流計算任務(wù)模型訓(xùn)練中參數(shù)狀態(tài)轉(zhuǎn)移的指標(biāo)。
1)根據(jù)經(jīng)驗獲取候選參數(shù)。
2)對候選參數(shù)做主成分分析,得到Spark Streaming流計算任務(wù)關(guān)鍵參數(shù)。
3)針對不同流計算任務(wù)獲得對應(yīng)關(guān)鍵參數(shù)的權(quán)重。
Spark Streaming的可配置參數(shù)按照其參數(shù)功能可分為13大類[17],但其中很大部分參數(shù)并不會對作業(yè)產(chǎn)生很大影響,例如作業(yè)名、存儲路徑等。本文去除掉這部分參數(shù)后在獲取候選參數(shù)時,從2個方面進(jìn)行考慮:1)實驗采用Spark的Standalone獨立模式進(jìn)行部署;2)實驗中采用Apache Kafka[18]作為流計算任務(wù)數(shù)據(jù)中間緩沖。最后根據(jù)自定義6個分類得到63個候選參數(shù),如表1所示。
表1 Spark Streaming候選參數(shù)列表
首先通過表1隨機(jī)設(shè)置不同候選參數(shù)組合,采取PCA算法對參數(shù)組合進(jìn)行主成分分析,進(jìn)行初步降維,處理步驟如下:
1)將參數(shù)中非數(shù)值化數(shù)據(jù)進(jìn)行數(shù)值化處理。
2)采用p-范數(shù)如式(1)進(jìn)行數(shù)據(jù)預(yù)處理。
(1)
將候選參數(shù)進(jìn)行PCA計算后得到候選參數(shù)指標(biāo)在不同主成分線性組合中的系數(shù),并將其進(jìn)行Min-Max歸一化處理。最終將權(quán)重低于0.3的參數(shù)剔除后得到9個關(guān)鍵參數(shù)。
1)spark.executor.memory(s.e.m):每個executor進(jìn)程所需要的內(nèi)存大小。
2)spark.driver.cores(s.d.c):driver程序運(yùn)行需要的CPU內(nèi)核數(shù)。
3)spark.executor.cores(s.e.c):每個executor進(jìn)程所需要的CPU內(nèi)核數(shù)。
4)spark.streaming.kafka.maxRatePerPartition(s.s.k.m):控制從Kafka分區(qū)讀取數(shù)據(jù)的速率。
5)spark.default.parallelism(s.d.p):系統(tǒng)使用集群中運(yùn)行Shuffle操作的默認(rèn)任務(wù)數(shù)。
6)spark.streaming.batchInterval(s.s.b):Spark Streaming微批處理時間。
7)spark.driver.memory(s.d.mem):driver程序運(yùn)行所需內(nèi)存。
8)spark.driver.maxResultSize(s.d.max):所有分區(qū)的序列化結(jié)果的總大小限制。
9)spark.serializer(s.s):序列化方式。
在獲取到關(guān)鍵參數(shù)后,通過獲取部分不同流計算任務(wù)在Spark Streaming平臺上分析的數(shù)據(jù),計算出關(guān)鍵參數(shù)對應(yīng)的權(quán)重。具體流程為:通過隨機(jī)設(shè)置不同候選參數(shù)組合來進(jìn)行分析。自變量為Spark Streaming關(guān)鍵參數(shù)組合配置,因變量是設(shè)置參數(shù)配置后在Spark Streaming平臺上提交流計算任務(wù)后分析的總延遲時間Tdelay,Tdelay為總處理時間Tprocess和總調(diào)度時間Tschedule之和。使用決策樹中的Gini指數(shù)來衡量參數(shù)對流計算任務(wù)的重要性,即參數(shù)的權(quán)重。式(2)表示A參數(shù)特征的Gini指數(shù)計算方式。
(2)
其中D為流計算任務(wù)隨機(jī)參數(shù)配置所獲得的分析樣本數(shù)據(jù)集合,Ck為樣本集合D中屬于第k類的樣本子集。最后聚合所有Gini指數(shù)得到特征權(quán)重,進(jìn)行歸一化處理后得到關(guān)鍵參數(shù)權(quán)重。
關(guān)鍵參數(shù)的權(quán)重是深度強(qiáng)化學(xué)習(xí)模型訓(xùn)練中狀態(tài)空間轉(zhuǎn)移的重要參考指標(biāo),權(quán)重越高的參數(shù),模型訓(xùn)練中Agent探索其參數(shù)空間的概率也越高。
深度強(qiáng)化學(xué)習(xí)DQN使用神經(jīng)網(wǎng)絡(luò)來映射狀態(tài)空間和動作空間,為了讓模型減少過擬合現(xiàn)象,本文基于Double DQN[19]模型來進(jìn)行DQN-SSPO算法構(gòu)建。DDQN先在估值網(wǎng)絡(luò)Q中找到最大Q值對應(yīng)的動作amax(S′,ω)如式(3),再在目標(biāo)網(wǎng)絡(luò)Q′中計算目標(biāo)值yDDQN如式(4)。這個Q值在目標(biāo)網(wǎng)絡(luò)中不一定是最大的,所以能有效避免再次選到被高估的動作。
(3)
(4)
DQN-SSPO算法以提高其處理性能為目標(biāo),將Spark Streaming流計算任務(wù)作為輸入,輸出調(diào)優(yōu)后的較優(yōu)參數(shù)配置Sbest。具體如算法1所示。
算法1 DQN-SSPO算法。
輸入:Spark Streaming流計算任務(wù)Job,初始化經(jīng)驗回放單元D;批量梯度下降的樣本數(shù)m,參數(shù)更新頻率C。
輸出:較優(yōu)參數(shù)配置組合Sbest。
1.初始化最大累計獎勵Rmax=0
2.for episode=1 toEdo
3.隨機(jī)初始化參數(shù)配置組合St
4.初始化該episode累計獎勵R=0
5.fort=1 toTdo
6.使用ε-greedy策略選擇動作At
7.通過權(quán)重狀態(tài)空間轉(zhuǎn)移方法得到新參數(shù)狀態(tài)St+1
9.根據(jù)參數(shù)動態(tài)獎勵機(jī)制得到即時獎勵Rt
10.將〈St,At,Rt,St+1〉存入經(jīng)驗回放集合D
11.從D中隨機(jī)抽取m個數(shù)據(jù)樣本進(jìn)行模型訓(xùn)練,見公式(3)及公式(4)
12.根據(jù)C使用均方差損失函數(shù)MSE進(jìn)行參數(shù)更新
13.R=R+Rt
14.end for
15.如果R>Rmax,則Rmax=R
16.end for
17.根據(jù)Rmax獲取較優(yōu)參數(shù)配置Sbest
圖4為模型訓(xùn)練過程中一個episode中單步參數(shù)狀態(tài)轉(zhuǎn)移的執(zhí)行過程(s,a,s′,r)。神經(jīng)網(wǎng)絡(luò)在接收Spark Streaming參數(shù)空間狀態(tài)s后,從對應(yīng)動作空間的不同Q值中使用ε-greedy貪婪策略來選擇動作a。環(huán)境接收到此動作后,利用權(quán)重狀態(tài)空間轉(zhuǎn)移方法得到基于該動作轉(zhuǎn)移后的新參數(shù)狀態(tài)組合s′,將其應(yīng)用到Spark Streaming流計算任務(wù)中進(jìn)行分析后得到獎勵r。此時會根據(jù)獎勵更新值函數(shù)網(wǎng)絡(luò)的參數(shù),緊接著進(jìn)行下一步。
圖4 參數(shù)狀態(tài)轉(zhuǎn)移的單步執(zhí)行過程
模型訓(xùn)練中每一步參數(shù)空間轉(zhuǎn)換時記錄當(dāng)前的累計獎勵,例如在參數(shù)狀態(tài)S得到的累計獎勵Rbefore,在執(zhí)行一步參數(shù)狀態(tài)空間轉(zhuǎn)移后,在新參數(shù)狀態(tài)S′得到的累計獎勵為Rnow=Rbefore+R(S,A)。倘若在該episode訓(xùn)練過程中Rnow-Rbefore≥Max_gap時則結(jié)束該episode。
實驗環(huán)境分為處理流計算任務(wù)的Spark Streaming集群環(huán)境及深度強(qiáng)化學(xué)習(xí)環(huán)境2部分。本實驗在batchn個微批處理下,進(jìn)行流計算任務(wù)分析。其分布式集群環(huán)境配置如表2所示。
表2 分布式集群環(huán)境及軟件配置
考慮到本實驗參數(shù)空間維度及任務(wù)難度,神經(jīng)網(wǎng)絡(luò)采用3層結(jié)構(gòu)、16個神經(jīng)元,使用Adam梯度下降優(yōu)化算法更新權(quán)重值和偏置值,以學(xué)習(xí)率0.001進(jìn)行構(gòu)建。實驗的參數(shù)設(shè)置如表3所示。
表3 DQN-SSPO算法模型訓(xùn)練相關(guān)參數(shù)
為了驗證DQN-SSPO算法的有效性,選擇3種典型的流計算任務(wù)進(jìn)行實驗,包含1種實際應(yīng)用流計算任務(wù)和2種通用流計算任務(wù)。
1)流檢測任務(wù)(邏輯回歸)。
2)Sort流計算任務(wù)。
3)WordCount流計算任務(wù)。
流檢測任務(wù)使用2017年入侵檢測數(shù)據(jù)集CIC-IDS2017[20]中的DDOS檢測任務(wù)、Slowloris檢測任務(wù)、PostScan檢測任務(wù)與SSH暴力攻擊檢測任務(wù)。為了測試參數(shù)配置對Spark Streaming并行分析能力的影響,采用4個二分類模型同時對4種攻擊檢測流計算任務(wù)進(jìn)行并行分析。模型訓(xùn)練使用CICFlowMeter流量分析工具進(jìn)行76維特征提取后,由Spark Mlib進(jìn)行分類模型構(gòu)建,檢測過程如圖5所示。
圖5 流檢測任務(wù)執(zhí)行過程
WordCount流計算任務(wù)和Sort流計算任務(wù)實驗數(shù)據(jù)使用BigDataBench[21]提供的數(shù)據(jù)生成腳本自動生成2 GB數(shù)據(jù)集。
為了驗證DQN-SSPO算法中權(quán)重狀態(tài)空間轉(zhuǎn)移方法的有效性以及其對模型的影響,本實驗以流檢測任務(wù)為例進(jìn)行分析,將權(quán)重狀態(tài)空間轉(zhuǎn)移方法應(yīng)用到模型訓(xùn)練中,與未經(jīng)過權(quán)重設(shè)置的參數(shù)狀態(tài)空間轉(zhuǎn)移方法進(jìn)行對比分析。
流檢測任務(wù)使用權(quán)重狀態(tài)空間方法得到對應(yīng)的Spark Streaming關(guān)鍵參數(shù)權(quán)重如圖6所示。其中關(guān)鍵參數(shù)使用簡寫代替。
圖6 流檢測任務(wù)中關(guān)鍵參數(shù)歸一化權(quán)重
將模型訓(xùn)練過程中總episode數(shù)平均分為10段,取每一段的平均獎勵和平均訓(xùn)練步數(shù)來進(jìn)行對比分析。由圖7和圖8所示的結(jié)果可知,使用默認(rèn)狀態(tài)空間轉(zhuǎn)移方法時,模型訓(xùn)練中由于Agent完全對環(huán)境不熟悉,剛開始的訓(xùn)練步數(shù)和累計獎勵很少,模型訓(xùn)練很不穩(wěn)定。使用權(quán)重狀態(tài)空間轉(zhuǎn)移方法訓(xùn)練模型時,Agent在環(huán)境中有一定的方向認(rèn)知,在進(jìn)行探索時能獲得較好的訓(xùn)練。從圖7及圖8結(jié)果可知,雖然前期有一定的波動,但是隨著訓(xùn)練episode的增加,模型獲得高反饋的概率在權(quán)重狀態(tài)參數(shù)轉(zhuǎn)移方法中高于默認(rèn)參數(shù)狀態(tài)轉(zhuǎn)移方法。綜合上述對比分析,權(quán)重參數(shù)狀態(tài)轉(zhuǎn)移方法增加了Q網(wǎng)絡(luò)的收斂速度,同時增加獲得高反饋的概率。
圖7 平均累計獎勵對比分析
圖8 平均累計步數(shù)對比分析
3.1節(jié)驗證了權(quán)重狀態(tài)空間轉(zhuǎn)移方法的有效性,本節(jié)首先進(jìn)行流檢測任務(wù)參數(shù)優(yōu)化方法實驗以檢驗DQN-SSPO算法的效果。圖9為流檢測任務(wù)模型訓(xùn)練過程中隨著episode增加,累計獎勵與累計步數(shù)的變化圖。DQN-SSPO算法將模型訓(xùn)練期間得到的最大累計獎勵Rmax所對應(yīng)的累計步數(shù)中終態(tài)作為較優(yōu)參數(shù)組合配置Sbest。
圖9 流檢測任務(wù)DQN-SSPO模型訓(xùn)練中累計獎勵與累計步數(shù)的變化圖
由于Spark Streaming流檢測任務(wù)是微批處理任務(wù),為了測試微批處理能力對Spark Streaming分析性能的影響,本實驗加入一組控制s.s.k.m參數(shù)情況,即控制Spark Streaming的吞吐量,參數(shù)計算方式如式(5)所示。
(5)
其中,H為總吞吐量,batchn為微批處理數(shù),partition為Kafka對應(yīng)流檢測任務(wù)的Topic總分區(qū)數(shù),batcht為Spark Streaming流檢測任務(wù)的微批處理間隔時間s.s.b。實驗基于3種情況進(jìn)行,第1種是使用默認(rèn)參數(shù),未控制Spark Streaming吞吐量情況;第2種是使用默認(rèn)參數(shù),但控制吞吐量的情況;第3種是控制吞吐量后,并基于DQN-SSPO算法優(yōu)化后得到的較優(yōu)參數(shù)組合配置情況。
3種Spark Streaming參數(shù)配置下執(zhí)行流檢測任務(wù)的性能對比如圖10所示。由圖可知,在未控制吞吐量及配置默認(rèn)參數(shù)時,其總調(diào)度時間和總處理時間都相對最高。當(dāng)控制吞吐量后,Spark Streaming總處理時間縮短了14.43%,說明增加微批處理能力是流計算任務(wù)調(diào)度時間減少的關(guān)鍵。流檢測任務(wù)參數(shù)優(yōu)化實驗在設(shè)置較優(yōu)參數(shù)組合Sbest后,相較默認(rèn)參數(shù)(控制吞吐量)情況下,總調(diào)度時間縮短了37.50%,總處理時間縮短了50.20%。
圖10 3種參數(shù)配置下流檢測任務(wù)的性能對比
同理,WordCount流計算任務(wù)與Sort流計算任務(wù)使用權(quán)重狀態(tài)空間方法得到對應(yīng)的關(guān)鍵參數(shù)權(quán)重如圖11及圖12所示。由圖可知,不同參數(shù)對于不同流計算任務(wù)的影響程度不同,所以對不同流計算任務(wù)分析其參數(shù)權(quán)重是有必要的。
圖11 WordCount流計算任務(wù)中關(guān)鍵參數(shù)歸一化權(quán)重
圖12 Sort流計算任務(wù)中關(guān)鍵參數(shù)歸一化權(quán)重
流檢測任務(wù)參數(shù)優(yōu)化方法實驗結(jié)果表明控制吞吐量是總調(diào)度時間減少的關(guān)鍵,所以只在配置默認(rèn)參數(shù)(控制吞吐量)及配置優(yōu)化參數(shù)2種情況下進(jìn)行2種通用流計算任務(wù)參數(shù)優(yōu)化方法實驗。圖13與圖14為2種通用流計算任務(wù)分別在2種參數(shù)配置情況下的性能對比。由圖所示,在本實驗環(huán)境下,DQN-SSPO算法在2種通用流計算任務(wù)上也有效果,在總調(diào)度時間上分別縮短了12.50%和37.08%,總處理時間上分別縮短了33.82%和39.41%。
圖13 2種參數(shù)配置下WordCount流計算任務(wù)的性能對比
圖14 2種參數(shù)配置下Sort流計算任務(wù)的性能對比
實驗表明,3種流計算任務(wù)根據(jù)DQN-SSPO參數(shù)優(yōu)化算法進(jìn)行Spark Streaming參數(shù)調(diào)優(yōu)后,其流處理性能都有較大幅度的增加,說明了DQN-SSPO算法的有效性及可擴(kuò)展性。
在DQN-SSPO算法中,超參數(shù)設(shè)置對深度強(qiáng)化學(xué)習(xí)模型訓(xùn)練會產(chǎn)生很大影響。隨著模型訓(xùn)練episode數(shù)的增加,模型獲得高反饋的能力增加,模型訓(xùn)練的收斂速度將逐漸加快,反饋會在一個獎勵臨界點上下波動。此外,在DQN-SSPO方法中引入了經(jīng)驗回收機(jī)制,模型訓(xùn)練執(zhí)行的最大步數(shù)Stepmax和經(jīng)驗池D是影響DQN-SSPO模型訓(xùn)練的重要參數(shù)。因此,下面將分析調(diào)整2個參數(shù)對DQN-SSPO方法的魯棒性影響。
表4 參數(shù)調(diào)整后模型反饋結(jié)果
實驗中Stepmax分別設(shè)置為5000、10000、15000,經(jīng)驗池容量D分別設(shè)置為2500、5000進(jìn)行模型訓(xùn)練。通過模型訓(xùn)練反饋的信息進(jìn)行模型訓(xùn)練效果的判斷。本文定義Pm來反應(yīng)模型訓(xùn)練過程中整體的效果,見式(6),Pm越大說明模型訓(xùn)練整體效果越好。
(6)
通過實驗反饋可知,當(dāng)Stepmax設(shè)置為10000,經(jīng)驗池含量D設(shè)置為5000時,Pm相對最高,并且此時模型訓(xùn)練中最大獎勵Rmax值也相對最高。
目前Spark Streaming的參數(shù)優(yōu)化方案較少,本節(jié)將DQN-SSPO算法與一些針對Spark或Spark Streaming的參數(shù)優(yōu)化方法進(jìn)行對比,對比結(jié)果如表5所示。目前大多數(shù)參數(shù)優(yōu)化方法在考慮調(diào)整參數(shù)個數(shù)上均依賴人工經(jīng)驗設(shè)置,這樣會出現(xiàn)局部最優(yōu)解現(xiàn)象,導(dǎo)致其可擴(kuò)展性不強(qiáng)。DQN-SSPO針對不同流計算任務(wù)進(jìn)行關(guān)鍵參數(shù)權(quán)重計算,根據(jù)其權(quán)重來控制模型訓(xùn)練中參數(shù)狀態(tài)空間的轉(zhuǎn)移方向,更大程度增加參數(shù)調(diào)優(yōu)對提升流計算任務(wù)性能的影響。
表5 參數(shù)選擇方法對比
針對Spark Streaming的參數(shù)優(yōu)化配置問題,本文提出DQN-SSPO算法,其是一種基于深度強(qiáng)化學(xué)習(xí)的Spark Streaming參數(shù)優(yōu)化方法。實驗表明,3種流計算任務(wù)通過DQN-SSPO算法優(yōu)化后得到的較優(yōu)參數(shù)配置,使Spark Streaming性能有較大提升。下一步考慮將深度強(qiáng)化學(xué)習(xí)引入Spark Streaming微批處理能力中,在流計算任務(wù)中動態(tài)調(diào)整微批處理性能來增加流處理性能。