?

基于Spark的性能優化及Spark在深度學習的應用研究

2020-06-29 09:58段智華
大眾科學·中旬 2020年7期
關鍵詞:性能優化深度學習人工智能

摘要:隨著人工智能和大數據時代的到來,Spark+AI大數據平臺快速發展,Spark是當今大數據領域最活躍、最熱門、最高效的大數據通用計算平臺。到目前為止,Spark是唯一一個將大規模數據處理與最先進的機器學習和人工智能算法相結合的統一分析引擎。本文闡述了Spark大數據技術在中國電信天翼高清IPTV端到端系統中的應用,以Spark大數據平臺的性能優化及Spark在深度學習的應用為研究對象,從Spark內存管理、JVM GC性能調優、數據序列化、數據類型優化、Spark緩存優化、數據傾斜調優、Spark算子調優、Spark在深度學習的應用調優進行闡述,并對大數據技術未來的發展進行了展望 。

關鍵詞: Spark;人工智能;大數據;深度學習;內存優化;Shuffle優化;性能優化

1 引言

Spark是當今大數據領域最活躍、最熱門、最高效的大數據通用計算平臺,Spark誕生于美國加州大學伯克利分校AMP實驗室。Apache Spark已經成為大數據領域最大的開源社區,達到250多個組織的1400多個貢獻者。在任何規模的數據計算中,Spark在性能和擴展性上都更具優勢。近年來,Spark技術在工業界得到廣泛應用,中國電信公司基于Spark大數據技術自研構建了天翼高清IPTV端到端系統,基于全國超大規模的實時數據進行大數據分析。本文結合生產業務場景對Spark性能優化進行了實踐探索,從Spark內存管理、JVM GC性能調優、數據序列化、數據類型優化、Spark緩存優化、數據傾斜調優、Spark算子調優、Spark在深度學習的調優進行闡述。實踐表明,經過一系列的優化措施,提升了Spark集群的計算性能及Spark任務執行速度。

2 ?天翼高清IPTV端到端系統案例實踐

Spark大數據技術為天翼高清IPTV端到端系統的穩定運行提供了支撐保障,在天翼高清IPTV端到端系統中,清洗模塊、單質量模塊、考核模塊、多維度計算模塊、告警模塊等模塊均以Spark技術作為核心基石,各模塊基于Spark Core 、Spark SQL、Spark Streaming、Spark ML等技術進行了設計與實現。

在生產實踐中經常會面臨Spark性能優化的問題,Spark應用程序基于內存進行計算,系統運行性能瓶頸受到集群資源的限制(例如,CPU、網絡帶寬、內存、存儲等)。一個簡單的方法是增加Spark的計算資源。

(1)Spark內存管理。

Spark的內存包括執行內存、存儲內存。執行內存是指在洗牌、關聯、排序及聚合中用于計算的內存,存儲內存是指在集群中存儲內部數據的內存,兩者共享一個統一的內存區域,可以配置spark.memory.fraction、spark.memory.storageFraction等參數進行調參。

(2)JVM GC性能調優。

當加載的數據及Shuffle讀寫操作數據量較大時,可能會出現JVM GC的問題。如果出現GC,首先要收集垃圾回收發生的頻率和GC所用時間的統計信息,考慮將對象進行序列化緩存,GC優化的效果取決于應用程序和可用內存的多少。在案例實踐中要協調平衡Spark執行內存和存儲內存的關系、JVM年輕代內存和老年代內存的關系、加載數據總量大小與批處理數據大小的關系。在JVM GC性能調優時,可以采用數據序列化、調整數據類型、數據緩存等方法。

(3)數據序列化。

Spark提供了Java序列化、kryo序列化方式,Kryo比Java序列化運行速度更快、更緊湊。在案例實踐中采用了Kyro的序列化,將自定義的話單類型注冊給Kyro序列化器,并設置默認緩存空間的大小。

1)調整數據類型。

Java字符串類型占用內存空間較大,在案例實踐中將部分字段的String類型調整為Long類型,減少內存的消耗;加載文件時候篩選業務字段,從70個字段調整為10個字段,減少了內存空間的占用。

2)使用Spark緩存。

天翼高清IPTV端到端系統的播放類型包括組播、直播單播、時移、回看、點播、直播

