張維 王玥 羅珅
摘要:在大數(shù)據(jù)的時(shí)代里,實(shí)現(xiàn)高效的大數(shù)據(jù)的機(jī)器學(xué)習(xí)系統(tǒng),需要開發(fā)人員要搭建一個(gè)計(jì)算機(jī)機(jī)器學(xué)習(xí)系統(tǒng),并且該系統(tǒng)能夠同時(shí)完成機(jī)器學(xué)習(xí)和大規(guī)模數(shù)據(jù)處理的任務(wù)。現(xiàn)有的訓(xùn)練數(shù)據(jù)集重復(fù)使用,場(chǎng)景信息較少,已經(jīng)不能滿足大規(guī)模機(jī)器訓(xùn)練的需要,所以需要包含大規(guī)模數(shù)據(jù)、分布式的計(jì)算機(jī)系統(tǒng)完成訓(xùn)練。本文介紹了現(xiàn)有大數(shù)據(jù)機(jī)器學(xué)習(xí)基本概念和一種稱為Spark的大數(shù)據(jù)分布式計(jì)算方法。
關(guān)鍵詞:機(jī)器學(xué)習(xí);大數(shù)據(jù);分布計(jì)算模型
中圖分類號(hào):TP311.13 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2018)09-0027-02
1 背景
近年來(lái),隨著大數(shù)據(jù)的興起,推動(dòng)了大數(shù)據(jù)在機(jī)器學(xué)習(xí)領(lǐng)域的運(yùn)用和迅猛發(fā)展,基于大數(shù)據(jù)的機(jī)器學(xué)習(xí)能夠更有效更精準(zhǔn)的完成機(jī)器訓(xùn)練,基于大數(shù)據(jù)的機(jī)器學(xué)習(xí)系統(tǒng)已經(jīng)成為計(jì)算機(jī)研究開發(fā)領(lǐng)域的一個(gè)熱點(diǎn)研究問題。機(jī)器學(xué)習(xí)和大數(shù)據(jù)分析是運(yùn)用現(xiàn)有的計(jì)算機(jī)系統(tǒng)模型,將計(jì)算機(jī)獲取到的大量的數(shù)據(jù)或稱大數(shù)據(jù)轉(zhuǎn)換成有用信息的技術(shù)。運(yùn)用的數(shù)據(jù)規(guī)模越大,機(jī)器學(xué)習(xí)訓(xùn)練效果越好,精度更準(zhǔn),識(shí)別內(nèi)容更多,減少過擬合和欠擬合現(xiàn)象的發(fā)生[1-3]。
大數(shù)據(jù)機(jī)器學(xué)習(xí)既不是單純的機(jī)器學(xué)習(xí),也不是簡(jiǎn)單的大數(shù)據(jù)處理的問題,而同時(shí)涉及機(jī)器學(xué)習(xí)和大數(shù)據(jù)處理兩個(gè)方面的技術(shù)難題的攻克與融合的運(yùn)用[4]。這個(gè)過程中,研究人員不僅需要繼續(xù)關(guān)注機(jī)器學(xué)習(xí)的函數(shù)方法和算法,而且還需要繼續(xù)研究新的、高效的算法或改進(jìn)的現(xiàn)有的不完善的機(jī)器學(xué)習(xí)方法,保證能夠提升在實(shí)際運(yùn)行中的結(jié)果的準(zhǔn)確性。搭建一個(gè)基于大數(shù)據(jù)的機(jī)器學(xué)習(xí)系統(tǒng),同時(shí)涉及機(jī)器學(xué)習(xí)和大數(shù)據(jù)處理兩方面的問題,如機(jī)器學(xué)習(xí)的算法模型、數(shù)據(jù)集、訓(xùn)練方法、精度、擬合等問題,大數(shù)據(jù)處理方面的分布式存儲(chǔ)、并行化計(jì)算、網(wǎng)絡(luò)通信、任務(wù)調(diào)度、容錯(cuò)冗余備份等[5,6]。這些因素互相影響,增加了系統(tǒng)設(shè)計(jì)的復(fù)雜性和設(shè)計(jì)完成系統(tǒng)的穩(wěn)定性精準(zhǔn)性,給設(shè)計(jì)人員的系統(tǒng)開發(fā)設(shè)計(jì)帶來(lái)了一些挑戰(zhàn)。在設(shè)計(jì)大數(shù)據(jù)機(jī)器學(xué)習(xí)系統(tǒng)和研究其方法和算法時(shí),還要關(guān)注如何結(jié)合分布式和并行化的大數(shù)據(jù)處理技術(shù),以便在可接受的時(shí)間內(nèi)完成計(jì)算。
2 Spark方法
Spark[3]誕生于伯克利大學(xué)的AMPLab實(shí)驗(yàn)室,2010年正式開源,開放代碼提供給開發(fā)測(cè)試人員使用,2014年成為Apache的頂級(jí)項(xiàng)目。Spark在2014年11月的Daytona Gray Sort 100TB Benchmark競(jìng)賽中,打破了保持排序紀(jì)錄的Hadoop MapReduce框架結(jié)構(gòu)。Spark利用1/10的節(jié)點(diǎn)數(shù),把100TB數(shù)據(jù)的排序時(shí)間從72min降低到了23min。
Spark主要具有如下特點(diǎn):(1)計(jì)算效率高。通過有向無(wú)環(huán)圖DAG支持循環(huán)數(shù)據(jù)流,在內(nèi)存中存儲(chǔ)中間數(shù)據(jù),擁有高效的迭代運(yùn)算效率。(2)通用性強(qiáng),提供豐富的組件。Spark為開發(fā)人員提供了各種完整強(qiáng)大的組件庫(kù),包括sql查詢、流式計(jì)算、機(jī)器學(xué)習(xí)和圖算法組件等多種組件。(3)使用方便,兼容多種開發(fā)語(yǔ)言。提供Spark Shell腳本,用戶可以進(jìn)行交互式編程開發(fā),同時(shí)支持Scala、Java、Python和R等多種編程語(yǔ)言開發(fā)。(4)模式多樣,對(duì)外部環(huán)境依賴少,兼容多種服務(wù)器??梢元?dú)立運(yùn)行于各種集群服務(wù)器中,兼容Hadoop、Amazon EC2等云環(huán)境,可以訪問多種數(shù)據(jù)源如HDFS、Cassandra、HBase、Hive等。
Spark具有極其多的有點(diǎn),是由于其采用了不同于一般框架的數(shù)據(jù)結(jié)構(gòu),spark采用彈性分布式數(shù)據(jù)集(resilient distributed dataset,RDD),RDD是Apache Spark平臺(tái)的基礎(chǔ),RDD是以邏輯分塊進(jìn)行劃分的對(duì)象集合,緩存在內(nèi)存中,在內(nèi)存中數(shù)據(jù)儲(chǔ)存滿了以后,數(shù)據(jù)會(huì)保存到硬盤上。RDD有兩層含義:數(shù)據(jù)結(jié)構(gòu)RDD和編程模型RDD。(1)數(shù)據(jù)結(jié)構(gòu)RDD本質(zhì)上來(lái)說(shuō),是一個(gè)只讀、可分區(qū)的記錄集合,一個(gè)RDD包含多個(gè)分區(qū),每個(gè)分區(qū)是包含一個(gè)數(shù)據(jù)集的片段。RDD本質(zhì)上是一個(gè)內(nèi)存數(shù)據(jù)集,解決了磁盤讀寫密集和網(wǎng)絡(luò)通信負(fù)載過大的問題。(2)編程模型RDD上定義了兩類操作:轉(zhuǎn)換和動(dòng)作。轉(zhuǎn)換操作返回新的RDD,動(dòng)作操作的結(jié)果在存儲(chǔ)系統(tǒng)中導(dǎo)入一個(gè)值。Spark在RDD上定義的采用惰性調(diào)用機(jī)制,只有在調(diào)用作操作時(shí)才會(huì)真正觸發(fā)所有定義的操作。
由轉(zhuǎn)換操作得到的父子RDD之間存在依賴關(guān)系,包括窄依賴和寬依賴。窄依賴:父RDD中的一個(gè)分區(qū)只被一個(gè)子RDD的一個(gè)分區(qū)使用。窄的依賴關(guān)系有利于高效的執(zhí)行,而廣泛的依賴關(guān)系會(huì)帶來(lái)瓶頸,因?yàn)樗鼈儠?huì)破壞流水線,而且需要通信密集的隨機(jī)操作。寬依賴:父RDD的一個(gè)分區(qū)被一個(gè)子RDD的多個(gè)分區(qū)使用。
在Spark中,計(jì)算被建模為有向無(wú)環(huán)圖(DAG,directed acyclic graph),其中的每個(gè)頂點(diǎn)表示彈性分布式數(shù)據(jù)集RDD,每個(gè)邊表示RDD上的實(shí)際操作。spark用戶將計(jì)算作為有向無(wú)環(huán)圖進(jìn)行建模,該有向無(wú)環(huán)圖會(huì)轉(zhuǎn)換并運(yùn)行RDD上的動(dòng)作。有向無(wú)環(huán)圖DAG會(huì)分階段進(jìn)行編譯,每個(gè)階段將并行執(zhí)行一系列的任務(wù)。Spark中的分布式執(zhí)行操作,是通過對(duì)機(jī)器上的有向無(wú)環(huán)圖階段進(jìn)行分塊來(lái)實(shí)現(xiàn)的。Driver包含了兩個(gè)調(diào)度組件,有向無(wú)環(huán)圖調(diào)度器和任務(wù)調(diào)度器,用于給workers分配任務(wù),以及協(xié)調(diào)workers。
在基本的設(shè)置中,Spark將模型參數(shù)存儲(chǔ)在driver節(jié)點(diǎn)中,而workers與driver進(jìn)行通信,以便在每次迭代后更新參數(shù)。在大規(guī)模的部署中,模型參數(shù)不是特別適合在driver中存儲(chǔ),而應(yīng)將其作為RDD進(jìn)行維護(hù)。這引入了很大的開銷,因?yàn)樾枰诿看蔚袆?chuàng)建新的RDD以保存更新過的模型參數(shù)。更新模型包括在機(jī)器和磁盤之間混洗數(shù)據(jù)限制了Spark的可擴(kuò)展性。這是Spark中基本數(shù)據(jù)流模型有向無(wú)環(huán)圖不足的地方。Spark的設(shè)計(jì)目的是為一般數(shù)據(jù)處理設(shè)計(jì)的,而不是為機(jī)器學(xué)習(xí)設(shè)計(jì)的。然而,開發(fā)人員可以利用專用于Spark的MLlib的工具包,在Spark上進(jìn)行機(jī)器學(xué)習(xí)。同時(shí)Spark的缺點(diǎn)還有不支持機(jī)器學(xué)習(xí)所需的迭代操作。
3 結(jié)語(yǔ)
基于大數(shù)據(jù)的機(jī)器學(xué)習(xí)系統(tǒng)的研究和開發(fā),不僅是研究算法問題,更是解決一個(gè)大規(guī)模系統(tǒng)之間相互關(guān)聯(lián)、協(xié)同運(yùn)行的問題。相比傳統(tǒng)的機(jī)器學(xué)習(xí),基于大數(shù)據(jù)的機(jī)器學(xué)習(xí)系統(tǒng),大大的擴(kuò)充了機(jī)器學(xué)學(xué)所需訓(xùn)練數(shù)據(jù)樣本的數(shù)量,使機(jī)器學(xué)習(xí)的訓(xùn)練數(shù)據(jù)不再拘泥于已有的、大量已被頻繁使用過的數(shù)據(jù)集,使得機(jī)器學(xué)習(xí)的訓(xùn)練過程和結(jié)果更加多樣化,挖掘分析出更多更隱藏的、不為人知的有用信息。隨著硬件技術(shù)的提升和編程算法的不斷優(yōu)化,越來(lái)越多的科研人員參與其中,數(shù)據(jù)采集的過程已經(jīng)不再是影響大數(shù)據(jù)發(fā)展的首要因素,通過數(shù)據(jù)挖掘,分析出數(shù)據(jù)的關(guān)系,發(fā)現(xiàn)數(shù)據(jù)潛在的價(jià)值,提取有用的數(shù)據(jù)歸納總結(jié),抽象出普遍特征,避免無(wú)用數(shù)據(jù)對(duì)需要的數(shù)據(jù)進(jìn)行干擾是當(dāng)前大數(shù)據(jù)學(xué)習(xí)面臨的首要挑戰(zhàn)。機(jī)器學(xué)習(xí)也需要通過大量數(shù)據(jù)完成訓(xùn)練,通過不斷優(yōu)化,將大數(shù)據(jù)與機(jī)器學(xué)習(xí)相互融合,提升二者關(guān)聯(lián)性,完成更好的數(shù)據(jù)挖掘過程和更精準(zhǔn)的完成機(jī)器訓(xùn)練。
參考文獻(xiàn)
[1]焦嘉烽,李云.大數(shù)據(jù)下的典型機(jī)器學(xué)習(xí)平臺(tái)綜述[J].計(jì)算機(jī)應(yīng)用,2017,(11):7-15+20.
[2]何清,李寧,羅文娟.大數(shù)據(jù)下的機(jī)器學(xué)習(xí)算法綜述[J].模式識(shí)別與人工智能,2014,(04):41-50.
[3]唐振坤.基于Spark的機(jī)器學(xué)習(xí)平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)[D].廈門大學(xué),2014.
[4]Jiang, J., Yu, L., Jiang, J., Liu, Y., Cui, B.: Angel: a new large-scale machine learning system. National Science Review nwx018(2017).
[5]ZAHARIA M, CHOWDHURY M, FRANKLIN M J, et al. Spark:cluster computing with working sets [C]Proceedings of the 2ndUSENIX Conference on Hot Topics in Cloud Computing. Berkeley, CA: USENIX Association,2010: Article No.10.
[6]K Zhang , S Alqahtani , M Demirbas: A Comparison of Distributed Machine Learning Platforms. International Conference on Computer Communicatio,2017:1-9.