演講實錄:百度大規模深度學習應用實踐和開源AI框架PaddlePaddle

儲存頻道發表於2018-12-14

   導語:本文根據PaddlePaddle技術負責人、百度NLP技術委員會主席於佃海在今年英特爾人工智慧大會上的演講——《百度大規模深度學習應用實踐和開源AI框架PaddlePaddle》整理而成。

PaddlePaddle技術負責人、百度NLP技術委員會主席於佃海

   正文:

  很高興能有機會來介紹百度AI相關的工作,我們知道,此次AI浪潮主要由深度學習來推動的,深度學習的崛起也可以認為是神經網路技術的再次重新崛起。這一次不同的是,工業界在其中發揮了相當重要的作用。此外深度學習的成功和大資料,以及計算力密切相關。對於工業界而言,在資料資源和硬體資源方面都佔有優勢。

  今天首先介紹一下百度在大規模深度學習應用方面的實踐,之後會介紹一下我們的深度學習開源框架PaddlePaddle。

  時至今日,深度學習已經不是一個新的話題。不過我們可以看到深度學習依然保持一個火爆的局面。對於老牌的機器學習神經網路的會議NIPS,這兩年的門票銷售相當火爆,今年在12分鐘之內就銷售完畢。深度學習也催生了一些新興的會議,像ICLR,它的投稿數量也是指數級增長,今年又創最新高度。對於產業界,當然應用也非常火爆,我們也可以看到國內也是在制定相關的技術標準、人才的認證等等。

   百度的AI之路

  對於百度而言,其實一直走在深度學習研究和應用的前沿。百度擁抱機器學習並不算太晚,但從世界範圍內對比來看也不算是特別早,對於深度學習而言,我們可以說百度在一開始就把握住了機遇,緊緊走在前沿。早在2012年百度就成功將深度學習DNN模型應用到語音識別、OCR任務中,隨後的2013年在百度的核心業務鳳巢和搜尋排序中我們就上線了深度學習模型,這在業內都是第一次。在此之後,百度基本上可以說全面進入深度學習的階段。在深度學習的框架開發、平臺建設以及應用創新方面都走在行業前列,在企業內的應用具有很高實用性、很大規模化的特色。下面我會介紹一下百度幾個典型場景的深度學習應用,會講一下它的規模特點,也會提到我們最新的工作。

  首先我們從深度學習最相關的語音、視覺和自然語言處理這些基礎AI領域談起。

   ·語音

  在語音方面,百度是最早在深度學習的領域取得突破的公司之一,從2012年開始我們持續在語音基礎上有深度研究和突破,2016年,百度語音在深度學習上的工作被MIT科技評論評為當年十大技術突破之一。在今年初我們也釋出了最新的語音識別系統Deep Peark2,在技術和效果上又實現了新的飛躍,大家可以用百度手機輸入法來體驗我們的語音輸入效果。值得一提的是現在的語音識別深度學習訓練的規模已經非常巨大,我們一般的訓練都會使用十萬小時級別以上的資料。TTS這一塊,在合成領域我們也做了很多的工作,去年我們知道聽說過百度語音合成的Deep Voice 今年我們又新發布了CLariNet。

   ·視覺

  對於視覺而言,大家可能對之前百度參加最強大腦人臉識別有一些印象,在當時的系統中,我們利用了200萬的人臉資料來進行預訓練,最近我們也是更多的將研究投入到三維人臉活體識別技術方向,其實百度也一直在構建一個超大規模的影像分類系統,到現在我們已經實現擁有10萬類Tag、近億圖片的大規模識別系統,支援百度的廣泛應用。除了剛才說的規模化的特點之外,我們在視覺的各個領域技術創新上做了很多工作,僅在2018年我們在參加的三項國際評測比賽任務中,都嶄獲桂冠,大家可以看到這些任務它的難度和規模都是非常大的。

   ·自然語言處理

  對於自然語言處理任務,其中最典型的可能要數機器翻譯。很多人並不知道,全球第一個深度學習神經網路機器翻譯系統的線上系統是百度首先在2015年釋出的。這幾年百度在翻譯領域一直持續深耕,我們現在的訓練系統所基於的語料也是相當大的規模,我們也針對不同的產品場景進行定製的最佳化,打造最好的翻譯效果。我們最近有一個工作可以給大家介紹一下,類似於同聲傳譯的同步翻譯,它的意思是當原語言的輸入還沒有結束的時候,目標語言的翻譯同步進行,這裡面也有技術上的困難,因為不同語言之間的語序是有所差別的。

  除了翻譯之外,自然語言處理方向上我們也是在各個方向都有很多的技術創新,比如在開放領域對話和機器閱讀理解方面。我們實際的自然語言處理系統的後臺所依賴的資料比這些評測集合規模更大,可以看到我們開放領域的對話系統,我們實際用於訓練的資料達到千萬級別以上,上億的語料庫。基於機器閱讀理解我們釋出中文大規模閱讀理解資料集合,規模達到150萬的文件集合和30萬的問題集合。

   百度的深度學習應用場景

  前面主要回顧一下在AI幾個基礎方向的深度學習應用,下面我會特別講一下百度在幾個重要產品線上深度學習的應用狀況,和前面所說的幾個基礎方向上的深度學習應用還是有很大差別的。

   ·語義匹配計算

  對於搜尋這個產品,我們現在最重要的深度學習應用場景是語義匹配計算。語義匹配計算是用深度學習來建模Query和網頁的相關性,從2013年我們在業內首次上線深度學習模型之後,我們持續的最佳化創新到現在深度學習語義匹配的特徵已經佔到百度搜尋相關性特徵權重的一半以上,這非常好的打破了以前依賴關鍵詞匹配的一些弊端。當然這個任務的訓練規模也是非常巨大的,我們實際的訓練語料是達到千億級的規模,對於引數的規模也有上億級別。我們對這個任務下的單個模型都是用了數十臺CPU機器離線並行的訓練,得到這樣一個產出。

   ·廣告CTR預估

  對於廣告而言,最核心的應用場景是CTR預估,預測廣告的點選率。它和搜尋應用的差異在於,我們引入了更多的離散特徵,包括一些組合特徵,一些ID特徵,使得它的記憶能力更強。在這樣的設計之下,我們可以看到,它整個的引數規模達到了千億級別,模型的大小達到TB的規模,使得普通的單機都無法載入,這對並行訓練帶來很大的挑戰,我們在這類任務上都使用百億級別以上的機器進行訓練,我們的訓練系統已經打造成了線上訓練系統,實時資料進行輸入,模型再實時更新。

   ·資訊流

  對於資訊流,這是百度一個相對較新的產品。在策略架構構建開始,我們就全流程的使用到深度學習技術,包含從語義召回和排序序列生成、評估等各個階段,資訊流的場景和搜尋、廣告有相通之處。相對於廣告而言,我們在建模的時候更多的考慮了歷史的這種序列點選資訊,整體上也使得它的模型更加複雜,它的引數量也比我們廣告上的模型更加龐大,對於它的訓練難度也是進一步有了更大的挑戰。我們現在也是採用這樣一個線上上百臺機器進行並行訓練的方式進行深度學習的訓練和預測。

  從前面的介紹,我們也可以看到不同場景下深度學習的特點和規模化都存在著一定的差異。比如像影像這類的任務,很多模型的特色是非常的深,對於文字任務而言,它的特點在於基本上是透過一個Word Embedding的機制來支援深度學習建模,每個詞語有幾十到上千維的向量表示,這就給文字的任務帶來了很大的差異性,因為光Word Embedding這個引數量就會達到非常大的規模。到實際應用任務場景下,像剛才我們講到的Feed資訊流和廣告搜尋的場景,我們可以設計使得這個模型的引數量更加巨大,在我們的實際應用當中,剛才講到我們可以達到千億級別這樣的特徵,再加上這樣一個Embedding的表示,整個的模型是非常巨大的,給並行帶來了更大的挑戰。

  我們考慮大規模深度學習的問題不只是說資料量大,網路比較複雜,其實我們要同時考慮特徵量以及計算特異性的問題。可以看到雖然有這樣的一些差異,這些給深度學習框架的設計帶來了挑戰,但是整體上而言,神經網路的計算模式相對還是統一的,所以我們可以透過精巧的設計來打造更好的深度學習框架,支援廣泛的深度學習應用任務。

   百度深度學習框架PaddlePaddle

  下面我介紹一下百度打造的深度學習框架PaddlePaddle,首先回顧一下,PaddlePaddle的原形要追溯到2013年,當時的它的名字叫做Paddle,這個名字表示是一個並行分散式深度學習。2013年的時候,工業界的深度學習框架還並不多見,我們當時也是剛剛在幾個大產品線上成功應用了深度學習技術,在這樣一個時刻,我們決定去打造一個通用的深度學習框架,就看到了這個框架對未來深度學習發展和應用的巨大意義。另一方面,在我們建設Paddle之初就提出了並行分散式這樣的概念,也注意到在工業界大規模訓練的重要性。

  在2016年我們進行了開源,當時這個品牌名字升級為PaddlePaddle,希望大家一起來共建這樣深度學習框架。到了今年我們Paddle整體在公司的戰略地位更加明確,我們進行更多的投入,在前些天百度事業大會上我們釋出了PaddlePaddle的套件。

  下面我會更詳細的來介紹Paddle框架。對於PaddlePaddle而言,從開源之初我們就希望它能夠具有易學易用、安全高效這樣的特色。我們分別制定了相應的策略來使得這樣的目標可以達成,希望能夠提供更靈活、更快捷的Modeling,能夠更高效並行的訓練,以及廣泛快速的部署能力。

  關於Paddle框架,我們可以回顧一下,最早的深度學習框架是基於Layer的概念,後來出現了Graph of Operators的組合,對於Paddle而言,保留了底層基於Tensor的表示和基於Operator的計算單元,但是我們在網路的定義上使用了Program的概念,希望能夠比Graph在定義階段可以更加簡潔,讓程式設計的同學可以使用深度學習。

  我們一開始就把Paddle定位為真正支援實際應用的深度學習框架,非常重視它的預測和部署能力,我們現在實現了多平臺預測部署的能力,包括Paddle Serving和Paddle Mobile,我們分別針對伺服器端和移動端做了不同的最佳化,然後在移動端我們現在支援廣泛的硬體平臺,我們未來也希望Paddle能夠部署到更多的場景當中。

  除了框架之外,從利於開發者的角度,我們建立了一個平臺層面的設施,也包含了像底層的模型庫,像自動的AutoDL的網路搜尋技術。進一步,我們又開發了和深度學習相關的元件,形成全功能的套件。對於PaddlePaddle整個套件的佈局大體是這樣的結構,分為核心框架、服務平臺和模組元件三個部分。

   ·特色模型庫 ,我們把它作為核心框架的一個特色功能。Paddle支援的官方模型在同類框架模型中支援數量最多,也是希望透過我們持續的維護,一些經典高頻模型能夠給開發者帶來更大的便利。

  另外,是我們最近做的一個深度強化學習的框架PARL,它的意思是PaddlePaddle強化學習框架,它主要是兩個功能:一是大規模的深度學習+強化學習的訓練框架,二是提供了計算任務模型和演算法的豐富元件。

  在NIPS 2018的強化學習評測中,百度參賽隊伍使用基於PARL的系統獲得第一名,比第二名領先非常多的分數。這個任務還是非常困難的,是戴假肢人體運動的控制,計算量非常大,競爭也非常激烈,前五名的隊伍都是非常強的競爭對手。PARL在這個框架的支援下,我們透過演算法最佳化和近千臺CPU和GPU組合並行訓練的框架下,非常出色地完成了這個任務。

   ·配套元件 ,我們也進行了豐富的建設,包括VisualDL這種看得見的深度學習,以及EDL作為Linux Foundation的深度學習基因會的創始專案而實現容錯可伸縮的彈性的深度學習。

   ·服務平臺 ,我們針對不同的場景需求,也是打造了不同特色的一些服務平臺,像針對小白使用者更零成本的EasyDL和針對更全面的一站式開發的開發平臺。在平臺層面之上我們著力建設了AutoDL,希望能進一步降低大家在網路建模這方面的工作難度。我們希望AutoDL實現三個目標:一是可以自動的設計學習網路,二是進行資料遷移建模,三是能夠適配邊緣計算,可以自動進行模型的裁減壓縮來適配移動端的場景。可以看到在影像分類的Benchmark上,我們用AutoDL來自動設計的網路效果已經全面超越了專家手工設計的網路效果。

  前面我對PaddlePaddle整個套件的關鍵部分做了一個介紹,最後我還是想強調一下,對於PaddlePaddle,我們 立志打造一個支撐工業級應用的高效能AI框架

  最近很多人提到算力就是生產力,對於機器學習框架而言,它的效能最佳化是非常重要的,因為對於算力而言,不只是豐富的硬體資源,還需要軟硬結合來更好的發揮硬體資源的能力以實現更好的計算能力。對於PaddlePaddle,我們是採用了自上而下的推進策略,除了通用的技術框架的高效設計之外,我們會投入比較多的精力在底層的最佳化包括通用底層最佳化,以及和硬體相關的一些最佳化。

   與英特爾強強聯手,最佳化深度學習

  英特爾擁有豐富的強大的晶片能力,在晶片能力之上他們也在自下而上構建他們的AI棧,特別是在AI高效能運算庫指令集合這一塊非常有特色。在這個層次上,我們的合作空間非常的廣泛。過去一段時間,我們也是和英特爾多地團隊在多個方向上進行了深入的工作配合,截至目前,英特爾工程師對PaddlePaddle的程式碼貢獻已經超過了一萬行。

  下面我們可以看一下,回想一下我前面講過的內容,可以看到CPU在實際業務場景當中現在的作用還是非常重要的。一方面對很多的場景而言,CPU的價效比是非常好的,另外特別是對我們剛才講到的一些超大規模資料特徵的訓練,CPU叢集的優勢還是比較明顯,當然很重要的一方面是英特爾也是更加重視深度學習這個方向,英特爾的晶片也是在變得越來越強大,越來越適配深度學習。

  下面我會簡單展示一下英特爾在Paddle上工作的部分成果。在效能最佳化這一塊,我們進行了廣泛的配合工作,英特爾同事進行了深入的支援,我們在影像、文字好多工上從訓練到推理效能都有了很大的提升,相比我們之前線上自己手寫的系統,效能都有了很好的改進。比較重要的是MKLDNN底層庫,它的最佳化效果確實比較突出,除了在最新的像類似6148晶片上加速比確實非常高之外,在一些更傳統的晶片上也有提升的作用。

  我們和英特爾在低樹脂精度計算方面的工作,英特爾下一代指令集合VNNI提供強大的INT8乘加運算的效率,我們也和英特爾基於Paddle之上對一些模型進行嘗試的驗證工作,這也體現了英特爾對深度學習計算任務的重視,因為對於深度學習而言,它確實有很多的特色,除了我們經常感受到的它的向量矩陣運算之外,其實對於深度學習而言,它並不是追求一個精確的數值計算的結果,在某些情況下,低精度的運算在不損失效果的前提下,它的加速效果是非常的可觀。英特爾這方面的工作我們也是非常期待。

  還有一個重要的合作就是nGraph,nGraph可以認為是英特爾針對深度學習做的中間表示或者編譯器,無縫的銜接不同的硬體後端和上層的框架,Paddle和nGraph的對接非常簡潔,透過nGraph Bridge,可以把拍到的一些OP轉化成nGraph後臺更高效的計算。英特爾的工程師也是基於PaddlePaddle之上做了初步的實驗,我們可以看到在ResNet-50上的效果的提升比較明顯,英特爾最新的PR也被整合到PaddlePaddle上。

   構建大規模分散式深度學習叢集

  除了單機之外,對我們的業務而言,大規模分散式並行式是非常重要的。我們構建了一個大規模分散式深度學習叢集,從最底層的硬體到資源的管理排程都做了大量的工作,有數萬臺機器在這樣的環境下可以提供內部各個業務的訓練的支援。當然我們也會透過公有云結合PaddlePaddle對外來提供更多的服務。

  對於Paddle框架本身而言,我們在並行上做了很多特色工作,除了同步、異構並行之外,我們特別對稀疏引數的支援進行最佳化,我們支援千億級別稀疏特徵,在百餘節點上的並行訓練。今天主要是講這些,希望大家能夠多多試用、支援PaddlePaddle,可以給PaddlePaddle做一些貢獻,讓我們共建PaddlePaddle,打造更好的深度學習框架。謝謝大家!

  關於PaddlePaddle的更多資訊,可前往 瞭解。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31545805/viewspace-2285332/,如需轉載,請註明出處,否則將追究法律責任。

相關文章