及點播匯總等各個類型,每次都加載HDFS數據,運行時間較長。使用Spark緩存進行優化,先從HDFS文件系統中加載數據,然后將加載的數據緩存到集群內存中,遍歷播放類型時可以直接讀取緩存中的數據,計算性能大幅提升。

3)Spark數據傾斜調優。

數據傾斜是Spark分布式計算必須面臨的問題,也是作大數據分析不能繞開的問題,

稍微復雜一點的業務,SparK大數據分析都需解決數據傾斜。在天翼高清IPTV端到端系統中,多維度模塊(區域播放類型、單節目統計)要按省、地、縣統計,將每一條記錄匯聚到省、地、縣編碼,進行reducebykey聚合操作將導致省級編碼記錄數據傾斜的現象,我們使用隨機Key實現雙重聚合及從業務層面解決數據傾斜的問題。在第一次聚合時,使用reduceByKey算子進行Key-Value聚合,在區域播放類型、單節目模塊將每個區域編碼加上隨機數前綴打散,組成一個新的Key值,調用reduceByKey操作。第二次聚合時,再去掉每個區域編碼的前綴隨機數,再調用一次reduceByKey操作,得到按區域統計的全局聚合結果。

在業務層面,單節目模塊包括直播、點播,需根據區域編碼、節目編碼、播放類型等字段進行聚合計算,直播節目的記錄包括省、地、縣的記錄,點播記錄包括省級的記錄,如果將直播、點播記錄合在一起進行聚合計算,將發生數據傾斜的情況,某一些任務運行特別緩慢,不能進行實時統計分析。

4)Spark算子調優。

在天翼高清IPTV端到端系統中,單節目模塊月維度的統計原采用collect方法將數據

全部收集到Driver節點寫入HDFS及數據庫,單節目數據量較大,導致運行時間較長及內存溢出。在案例實踐中將foreach算子調整為foreachPartition算子,對每一個分區建立一個連接,按分區寫入數據,提升了系統運行性能。

3 Spark在深度學習的調優

Pytorch 、Tensorflow深度學習框架是科研界、工業界運用最廣泛的人工智能框架,基于Databricks及亞馬遜(Amazon)公司的云計算平臺,將Spark與Pytorch 、Tensorflow無縫集成,實現基于Spark的數據預處理、單節點、分布式深度學習訓練及分布式深度學習預測推理。Spark在深度學習層面可能的一些調優方法,包括:

深度學習模型本身的性能調優。例如,ResNet-50模型加載預訓練模型+微調網絡全部參數;或者,凍結輸出層以外的所有網絡,微調輸出層參數。

分布式深度學習預測中數據輸入管道的調優。如果數據輸入是瓶頸,可以使用Spark加載數據,轉換為Spark DataFrame作為模型的輸入,合理設置Spark批處理的記錄數,以提升系統吞吐量。

4 未來展望

Spark官網即將發布 Apache Spark 3.0版本,新版本將包含許多重要的新特性,包括支持GPU 感知調度、Spark Graph 圖增強、PySpark 可用性進一步提升等。FaceBook、谷歌、Amazon等業界最領先的人工智能公司,正在全面的轉向深度學習。人工智能學習的核心是深度學習,深度學習是目前商業界最有價值和潛力的,深度學習應用于自動駕駛和演示人工智能武器等,增強學習的核心是實時的與環境進行交互,交互的能力可從環境交互中不斷提升自己的能力,增強學習和深度學習的聯合體,將使增強學習爆發出終極的潛力,也使深度學習的價值最大化。

參考文獻

[1]《Spark大數據商業實戰三部曲》第二版:清華大學出版社,王家林、段智華.

[2]《Spark大數據商業實戰三部曲》:清華大學出版社,王家林、段智華、夏陽.

[3]《Spark內核機制解析及性能調優》:機械工業出版社,王家林、段智華.

[4]《Spark SQL大數據實例開發教程》:機械工業出版社,王家林、段智華.

猜你喜歡
性能優化深度學習人工智能
2019:人工智能
人工智能與就業
數讀人工智能
SQL Server數據庫性能優化的幾點分析
Web應用的前端性能優化
MOOC與翻轉課堂融合的深度學習場域建構
大數據技術在反恐怖主義中的應用展望
深度學習算法應用于巖石圖像處理的可行性研究
基于深度卷積網絡的人臉年齡分析算法與實現
下一幕,人工智能!
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合