2017年6月,騰訊正式開源面向機器學習的第三代高性能計算平臺 Angel,在GitHub上備受關注;2017年10月19日,騰訊T4專家Andymhuang(黃明)將爲QCon上海的聽衆奉上一場Spark on Angel的精彩分享。做爲Angel的主要開發者和團隊負責人,同時也是Spark的早期研究者和佈道者,他的工做經歷能夠說同步了通用大數據平臺到專用機器學習平臺的轉變歷程。所以,在這以前,InfoQ對黃明的進行了一次採訪問答,他將與你們分享人工智能時代的大數據平臺演進之路,並結合Angel的開發經驗,談談如何打造一個優秀的機器學習平臺,以及開源後Angel的最新消息和將來規劃。git
人工智能到底會給企業帶來什麼?——是改變,機遇,仍是更大的挑戰?github
在以前的大數據時代,企業開始意識到數據的重要性並着手搭建本身的大數據平臺,大數據成爲業界關注的焦點,Hadoop、Spark等等各式各樣的大數據框架、組件、平臺層出不窮。隨着人工智能時代來臨,大數據平臺發生了新的變化,也提出了更高的要求。Spark等大數據平臺可能是爲通用數據處理而設計的,並不是專用於機器學習任務,企業該如何更好地利用機器學習、深度學習等人工智能技術從實時數據中高效挖掘有價值的信息?算法
在過去的兩年(2015-2017),隨着機器學習、特別是深度學習在多個領域取得革命性成功,各類專用的機器學習平臺應運而生,百花齊放。Angel也是其中的一員。爲此,咱們對其進行了採訪。編程
InfoQ:您不只是Angel的主要開發者和團隊負責人,仍是Spark的早期研究者和佈道者,而且一直從事分佈式計算和機器學習領域的開發工做。可否結合您的工做經歷,爲咱們介紹一下通用大數據平臺到專用機器學習平臺的演進歷程?是什麼推進了這一轉變?您認爲未來大數據中心的大多數任務會變成機器學習任務嗎?性能優化
黃明: 其實推進這一轉變的,本質上是人們對更高層面的追求所驅動的。從瞭解過去,到預知將來;從有限空間的窮舉,到無限空間的探索;從有監督的訓練,到無監督的自我學習……不管是企業高管,仍是產品用戶,你們都但願能獲得更加智能的服務,而也只有提供了這種服務級別的的產品和公司,才能在殘酷的互聯網競爭中勝出。服務器
2010年,業界的大數據剛剛興起,當時有不少受歡迎的項目都是統計類的,能夠告訴你們昨天最流行的是什麼。底層的框架是Hadoop和Hive,不少平臺的最大的功能就是出各類各樣的報表,天報表、月報表……這時的層次是知道發生了什麼。網絡
2012年,當時有兩個大發展方向,一種是更快的SQL,一種是機器學習,涌現了不少的開源項目。Spark可以勝出,是由於它在二者中間取得了均衡,並展示了機器學習的潛質。Matei Zaharia等人在NSDI的RDD Paper提到了,Spark的目標是爲了解決iterative algorithms和interactive data mining tools這兩類問題,這個判斷從如今來看,依然是正確的。Spark後來普及開來,目前不少公司依然會把Spark當成他們首選的通用數據處理平臺兼機器學習平臺。這是人們但願知道,即將發生什麼。架構
到了2014年,李沐等人在osdi關於Parameter Server的Paper中,給出了分佈式機器學習一個更好的思路,後面Petuum和DMLC的ps-lite就出來了。Spark當時的跟進不是很到位,並且自己RDD的理念和PS也有些衝突。咱們當時還給Spark提過一個PR,後來也沒被接受,可是引出了Glint。到如今爲止,官方的Spark依然以RDD爲核心來實現機器學習算法,這是個很大的約束和障礙。框架
可是在2015年,PS的發展也受到了深度學習的衝擊,隨着TensorFlow的出現,你們紛紛轉向了深度學習的框架開發。包括微軟的DMTK轉向CNTK,DMLC的PS-Lite轉向MXNet……可是實際上,不少公司的數據中心依然有大量CPU機器,大量的非深度學習算法仍是須要在大規模數據集上進行分佈式訓練,這個領域是有空缺的,深度學習替代不了。機器學習
騰訊是2015年開始調研和開發Angel,其目的就是爲了填補上面所說的空缺,2016年,Angel開始在內部使用,到了2017年,Angel終於開源,整個開源的過程仍是很不容易的(詳情可查閱InfoQ早前的報道)。但願Angel仍是能把這塊的空白填補上,成爲一個專用的分佈式機器學習平臺,服務更多的公司內外產品,推進人們對更高層次的追求。
最後,將來數據中心,相信依然會有不少數據處理任務的任務。由於不管什麼樣的模型和算法,其前提都要創建在乾淨的數據之上。脫離了完整的數據預處理流程,談機器學習和人工智能都是不現實的。可是大部分數據任務,它們的最終出口和末端,也將會是機器學習和人工智能的任務,由於若是沒有了這個終點,前面的數據處理,也將是毫無心義的,能把控住末端的人,纔是最終的勝利者。
InfoQ:大數據平臺早期多以離線批處理爲主,實時計算做爲補充,可是如今愈來愈多應用場景對數據處理有了高時效性的要求。騰訊大數據平臺也歷經了離線計算、實時計算、機器學習三個階段的發展。將來批處理計算和實時流式計算在企業構建AI平臺的基礎架構中將分別起到什麼做用?
**黃明:**對一個高科技企業來講,實時計算能力和機器學習能力,都是AI能力的基礎,確實是必備的。並且機器學習的訓練(Training)和推理(Inference)兩個階段的重要性會並駕齊驅,實時計算能力的優點還將進一步輻射到推理場景。可是這並不表明離線批量計算不重要了,尤爲是訓練階段,離線批量計算依然是主要場景,緣由是:
好的模型須要大量的數據,反覆迭代並達到必定的精確度才能上線,尤爲是效果好的深度學習模型,一般須要多張GPU卡,訓練較長的時間,才能完成,因此這裏高性能的分佈式機器學習平臺,必不可少。
有不少的算法和場景不支持實時更新,自己就存在約束,或者數學證實不成立,或者不支持流式疊加,因此模型仍是須要離線訓練好以後,再推送到手機端或者其它終端設端。
在線學習(Online Learning)這個領域,模型的持續優化和更新的很是重要,可是老是須要一個基礎模型,而這個基礎模型的質量,很重要的制約了後續的改進效果。
綜合以上3點,離線批量處理,依然會是很是重要和核心的場景,不可替代。可是實時流式計算會快速發展,尤爲是在推理階段。主要是由於在深度學習時代:
模型比之前複雜,從淺層模型變成了深度模型,其推理計算不是簡單的代數計算。
傳輸數據比以前大,輸入極可能是圖片、聲音、文本等,對吞吐量要求很高,而對推理過程依然要求在毫秒級別完成。這對推理的性能有更高的要求。
因此相信在將來1-2年,這方面,從硬件到軟件都將會涌現出不少優秀的初創公司。
InfoQ:計算是機器學習平臺的基礎,但不是所有,在你看來,一個優秀的機器學習平臺須要具有哪些特性?
黃明: 在機器學習界,有些人喜歡把調參和訓練的過程,比喻爲煉丹, 上升到」道」的層面。而道器相融,在我看來,那煉丹就須要一個好的丹爐了,也就是一個優秀的機器學習平臺。它須要能爲煉丹提供合適的火候,也就是爲創新的模型和算法提供最佳的運行環境。所以,一個機器學習平臺要取得成功,最好具有以下五個特色:
精闢的核心抽象
一個機器學習平臺,必須有其靈魂,也就是它的核心抽象。當這個核心抽象和它要面對的模型和算法匹配時,這個平臺就成功了一半。若是一開始就錯誤了,例如SQL做爲平臺的核心抽象,那麼對後期的發展制約將會很是明顯,無異於緣木求魚,不管怎麼努力都不會成功的。
Spark的RDD
核心抽象,很好的解決了分佈式大數據的通用問題;而TensorFlow中Tensor
、Mutable Variables
和Dataflow Graphs
的3個核心抽象,高度歸納了深度學習中的各個元素。Angel目前的核心抽象是PSModel
,重點解決了分佈式機器學習中模型切分,數據並行和模型並行,模式異步 這3大問題,基本上能夠知足大部分非深度學習的機器學習需求。
充分的性能優化
在覈心抽象正確的大前提下,性能是決定速度的關鍵。這就涉及了到平臺層對硬件層的理解、調優和封裝。去年咱們用500臺高性能機器,得到了TeraSort比賽的冠軍,也是這種性能優化能力的體現,並將其嫁接到了Angel之上。
如今已經不是MR的時代走海量低配機器路線。不管是CPU機器,仍是GPU機器,都在往更強更快的方向走。去年比賽咱們用的是很高性能的單機,包括IBM的PowerPC,512G的內存,多個NVME的SSD,RDMA的100G網絡……都是業界的頂配。
可是光有硬件堆砌是不夠的,平臺要對硬件有充分的利用。對於非深度學習,Java系的莫過於JVM的調優了。怎樣更好地使用內存,避免FullGC的產生,儘可能讓計算不落地,預讀數據流水化處理……這些都是對平臺設計的考驗。而對於深度學習,CUDA和OpenCL的性能利用,顯存和內存的數據拷貝,浮點運算和定點運算的選擇,一機多卡的內部通信……平臺都須要進行不少調整,甚至於引入像XLA這樣的黑科技。
既然是分佈式機器學習平臺,確定會涉及到分佈式的拓撲結構。目前來看,比較成熟的分佈式拓撲結構依然是MR、MPI、PS這3者。機器學習中,基本上MR已經出局了,MPI憑藉深度學習捲土重來,和PS平起平坐,固然也有總體用PS、局部用MPI的作法,這也何嘗不可。在肯定網絡拓撲以後,就要考慮網絡加速了。RDMA和NVLINK這2個關鍵技術很值得關注,也是將來的方向。畢竟數據是直接顯存落顯存,仍是走兩次內存,差異是可想而知的,再加上不須要CPU開銷,對性能帶來的影響仍是很可觀的。
全部這些優化,最後暴露給平臺用戶的,最好是越簡單越好,平臺可以依據簡單的參數,自動選擇最佳的性能通道,這纔是對算法工程師和數據科學家意義最大的。
強大的容錯能力
談到容錯,不得再也不提一下MPI和MR。在Hadoop時代,海量低配機器理論的盛行,使MPI被MR打壓得很厲害。可是到了深度學習時代,你們發現這些高配機器和HPC也差不了太多,十幾萬一臺的機器,可靠性仍是很強的,出錯的機率很低,相比之下性能更加劇要了,因此MPI這種模式又活了過來。
都是從總體來看,規模上去以後,在大型的數據中心,高配版本的GPU機器和T級別的訓練數據,對容錯性依然須要取得必定的均衡,這種狀況下PS模式還是最合適的。總體架構包括網絡的通信性能是最靈活和魯棒的,能夠作的容災措施不少,代價也小。最終可以達到的效果會遠勝於簡單的按期Checkpoint。
靈活的接口設計
正如你們所知,2017年Python已經藉助人工智能成爲了第一編程語言。這在某種程度上,固然歸功於TensorFlow和PyTorch的神助攻,可是這個趨勢背後有其必然緣由。Python語言的優點在於語法簡單、上手難度低,並且資源豐富,有充實的數據、可視化和機器學習算法庫,創建了很是良好的生態環境,同時它又能與C無縫結合,藉助py4j還能和Java結合。基於以上緣由,Python可以爲後臺強勁的平臺提供友好的接口層,達到簡約而不簡單的效果,也就難怪它會奇軍突起、一枝獨秀了。
但Python其實始終只是後臺接口的體現,決定總體的,仍是後臺的接口設計,這時架構師的總體設計能力就很是重要了。核心理念的封裝和延伸、多個機器學習概念的整合、系統的分層和解耦、多個子系統的一致性,這些最終都會體現到接口上,從而決定用戶基於接口編寫算法的難度。
完善的周邊系統
TensorFlow開源之初,吸引眼球的工具之一,莫過於它的TensorBoard,驚豔的超越了同期產品。當時還懷疑它是否會部分開源,不開源這個模塊。一個好的機器學習平臺仍是要在周邊系統的完善上多作些功夫,若是用戶基於你的平臺,能夠快速地調試和定位Bug,將會大大加強他們使用的信心,這會對用戶造成很強的吸引力,最終也有助於造成更好的生態 。
黃明: 先講個你們都知道的小插曲:TensorFlow的前身是DistBelief,當時並不太受深度學習界待見,大部分人作深度學習,要麼Caffe,要麼Torch,基本忽略DistBelief,後來TensorFlow推出,就很受歡迎。這裏有個時間細節,Hinton是2013年加入Google的,而DistBelief是2011年開始研發的,TensorFlow是2015年發佈的,Jeff Dean由始至終,都在Google負責這個項目。做爲外人,不太可能知道Hinton到底對TensorFlow作出了什麼樣的貢獻,可是效果是很明顯的。DistBelief以前工程性太強,對深度學習的模型本質和算法友好度不足,Hinton加入後,第二代的TensorFlow的水準遠遠超越第一代的DistBelief。整個系統的設計,從上層到底層,從名字到周邊,都透露着對深度學習工程師的貼心理解。這也是TensorFlow成功的緣由。
因此要設計和搭建一個優秀的機器學習平臺,在我看來要具有以下3個條件:
首先,**要搭建一支工程和算法模型能力都很強的團隊。**總體上的這個團隊,須要很好的互補能力,要有算法工程師,也要有系統架構師,你們互相配合。算法工程師的數學功底和表達能力很重要,而系統架構師的理解能力和快速實現能力很重要。另外最好能將學術界的創新能力和工程界的落地能力結合,才能使系統創新性和可靠性兼得。騰訊的Angel項目從一開始,就是北大的博士生和騰訊的工程師聯合主導的項目,雖然遠比不上Hinton和Jeff Dean這樣的大神級別,可是模式是相似的,這是很是關鍵的一個要素。
其次,須要有大數據做爲驅動。以前咱們研究過Petuum,發現有些理念很不錯,可是穩定性很是差,在大數據量下很難跑通,並且搭建也很難。因此在Angel的研發過程當中,咱們始終堅持以大數據爲驅動的原則,各類Tricks和設計必須以最終壓測經過爲原則,並緊密依靠內部業務,經過場景落地來檢驗效果,以此保障系統的設計合理性和可用性。這點對於大公司來講其實沒有太大的難度,只要有正確的理念和合做便可。可是這對於小公司來講則比較困難。因此這也是BAT等大企業開源的框架,和實驗室或者初創公司出品的框架相比的優點之一。
最後,須要保持很快的演進速度。TensorFlow如今常常被批評接口改動太快。其實最近Angel的接口改動也不少,並且有些不能向後兼容。這其中緣由很簡單,一個是由於業界的深度學習發展太快,新算法和模型、技巧層出不窮,做爲一個平臺必須能快速適應,不進則退。另外一個緣由是開發的人太多,即使是Angel目前Star還比較少,可是內部大量的並行開發,很難保證全部的模塊都是合理的,按期重構是消除這些不合理的惟一方法。總體來看,只要是合理的重構,能提高性能,就標識着這個項目還在快速的生長期中,不失爲一件好事。
InfoQ:創新工場的王詠剛老師在《爲何AI工程師要懂一點架構》中提到,研究不能只懂算法,算法實現不等於問題解決,問題解決不等於現場問題解決,架構知識是工程師進行高效團隊協做的共同語言。能不能談談您對架構能力的見解?
黃明: 王詠剛老師說的要懂「一點」。這個詞在我看來表明了兩個意思:
確實須要懂,不能什麼都不懂。企業裏的算法工程師和數據科學家必定要有動手能力,不能成天只會作研究、寫Paper,Matlab和單機版的Python試驗一下,本身獨佔一臺GPU機器玩得很開心,模型作完了不會上線,溝通一到工程部分就聊不下去……實際上是處於一種很很差的狀態。這樣的AI工程師,除非某方面特別強或特別突出,不然在企業是很難落地生存的。
不能期望懂太多。畢竟作算法和作工程的思惟重點不同,腦回路也不太同樣,方法論也不同。兩方面都精通的人才,有,可是難找。這也是騰訊作Angel的初衷和目的,就是讓算法工程師不須要懂太多底層框架優化,也能輕鬆地寫出高效的、能分佈式運行的生產代碼,把一些通用的體系化的系統和架構細節屏蔽掉,這樣才能極大地提升企業生產力。
目前來看,包括Spark、TensorFlow這些比較好的框架,也正是由於它們可以使數據工程師和AI工程師,在適當屏蔽掉底層的架構細節後,依然可以寫出高效的算法代碼,才取得了成功。
InfoQ:經過您以前的投稿,你們對Angel平臺開源前所作的一系列重構和升級已經有所瞭解,開源以來想必又有了很多新變化,可否介紹一下近三個月大家對Angel平臺又作了哪些優化?
**黃明:**開源以來,Angel低調的發佈了2個小版本:1.1.0和1.2.0,主要是加入了新的算法和優化方法,增強了穩定性,細化和完善以前的功能。這3個月內的優化,以穩定和性能提高爲主。由於Angel的定位是工業級可用的平臺,因此很是看重大數據量下的穩定性和性能,咱們公佈的算法都是生產驗證過。同時咱們對Spark on Angel的接口進行了反覆的重構,儘量和Angel自己的接口接近一致和複用,這方面的工做到時候會在此次QCon的大會重點介紹。
另外根據用戶的反饋,Angel開發團隊正在開發2個大功能,還沒有發佈,包括:
Python接口:接口優化和重構,以提高易用性。由於以前宣傳的時候,不少用戶的第一個問題,就是有沒有Python接口……因此咱們不得不把這個做爲第一優先級來知足。
Spark Streaming on Angel:支持在線學習,加入FTRL算法。就像以前說的,實時性也是機器學習必不可少的。那Angel自己不作實時這塊,可是支持Spark on Angel,那經過Spark Streaming來接入實時訓練,也是水到渠成的事情,成本也很低,不過對Angel的HA和內存管理,須要進一步的優化。
這兩個新功能應該在下2個版本就可以和你們見面了。至於深度學習的支持,其實也在進行了,可是有些難度,會晚點就推出。
InfoQ:開源後這段時間,Angel平臺的推廣狀況如何?有沒有什麼印象特別深入的問題反饋?
黃明: Angel開源以來,其實咱們並無太刻意推廣,包括咱們在github上Public的第一天(6月16日)都沒有準備作任何PR,不過因爲以前的影響力,最終各大媒體都報道了。可是騰訊TOSA(開源委員會)最近一年對開源項目的扶持很是大,態度也很Open,因此咱們主要是藉着騰訊開源的力量在作這個事情,發了幾篇文章。目前總體的Star數接近2.5k,咱們比較欣慰的是Fork和Star數的比例比較高的,看得出不少人仍是對項目頗有興趣的。總體上,咱們仍是按照本身以前定好的節奏,小步快跑地進行新功能和版本的研發。
據瞭解和接觸,目前有部分公司(如小米、新浪微博等)正在試用Angel,也有了很多貢獻者。印象深入的有幾個:
華爲的一位工程師,項目剛發佈不久就提交了一個比較大的PR,幫忙把Netty版本升級了,很是給力。後來他想把GraphX集成進來,可是我以爲這個方向不太對,就Reject掉了,不太好意思。
微軟LightBGM的開發者之一提了個Issue,和Angel開發GBDT的同窗互動了10個來回左右,詳細地討論了機器學習任務中MPI和PS的網絡通信開銷到底誰更小的問題,進行了頗有意思的學術互動。
海外的一個用戶主動幫忙翻譯Angel的文檔,以前爲了開源,團隊花了快1個月的時間邊寫文檔邊改Bug,全部文檔加起來應該有100篇左右,翻譯工做量巨大。但如今基本所有都翻譯完了。
這些都讓咱們體會到了開源的力量和益處,一個平臺在開源以後,會受到來自全球的關注,只要你用心經營,並保持良好的功能和性能,能幫助到用戶,用戶就會主動幫你作不少事情。而你的視野,也會變得更加的開闊。不少外部用戶的需求很是客觀到位,正是他們推進着咱們往前走。
InfoQ:開源三個月後再看Angel,與一衆機器學習平臺相比(好比Spark、Petuum、GraphLab、TensorFlow),Angel的優點是什麼?Angel的什麼特性最能吸引機器學習開發者?
**黃明:**首先目前其實Petuum、GraphLab都不開源,沒有可比性。Angel在研發初期借鑑參考過Petuum的一些思路,可是後來實驗中發現,Petuum在可靠性和穩定性上都達不到工業可用級別,因此基本上也都推倒重作了。
和Spark比的話,目前Spark的重心仍是在SparkSQL上,這從每一個版本的PR數就能夠看出來,MLLib的比例很小。這在某種程度上也是由於Spark的RDD本質侷限致使的。相比之下,Angel重點是機器學習算法,而基於PSModel的編程模型可讓各類機器學習的優化和Tricks都很方便地實現,對於算法工程師很是友好。伴隨着Python接口的提供,這個優點將會變得更加明顯。
TensorFlow目前在深度學習上的地位仍是遙遙領先,從7w個Star數就可略見一斑。可是在多機多卡的性能上TensorFlow的PS作得並很差,最近發佈的最新版本還在嘗試走MPI路線,這是業界難題之一。Angel目前不會獨立作一套新的深度學習框架去和TensorFlow競爭,而是會發揮自身優點,把PS-Service作好作極致,來加速並行訓練並造成互補。
關於傳統機器學習算法的生命週期問題,我以爲不用太擔憂。很重要的一點是傳統機器學習算法比深度學習更貼近problem solving而非模擬智能。深度網絡模擬大腦結構,因此在人類擅長的智能領域優於傳統算法,好比視覺聽覺,各類對外界信號的理解……可是還有一些非智能領域,人大腦展示出各類認知缺陷(cognitive deficit),好比對模式是隨機仍是真實的判斷,對機率的認知,對風險評估等等。這些方面傳統機器學習方法仍然更有效,不須要經過大量的野蠻暴力嘗試,就能獲得更好的結論。也許之後會改變。但目前傳統思路的機器學習仍是有必要的,在不少場合,簡單有用,包括騰訊的不少場景,仍是有剛需,因此Angel仍是要把它經營好。
總體上來看,目前Angel是業界,包括國內和國外,比較成熟的開源參數服務器框架,可以在十億級別的維度(其實百億也能夠,只不過沒生產徹底驗證過,因此不這樣宣傳)、T級別大小的樣本量規模下,開發和運行通用的機器學習算法的平臺。另外值得一提的是,Angel的算法開發難度也比較低,有一位開源貢獻者很輕鬆地在Angel上實現了阿里巴巴用於CTR預估的MLR算法,並貢獻給Angel社區,這正是Angel團隊所期待的。
InfoQ:您認爲目前機器學習平臺還存在哪些問題和難點?將來改進的重點是什麼?
**黃明:**目前機器學習平臺還存在3個大問題:算力的水平擴展、模型的高效壓縮、快速的推理能力
機器學習平臺最大的難題仍是算力。性能再強,接口再好用,底層優化再極致,單機能力終有極限,須要能水平擴展,而深度學習大規模通用的多機多卡的分佈式方案,目前依然是個難題,即使TensorFlow也沒解決得很好。這也是騰訊致力於Angel系統的緣由,但願不管是CPU仍是GPU,咱們都能提供高性能分佈式機器學習方案。
除此以外,利用龐大的集羣規模,長時間訓練出來的精細模型,其大小通常比較大,像Angel訓練出來的模型通常都會上百G,而深度學習的模型,多數也到G級別。這麼大的模型,須要壓縮以後才能給終端使用,如何在儘可能減小精度損失的狀況下,最大化的壓縮模型,也是平臺須要考慮的。
最後一個是快速的推理能力。不管是終端推理(手機端,無人駕駛車……),仍是服務端推理(廣告,推薦……),要求都是同樣的,要儘量速度快和高吞吐量。這時如何合理地利用和設計流式實時系統,來快速接入數據進行推理,也是平臺須要考量的點。
在將來一年裏,相信大部分的機器學習框架,包括深度學習框架,都會圍繞着上述幾個問題重點發力。這也是Angel須要面對的挑戰和機遇。
Andymhuang(黃明),騰訊T4專家,Spark早期的研究者和佈道者,對分佈式計算和機器學習,有獨到的經驗和研究。目前於數據平臺部擔任海量計算組Leader,負責構建大規模分佈式計算和機器學習平臺,助力騰訊各大數據和機器學習業務快速發展。