《大数据》第1期“专题”——大数据机器学习系统研究进展(上)
大數據機器學習系統研究進展
黃宜華1,2
1.南京大學計算機軟件新技術國家重點實驗室 南京 210023;
2.南京大學PASA大數據技術實驗室 南京 210023
摘要:要實現高效的大數據機器學習,需要構建一個能同時支持機器學習算法設計和大規模數據處理的一體化大數據機器學習系統。研究設計高效、可擴展且易于使用的大數據機器學習系統面臨諸多技術挑戰。近年來,大數據浪潮的興起,推動了大數據機器學習的迅猛發展,使大數據機器學習系統成為大數據領域的一個熱點研究問題。介紹了國內外大數據機器學習系統的基本概念、基本研究問題、技術特征、系統分類以及典型系統;在此基礎上,進一步介紹了本實驗室研究設計的一個跨平臺統一大數據機器學習系統——Octopus(大章魚)。
關鍵詞:大數據;機器學習;分布并行計算;大數據處理平臺
Research Progress on Big Data Machine
Learning System
Huang Yihua1,2
1.National Key Laboratory for Novel Software Technology, Nanjing University, Nanjing 210023, China;
2.PASA Big Data Laboratory, Nanjing University, Nanjing 210023, China
Abstract: To achieve efficient big data machine learning, we need to construct a unified big data machine learning system to support both machine learning algorithm design and big data processing. Designing an efficient, scalable and easy-to-use big data machine learning system still faces a number of challenges. Recently, the upsurge of big data technology has promoted rapid development of big data machine learning, making big data machine learning system to become a research hotspot. The basic concepts, research issues, technical characteristics, categories, and typical systems for big data machine learning system, were reviewed. Then a unified and cross-platform big data machine learning system, Octopus, was presented.
Key words: big data, machine learning, distributed and parallel computing, big data processing platform
1 大數據機器學習系統研究背景
近年來,大數據技術在全球發展迅猛,掀起了巨大的研究熱潮,引起全球業界、學術界和各國政府的高度關注。隨著計算機和信息技術的迅猛發展和普及應用,行業應用數據呈爆炸性增長。動輒達到數百TB甚至數PB規模的行業/企業大數據已經遠遠超出了傳統計算技術和信息系統的處理能力。與此同時,大數據往往隱含著很多在小數據量時不具備的深度知識和價值,大數據智能化分析挖掘將為行業/企業帶來巨大的商業價值,實現多種高附加值的增值服務,從而提升行業/企業生產管理決策水平和經濟效益。
大數據分析挖掘處理主要分為簡單分析和智能化復雜分析兩大類。簡單分析主要采用類似于傳統數據庫OLAP的處理技術和方法,用SQL完成各種常規的查詢統計分析;而大數據的深度價值僅通過簡單分析是難以發現的,通常需要使用基于機器學習和數據挖掘的智能化復雜分析才能實現。
機器學習和數據分析是將大數據轉換成有用知識的關鍵技術,并且有研究表明,在很多情況下,處理的數據規模越大,機器學習模型的效果會越好[1~3]。目前,國內外業界和學術界專家普遍認同的觀點是,越來越多的海量數據資源加上越來越強大的計算能力,已經成為推動大數據時代人工智能技術和應用發展的動力,將基于大數據的機器學習和人工智能推上了新一輪發展浪潮,讓大數據機器學習(bigdata machine learning)成為全球業界和學術界高度關注的熱點研究領域。隨著大數據時代的來臨,Google、Facebook、微軟、百度、騰訊等國內外著名企業均紛紛成立專門的基于大數據的機器學習與人工智能研發機構,深入系統地研究基于大數據的機器學習和智能化計算技術。
由于大數據機器學習和數據挖掘等智能計算技術在大數據智能化分析處理應用中具有極其重要的作用,在2014年12月中國計算機學會(CCF)大數據專家委員會上百位大數據相關領域學者和技術專家投票推選出的“2015年大數據十大熱點技術與發展趨勢”中,結合機器學習等智能計算技術的大數據分析技術被推選為大數據領域第一大研究熱點和發展趨勢[4]。
由于大數據機器學習在具體實現時通常需要使用分布式和并行化大數據處理技術方法,也有人將大數據機器學習稱為“分布式機器學習”(distributedmachine learning)或“大規模機器學習”(large-scale machine learning)。
大數據機器學習,不僅是機器學習和算法設計問題,還是一個大規模系統問題。它既不是單純的機器學習,也不是單純的大數據處理技術所能解決的問題,而是一個同時涉及機器學習和大數據處理兩個主要方面的交叉性研究課題。一方面,它仍然需要繼續關注機器學習的方法和算法本身,即需要繼續研究新的或改進的學習模型和學習方法,以不斷提升分析預測結果的準確性;與此同時,由于數據規模巨大,大數據機器學習會使幾乎所有的傳統串行化機器學習算法難以在可接受的時間內完成計算,從而使得算法在實際應用場景中失效。因此,大數據機器學習在關注機器學習方法和算法研究的同時,還要關注如何結合分布式和并行化的大數據處理技術,以便在可接受的時間內完成計算。為了能有效完成大數據機器學習過程,需要研究并構建兼具機器學習和大規模分布并行計算處理能力的一體化系統。
因此,領域內出現了“大數據機器學習系統”或者“分布式學習系統”的概念,并進行了諸多大數據機器學習系統的研究與開發工作。
2 大數據機器學習系統的技術特征
參考文獻[5,6]專門介紹了大數據機器學習系統的技術特征。
如圖1所示,一個大數據機器學習系統會同時涉及機器學習和大數據處理兩方面的諸多復雜技術問題,包括機器學習方面的模型、訓練、精度問題以及大數據處理方面的分布式存儲、并行化計算、網絡通信、局部性計算、任務調度、容錯等諸多因素。這些因素互相影響,交織在一起,大大增加了系統設計的復雜性。因此,大數據機器學習已經不僅僅是一個算法研究問題,而是需要針對大數據集,考慮從底層的大數據分布存儲到中層的大數據并行化計算,再到上層的機器學習算法,設計一種一體化的支撐系統,形成易于為數據分析程序員和機器學習研究者使用的、完整的大數據機器學習系統。
圖1 大數據機器學習系統所涉及的復雜因素[5]
一個理想的大數據機器學習系統通常需要具備以下幾個方面的技術要素和特征[5~7]。
● 應當從整個學習的生命周期/流水線來考慮,包括訓練數據和特征的提取、并行學習算法的設計、訓練模型和參數的查詢管理、分布式訓練計算過程,都應在一個一體化的學習系統平臺上完成。
● 應提供多種并行訓練模式,支持不同的機器學習模型和算法。
● 需要提供對底層系統的抽象,以實現對底層通用大數據處理引擎的支持,并提供數據科學中常用的編程語言接口(API)。
● 應該擁有開放和豐富的生態、廣泛的應用和快速的進化能力。
在上述技術特征中,一個非常重要的思路是,要通過系統抽象來降低系統設計的復雜性。如圖2所示,一個設計良好的大數據機器學習系統,應當通過定義特定的機器學習編程計算和系統抽象接口,將上層機器學習和底層分布式系統解耦開來,將機器學習實現在現有的大數據計算平臺之上,而不需要考慮底層系統層面的因素,以此實現底層大數據處理平臺對上層用戶的透明化,讓上層用戶從諸多底層的分布和并行化大數據編程計算細節中解放出來,以便他們致力于上層的機器學習模型和算法的設計實現。通過編程計算和系統抽象層API,向上提供各種機器學習編程計算接口以及學習模型和訓練數據的表示,向下由底層分布式系統負責處理并提供高效的分布和并行化計算實現。
圖2 大數據機器學習系統抽象
3 大數據機器學習系統的主要研究問題
知名的Apache Flink大數據分析系統研究者在2014年VLDB會議主題報告和論文中[8],從數據分析的復雜程度和數據規模的維度,考察了現有的相關研究工作和系統,如圖3所示。現有的系統要么主要用于小規模復雜分析,要么主要用于大規模的簡單統計分析,缺少既具有復雜數據分析能力又具有強大的大數據處理能力的大數據分析系統;文章作者甚至認為,對于行業大數據分析人員而言,現有的工具還處于“石器時代”[8]。
圖3 研究者Apache Flink提出的分析維度和研究現狀[8]
與此同時,著名的UC Berkeley AMPLab在研究基于Spark的機器學習庫MLBase[9]時,從計算性能和系統易用性兩個重要維度,考察了現有的大數據機器學習研究工作和系統,如圖4所示。面向機器學習和數據分析時,目前已有的工作和系統,絕大多數都未能同時具備大規模分析處理能力和良好的系統易用性。
圖4 Spark系統研究者提出的分析維度和研究現狀[9]
因此,大數據機器學習除了需要繼續關注和研究傳統意義上的學習方法和算法問題,以不斷提高學習精度外,還需要重點關注和研究解決大數據場景下所特有的兩大技術問題:一是大數據復雜分析時的計算性能問題;二是大數據機器學習系統的可編程性和易用性問題。
(1)大數據復雜分析時的計算性能問題
在計算性能方面,大規模數據集給很多傳統串行的機器學習和數據分析挖掘算法帶來很大的挑戰,需要研究解決面向大數據機器學習和數據分析的高效計算方法和系統。在數據集較小時,很多復雜度在O(n log n)、O(n2)甚至O(n3)的傳統串行化機器學習算法都可以有效工作;但當數據規模增長到極大尺度時,現有的串行化算法將花費難以接受的時間開銷,使得算法在實際應用場景中失效,這給業界大量實際的大數據復雜分析應用帶來很多新的挑戰和問題[10]。正如微軟全球副總裁陸奇博士在2012年指出的,“大數據使得現有的大多數機器學習算法失效,面向大數據處理時這些算法都需要重寫”。
在大型互聯網企業,大規模機器學習算法經常用于處理十億至千億級別的樣本以及一億至數十億數據特征的大規模數據集。例如,Google著名的Seti太空搜索項目需要進行高達千億樣本、十億特征數據的大規模機器學習,騰訊Peacock主題模型分析系統需要進行高達十億文檔、百萬詞匯、百萬主題的主題模型訓練,而僅一個百萬詞匯乘以百萬主題的矩陣,其數據存儲量即高達3TB,如果再考慮十億文檔乘以百萬主題的矩陣,其數據量更是高達3 PB[3]。如此大量的訓練樣本,加上機器學習算法本身的復雜性,導致難以在傳統的串行化計算平臺上、在可接受的時間內完成如此巨大的復雜分析計算任務,因而帶來了十分突出的計算性能問題。因此,大數據機器學習算法和系統需要研究解決大規模場景下高效的分布式和并行化算法設計以及計算問題,以保證算法和系統可以在可接受的時間內完成大規模數據的學習和訓練。
(2)大數據機器學習系統的可編程性和易用性問題
為了滿足急劇增長的大數據處理需求,過去幾年來,全球推出了Hadoop[11]和Spark[12]等多種主流大數據處理技術和系統平臺。這些主流技術和平臺的出現為大數據的處理提供了良好的技術手段和方法。Hadoop的出現使得大數據處理技術和平臺從無到有,而基于內存計算的Spark系統的出現使得大數據分析計算從慢到快。然而,現有的大數據處理技術和系統平臺都存在很大的易用性問題,難以為普通的程序員掌握和使用,尤其是面向復雜的大規模機器學習和數據分析時,這個問題更為突出。
大數據機器學習和數據分析的并行化程序設計,比傳統的串行化算法設計復雜很多、對程序員的技術要求更高。對于普通的數據分析程序員或機器學習研究者來說,在特定的大數據編程模型和平臺下進行并行化機器學習和數據分析算法設計,需要掌握很多分布式系統背景知識和并行程序設計技巧,這對他們來說難度較大,經常要把實際工作的大部分時間花費在底層復雜的并行化和分布式編程和調試上,給上層數據分析和算法設計工作帶來很大的不便和困難,導致普通程序員與現有的各種大數據處理平臺之間存在一個難以逾越的鴻溝[8,9,13~15]。
另一方面,即使對于諸如Google、百度等具有強大技術力量的互聯網企業程序員來說,隨著多種大數據處理與編程平臺的出現以及各種分析應用問題需求的不同,他們也常常需要針對不同平臺,重復編寫和測試各種并行化機器學習和數據分析算法,這種在多個大數據平臺上重復編寫和嘗試數以百計的機器學習算法的工作負擔也很重。正如阿里巴巴集團副總裁、高級研究員章文嵩博士在中國計算機學會第一屆大數據學術會議上所指出的,“淘寶內部需要使用的并行化機器學習算法很多,隨著新型的并行化計算框架的逐步出現,需要將其逐個實現到MPI、MapReduce、Spark等并行計算框架上;如果后面出現更先進的框架,又面臨著將這些算法重新實現一遍的負擔”。
針對大數據的機器學習和數據分析,現有的大數據處理技術和平臺存在很大的可編程性和易用性問題,導致普通程序員和常規的程序設計方法與現有的大數據分析處理編程技術之間存在著一個很大的鴻溝。正如CCF大數據專家委員會《2015年大數據發展趨勢預測報告》指出的那樣,“由于現有的大數據平臺易用性差,而垂直應用行業的數據分析又涉及領域專家知識和領域建模,目前在大數據行業分析應用與通用的大數據技術之間存在很大的鴻溝,缺少相互的交叉融合”[4]。
因此,大數據機器學習系統要解決的一個重要問題是,讓不易使用的大數據處理技術和平臺變得易于使用,要填平普通程序員和常規程序設計方法與現有的大數據處理技術之間的鴻溝,盡可能讓普通程序員用常規程序設計方法便能有效完成大數據的復雜分析處理。
根據Google Seti項目研究人員在開發實際的大型機器學習系統上的經驗,在面向大數據時,考慮到用戶開發效率問題,系統易用性與提高機器學習精度幾乎同等重要,有時甚至比精度問題更為重要,“也許過去學術界很少關心設計一個精度稍差、但有更好易用性和系統可靠性的學習算法,但在實際應用中,這會體現出非常重要的價值”。
4 大數據機器學習系統的分類
近幾年來,隨著大數據的來臨,基于大數據的機器學習方法和系統成為業界和學術界普遍關注的研究熱點。為了提供有效的大數據機器學習和數據分析手段,業界和學術界在嘗試多種途徑和方法,在不同的并行計算模型和平臺下,在實際的數據分析挖掘中得到應用。
較早出現以及現有的一些大數據機器學習算法和系統大多采用較為低層的緊耦合、定制化方法構建。這些算法和系統大都針對特定的應用,選擇特定的平臺和模型,針對特定的機器學習模型和特定的計算模式,從串行算法和原型到分布并行化算法和原型,自底層向上進行緊耦合和定制化的開發和優化。盡管這可以最大化利用系統資源以達到最佳的性能,但這種低層的緊耦合定制化實現方法,將學習和系統混雜在一起,實現難度大,算法和系統也難以調試和維護[5,6]。
從前述的大數據機器學習系統特征來看,一個設計良好的大數據機器學習系統應當考慮高層的系統層抽象,向上為程序員提供易于使用的高層機器學習算法編程接口,向下基于現有的通用化大數據處理平臺提供大規模數據的分布和并行化計算能力。為此,近年來已經開始出現基于各種高層編程計算和系統抽象設計大數據機器學習系統的研究工作。
在高層編程計算和系統抽象上,目前的大數據機器學習系統大致可分為3種主要的編程計算和系統抽象方法,分別是基于矩陣模型的抽象、基于圖模型的抽象以及基于參數模型的抽象。
(1)基于矩陣模型的抽象
基于矩陣模型的抽象基于這樣一個事實:大多數機器學習和數據分析算法都可以表示為矩陣或向量代數計算,因此可以構建一個基于矩陣計算模型的機器學習系統,允許程序員直接基于矩陣計算快速構建機器學習和數據分析算法。最典型的基于矩陣模型的大數據機器學習系統尚不多見,UCBerkeley AMP Lab推出的Spark MLlib是一個試圖基于矩陣計算模型構建上層各種機器學習算法的系統;最近Spark系統提出了一個DataFrame的數據抽象機制,允許基于矩陣和表等數據結構,設計各種機器學習和數據分析算法。此外,國內由南京大學PASA大數據實驗室研究開發的“Octopus(大章魚)”系統是一個以大規模矩陣模型為中心的跨平臺大數據機器學習系統。
(2)基于圖模型的抽象
雖然矩陣可以表示大多數機器學習和數據分析算法,但對于一些基于圖模型的社會網絡分析問題,基于矩陣模型進行計算并非最有效的方法(雖然圖和矩陣表示具有理論上的等價性)。矩陣模型對于圖數據的表達不如圖模型,且通常會面臨稀疏性的問題。因此,一些社會網絡分析類的實際應用需要基于更為高效的圖模型的學習和分析方法,為此出現了相應的基于圖模型的大數據機器學習系統。最典型的基于圖模型的系統是美國卡耐基梅隆大學(CMU)推出的GraphLab系統[16]以及基于Spark構建的GraphX系統。
(3)基于參數模型的抽象
基于矩陣模型和圖模型的系統主要是從數據表示模型的角度來構建系統,這兩種方法的特點是更接近于實際學習問題中自然化的數據表示和計算模型,因此對于數據分析人員方便快速地構建機器學習和數據分析算法比較自然和直觀。但是,大數據機器學習常常還需要涉及大規模模型,例如,近幾年發展迅猛的深度神經網絡算法,常常需要通過對大量模型參數的調優來提高學習精度,在這種情況下,上述兩種方法會缺少靈活性,難以讓算法設計者通過控制模型參數進行算法優化。為此,有研究者提出了一種基于模型參數的抽象方法,即把所有機器學習算法抽象為對學習過程中一組模型參數的管理和控制,并提供對大規模場景下大量模型參數的有效管理和訪問。目前參數模型最典型的方法是最初由美國卡耐基梅隆大學的LiMu等人提出的、后在很多系統中得到進一步應用的Parameter Server[17,18]。
實際的系統也可能會是一種兼有上述多種類型的混合系統。此外,也有不少系統從并行模式角度來區分,分為數據并行和模型并行兩種方式,且一些系統只提供數據并行方式,另一些系統會同時提供數據并行和模型并行兩種方式。
5 典型大數據學習方法和系統介紹
5.1 基于特定平臺的定制式并行化機器學習算法與算法庫
隨著Hadoop MapReduce[11]和Spark[12]大數據并行計算與編程平臺的出現和成熟應用,Hadoop和Spark已經成為目前大數據分析處理的主流平臺。為了解決大規模機器學習問題,有大量的研究工作致力于基于HadoopMapReduce和Spark以及傳統的MPI并行計算框架,完成各種并行化機器學習和數據挖掘算法的設計。在諸如TPDS、JPDC、IPDPS、ICPP、ICPADS、IEEEBigData等大數據和分布并行計算領域的知名期刊和國際會議上,這些并行化算法研究工作不勝枚舉。由于需要同時顧及上層機器學習算法設計和底層分布并行化大數據處理系統層細節,總體而言,基于上述不同的并行化編程方法和平臺進行并行化機器學習算法設計,仍屬于一種專業性較強、技術要求較高、過程較為繁瑣的工作,難以為缺少分布式和并行計算知識背景的普通程序員使用。
為了讓普通數據分析程序員能夠直接使用并行化機器學習算法,目前普遍的一種做法是,在不同的并行化計算平臺上,由專業的機器學習算法設計者實現并行化機器學習算法,提供一個機器學習和數據挖掘工具包以供一般的數據分析和應用開發程序員直接使用,如Hadoop下的Mahout以及Spark環境下的MLlib。
Mahout的主要任務是設計并提供一些基于MapReduce的可擴展的機器學習領域經典算法庫,包括聚類、分類、推薦過濾、頻繁項集挖掘等。這些并行化算法都是基于HadoopMapReduce平臺完成的,用戶可直接調用Mahout算法庫實現好的算法。然而,Mahout提供的并行化機器學習算法數量有限,而且作為標準的軟件包,其所提供的算法幾乎都是標準的,在算法精度和性能上不一定能滿足用戶的需要。進一步,MapReduce的設計目標是解決數據密集但計算邏輯相對簡單的批處理問題。然而,大多數機器學習算法的計算流程都比較復雜,模型的訓練過程往往需要多次迭代計算(如梯度下降算法)、有中間數據集需要共享等。MapReduce模型處理這類問題時,額外的調度和初始化開銷導致其處理性能偏低。
為了克服MapReduce在計算性能上的缺陷,不斷地有新的并行化計算模型和框架出現,UCBerkeley AMP實驗室推出的、目前已成為Apache開源項目的Spark[12]系統是目前最有影響力的大數據處理平臺之一。Spark使用基于內存計算的并行化計算模型RDD(resilientdistributed dataset)[12],提供了一個強大的分布式內存并行計算引擎,實現了優異的計算性能,同時還保持與Hadoop平臺在底層分布式數據存儲上的兼容性。在Spark執行引擎上,AMP實驗室實現了很多機器學習算法,并逐步整理成Spark下的一個機器學習算法庫項目MLlib。MLlib目前也包含一些矩陣操作,并希望基于矩陣的表示設計開發一些統計包和機器學習算法庫。為了加速上層計算,MLlib底層通過Breeze使用了BLAS(basiclinear algebra subprogram)單機的矩陣函數庫。BLAS是很多更高層的數學函數庫和數學編程語言(如LAPACK和MATLAB等)的基本構成單元。BLAS和LAPACK是當下普遍使用的線性代數函數庫,主要定義了一些線性代數中常用的運算操作和方程求解、矩陣分解的函數。此外,基于MLlib的工作基礎,UCBerkeley還計劃研發MLBase[9]項目,該項目增加了機器學習模型自動選擇和參數自動優化等功能,提供了以目標為導向的高層機器學習方法接口。
提供機器學習算法庫在一定程度上減輕了程序員進行機器學習算法設計的負擔。但即使如此,程序員編寫程序時仍然需要熟悉具體的并行編程計算模型和平臺,而且由于實際數據分析應用的需求不同,很多時候工具包所提供的通用算法在學習精度和計算性能上可能不能滿足需求,需要程序員定制和改進某個并行化機器學習算法或者開發新的算法,這對普通數據分析程序員仍然是很大的挑戰。
5.2 結合傳統數據分析平臺的大數據機器學習系統
雖然有了基于大數據處理平臺的機器學習算法設計方法,能夠較好地解決一體化的大數據存儲、計算以及并行化算法設計問題,但僅有機器學習系統仍然不能很好地解決各個平臺對終端用戶存在的可編程性和易用性不夠的問題。為此,還需要進一步研究解決這些問題。
從可編程性和易用性角度來說,對于行業數據分析師,最熟悉使用的分析語言和環境通常是R、Python、MATLAB等系統。R是目前在數據分析應用領域最廣為使用的數據分析、統計計算及制圖的開源軟件系統,提供了大量的專業模塊和實用工具。為了盡可能縮小R語言環境與現有大數據平臺間的鴻溝,工業界和研究界已經嘗試在R中利用分布式并行計算引擎來處理大數據。最早的工作和系統RHadoop,是由RevolutionAnalytics發起的一個開源項目,其目標是將統計語言R與Hadoop結合起來,目前該項目包括3個R package(包),分別為支持用R語言編寫MapReduce應用的rmr、用于R語言訪問HDFS的rhdfs以及用于R語言訪問HBase的rhbase。其中,Hadoop主要用來存儲和處理底層的海量數據,用R語言替代Java語言完成MapReduce算法的設計實現。
類似地,UC Berkeley AMP實驗室在2014年1月也推出了一個稱為SparkR的項目。SparkR也是作為一個R的擴展包,為R用戶提供一個輕量級的、在R環境里使用SparkRDD API編寫程序的接口。它允許用戶在R的shell環境里交互式地向Spark集群提交運行作業。
然而,目前的RHadoop和SparkR都還存在一個同樣的問題:仍要求用戶熟悉MapReduce或SparkRDD的編程框架和程序結構,然后將自己的MapReduce或Spark程序實現到基于R的編程接口上,這和在Hadoop或Spark上寫應用程序沒有太大的區別,只是編程接口用R語言封裝了一下。此外,這些工作都是基于單一平臺,無法解決跨平臺統一大數據機器學習算法設計的問題。
5.3 基于特定平臺的大數據機器學習系統
為了克服前述做法的缺陷,近年來,學術界和業界開始嘗試總結機器學習算法設計的共同特性,結合大規模學習時所需要考慮的底層分布式數據存儲和并行化計算等系統問題,專門研究能同時兼顧并支持大數據機器學習和大數據分布并行處理的一體化大數據機器學習系統。
在國內外的機器學習和大數據技術方面的會議中,已經頻繁出現大數據機器學習系統相關的研究工作,如SparkMLlib、IBM的SystemML、Apache Flink、GraphLab、Parameter Server、Petuum等;此外,騰訊、百度等國內著名互聯網企業也推出了不同的面向大數據的分布式機器學習系統,如騰訊的Peacock和Mariana大規模機器學習系統、百度的ELF和百度機器學習云平臺BML。
(1)Spark MLlib
MLLib與Spark環境整合后可完整解決大數據的分布式存儲、并行化計算以及上層的機器學習算法設計和使用問題,因此,可將其視為一個基本的機器學習系統。目前其已經向上層提供多種優化方法、分類算法、回歸算法、推薦算法、聚類算法。但其算法數目和接口有限,難以完全滿足用戶各種各樣的需求,且作為一個算法庫,用戶難以對內部算法進行深層定制優化。因此,其在靈活性方面仍然存在不足。
(2)SystemML
SystemML[14,15]是由IBMWaston Research Center 和IBM Almaden Research Center聯合研發的一款大數據學習系統。對用戶提供了一個類似于R語言的高層聲明式語言,基于這種語言編寫的程序可以被自動編譯轉化為MapReduce作業在Hadoop集群上運行。這種高層語言提供了大量的監督和非監督的機器學習算法所需要的線性代數操作算子,包括高層算子HOP(high-leveloperator)和底層算子LOP(low-level operator)。SystemML最大的優勢是其具有較好的可編程性和易用性,用戶不需要具備任何分布式系統的概念或編程經驗,即可利用其寫出可擴展的機器學習算法;其最大的缺點在于底層計算平臺單一,只采用了MapReduce作為底層分布式執行平臺,而底層的MapReduce作業本身執行性能并不高,近年來涌現出的高效分布式計算框架如Spark、Flink等,在眾多性能指標上遠遠高于MapReduce。
(3)Apache Flink
Apache Flink[19]是由歐洲的多名研究者和多家資助單位(如EIT1ICT Labs、DFG2、IBM、Oracle、HP等)聯合研發的一款開源的并行化數據分析軟件棧,項目早期的名稱是Stratosphere。經過一段時間的發展,目前已經成為Apache開源項目。Flink同樣意識到,數據分析人員在分布式系統上編寫大數據分析算法時,需要有大量的精力耗費在分布式程序調試以及底層調優上。為了使數據分析人員能夠在無需顧及各種并行化優化問題的情況下就可以進行深度數據分析,Flink提供了一款數據分析棧式軟件。它向用戶提供了一種專用的腳本式語言MeteorScript,并且會自動將基于該語言開發的程序轉換到底層的分布式計算平臺Nephele上[20]。由于其專用性語言不夠普及,目前系統對語言接口又做了更多的擴充,支持Java、Scala等語言。Flink項目的優勢在于其從上到下提供了一整套完整的棧式解決方案,試圖為用戶提供易于使用的數據分析系統,同時通過一些編譯優化手段盡可能地提升程序執行的性能;其缺點在于其底層是專用的單一化計算平臺,與目前普遍使用的主流大數據平臺Hadoop和Spark尚未能集成使用,且上層的語言接口層也沒有包含現在數據分析師廣為使用的R、Python等語言接口。
(4)GraphLab
GraphLab[16]是CMU開發的一個以頂點為計算單元的大規模圖處理系統,是一個基于圖模型抽象的機器學習系統。設計初衷主要是解決具有以下特點的機器學習問題:有局部依賴的稀疏數據集、迭代可收斂、異步執行。為了實現這個目標,GraphLab把數據之間的依賴關系抽象成Graph結構,以頂點為計算單元,將算法的執行過程抽象成每個頂點上的GAS(gather、apply、scatter)過程,其并行的核心思想是多個頂點同時執行。GraphLab的優點是能夠高效地處理大規模圖算法問題或者可歸結為圖問題的機器學習和數據挖掘算法問題;其缺點在于提供的接口細節比較復雜,對于普通的數據分析程序員而言,有較大的使用難度。
(5)ParameterServer與Petuum
很多機器學習算法常常要解決學習訓練過程中模型參數的高效存儲與更新問題。為了有效應對和滿足大數據場景下這類機器學習算法的需要,研究者提出了一種稱為ParameterServer的框架[17],提供了一個分布式全局模型參數存儲和訪問接口,模型參數存儲在多臺服務器(server)中,工作節點(worker)可以通過網絡訪問API方便地讀取全局參數。
Li Mu等人開發了一套基于ParameterServer框架的分布式機器學習系統[17],該系統由一個服務器組(server group)和多個工作組(worker group)構成。其中,服務器組中包括一個服務器管理(servermanager)節點和多個服務器節點。每個服務器節點存儲部分全局共享參數;服務器管理節點用來存儲服務器節點的元信息,并通過心跳機制管理所有服務器。在該系統中,每個工作組包含一個任務調度器(taskscheduler)和多個工作節點,工作節點只與服務器節點通信獲取全局參數以及推送局部更新,不同的工作組可以同時運行不同的應用。ParameterServer的優點是為大規模機器學習提供了非常靈活的模型參數調優和控制機制;缺點是缺少對大規模機器學習時的數據及編程計算模型的高層抽象,使用較為繁瑣,通常比較適合于機器學習算法研究者或者需要通過調整參數深度優化機器學習算法的數據分析程序員使用。
國際著名的機器學習專家、美國卡耐基梅隆大學機器學習系EricXing教授是大數據機器學習系統的倡導者。他認為,傳統的機器學習研究過于簡化機器學習算法本身的問題以及大規模數據機器學習存在的系統問題[21]。由于大規模機器學習存在很多新的挑戰,近幾年來主要致力于大數據機器學習系統的研究,并領導其SAILING實驗室研究實現了大數據學習系統Petuum[18,21]。Petuum也是一個基于Parameter Server框架的系統,關鍵組件包括ParameterServer和調度器。Petuum的Parameter Server中使用SSP(stale synchronous parallel)一致性模型,允許計算速度慢的節點從本機緩存中讀取陳舊的參數值,以此大大節省網絡開銷和網絡等待時間,使得慢機器的大部分時間用在計算而不是等待上。Petuum在使用上需要算法設計者對分布式系統概念和系統有一定了解,其易用性仍有一定的限制,且其底層數據存儲和并行計算框架與上層的學習算法層以緊耦合的方式全部自己實現,系統實現復雜性和代價較大。
(6)騰訊Peacock與Mariana深度學習平臺
Peacock[3]是騰訊公司研發的一個大規模LDA主題模型訓練系統。該系統通過并行計算可對10億×1億級別的大規模矩陣進行分解,從而從海量文檔樣本數據中學習10萬~100萬量級的隱含語義。為了完成大規模處理,Peacock基于吉布斯采樣的LDA訓練算法進行了并行化設計,并設計實現了一個完整的具有大規模樣本數據處理能力的訓練系統。Peacock已廣泛應用在騰訊的文本語義理解、QQ群推薦、用戶商業興趣挖掘、相似用戶擴展、廣告點擊率轉化率預估等多個業務數據中,是一個專為LDA并行化計算而定制的大規模訓練系統,不是一個通用化的大數據機器學習系統。
為了提供更為廣泛的大規模并行化機器學習處理能力,騰訊研究構建了一個稱為Mariana的深度學習平臺[22],該平臺由3套大規模深度學習系統構成,包括基于多GPU的深度神經網絡并行計算系統MarianaDNN、基于多GPU的深度卷積神經網絡并行計算系統Mariana CNN以及基于CPU集群的深度神經網絡并行計算系統Mariana Cluster。Mariana可提供數據并行和模型并行計算,基于GPU和CPU集群提升模型規模,加速訓練性能。其中,MarianaDNN在騰訊內部用于微信語音識別聲學模型訓練,可訓練超過1萬小時的語音數據、超過40億的數據樣本以及超過5 000萬的參數,相對于單GPU而言,6GPU可實現4.6倍的加速比;而MarianaCNN用于微信圖像識別,可訓練2 000個以上的分類、300萬以上的數據樣本以及超過6 000萬的參數,相對于單GPU而言,4GPU可實現2.5倍的加速比,在圖文類效果廣告點擊率提升方面也取得初步應用;MarianaCluster實現了一個基于Parameter Server模型的大規模通用化機器學習和訓練系統,主要用于進行大規模廣告并行化訓練,完成廣告點擊率預估模型訓練和廣告點擊性能優化。
(7)百度ELF與百度機器學習云平臺BML
百度公司研發了一個大規模分布式機器學習框架和系統ELF(essential learningframework)[23]。ELF是一個基于Parameter Server模型的通用化大規模機器學習系統,可允許用戶方便快速地設計實現大數據機器學習算法,在系統設計上吸收了Hadoop、Spark和MPI等大數據平臺的優點,用類似于Spark的全內存DAG計算引擎,可基于數據流的編程模式,通過高度抽象的編程接口,讓用戶方便地完成各種機器學習算法的并行化設計和快速計算。
在ELF的基礎上,百度進一步開發了一個機器學習云平臺BML(Baidumachine learning),該平臺支持豐富的機器學習算法,可支持20多種大規模并行機器學習算法,提供包括數據預處理算法、分類算法、聚類算法、主題模型、推薦算法、深度學習、序列模型、在線學習在內的各種機器學習算法支持,并通過分布和并行化計算實現優異的計算性能。BML在百度內部的業務系統中經歷了線上大規模使用部署考驗,承載公司內各種重要的在線業務線應用,包括鳳巢廣告CTR預估、搜索LTR排名等。
了解詳情或下載文章請點擊閱讀原文(安卓用戶請選擇“在瀏覽器中打開”)
總結
以上是生活随笔為你收集整理的《大数据》第1期“专题”——大数据机器学习系统研究进展(上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: libevent事件驱动库的学习视频教程
- 下一篇: 作者:张志恒(1990-),男,兰州大学