專訪百度 PaddlePaddle 開源平台負責人王益:國產深度學習平台是如何幫助開發者快速開發 AI 產品的?

.. 雷鋒網 AI 研習社按:PaddlePaddle 的前身是百度在 2013 年自主研發的深度學習平台,在百度內部已經使用多年,支持百度內部各項業務。 2016 年 8 月底百度開源了 PaddlePaddle 之後,在短時間內迅速成為全球開發熱度(Github Pull Request 數量)增速最高的開源深度學習平台。PaddlePaddle 項目不僅提供深度學習框架,還提供各種簡化調試和支持大規模訓練的附加技術。PaddlePaddleVisualDL 開發不到半年的時間,在Github 上的「star」數就逼近了開發了兩年多的 Google TensorBoard。

PaddlePaddle 的社區增速和其技術迭代速度密不可分。剛開源的時候,PaddlePaddle 的設計思路和四年前開發的Caffe類似。在一年時間裡,連續推出了「v2」和「Fluid」兩代新技術:其中 v2 像 MxNet 和Caffe2 一樣參考 TensorFlow 增加了 operators 的概念;Fluid 類似 PyTorch,但是不依賴 Python 的控制流(if-else、for等),而是提供自己的解釋器甚至編譯器,所以不受限於 Python 的執行速度問題。

在 2017 年 11 月的百度世界大會上,PaddlePaddle 發佈了三項新功能:

  • PaddlePaddleFluid 提供高級語言中的 while 和 if 等控制流結構,提升使用者的開發效率,同時利用編譯優化技術保證計算性能。

  • PaddlePaddleCloud 支持使用者在瀏覽器里開發 AI 應用,在雲端調試運行,開發者不需要在個人電腦和機群之間切換,提升了工作效率。

  • PaddlePaddleEDL 是全球首個支持彈性作業調度的開源 AI 雲解決方案,通過與 Kubernetes 合作實現彈性作業調度。

三大新功能的推出,進一步加強了 PaddlePaddle 的易用性,提高了效率,並降低了開發者的使用門檻。

陸奇曾表示,開源代碼寫得好,不僅能解決大家的痛點,開源代碼也會變得越來越強,開源代碼的生命力必然會超過封閉體系的代碼。PaddlePaddle 開源至今,還會為開發者提供哪些服務?怎樣在大量流行開源框架的競爭之下脫穎而出?如何成為陸奇口中所說的「越來越強」的開源平台?帶着這些疑問,雷鋒網 AI 研習社採訪了百度 PaddlePaddle 的技術負責人王益,他將分享在開發 PaddlePaddle 過程中的經驗點滴。

嘉賓簡介:王益,在加入百度之前曾任硅谷 AI 創業公司 Scaled Inference 創始科學家,LinkedIn 高級主任數據科學家,騰訊社交廣告技術總監,Google研究員。王益曾在清華大學和香港城市大學學習,並取得了清華大學機器學習和人工智能博士學位。此外,他還是 IEEE 的高級會員,著有《推薦系統實踐》一書。

以下是雷鋒網 AI 研習社對王益的採訪內容:

PaddlePaddle 其實已經有很多年的歷史了,從 2013 年發展至今,PaddlePaddle 在設計的過程中經過了哪些重大變化?

王益:PaddlePaddle 的2013年版本是百度傑出科學家徐偉老師主持設計和開發的,其設計思路和同時代的 Caffe 「心有靈犀」:表示一個模型的方式都是「一串 layers」。這個設計沿用了三年。2016年8月底,PaddlePaddle 開源之後,我們在徐老師指導下做了兩代升級:2017 年 4 月推出 PaddlePaddle v2,2017 年底推出PaddlePaddleFluid。

PaddlePaddle v2 的推出把 PaddlePaddle 的技術升級到了 2015 年 Google 推出的TensorFlow 的水平 —— 把 layers 「打碎」成更細粒度的 operators,同時支持更複雜的網絡拓撲「圖」而不只是「串」。

PaddlePaddle Fluid 的設計思路和 PyTorch 以及 TensorFlowEager Execution 很像 —— 已經不再有「模型」的概念,也就不在意「圖」(graph ofoperators)或者「串」(sequence oflayers)了,而是只有「程序」的概念。當然,從程序是可以導出一個圖的,這也是 從一個 PyTorch 程序可以被導出成 ONNX 文件格式的模型一樣。

需要提醒的是,PyTorch 和 EagerExecution 程序中的控制流(比如 if-else, for)都是用的 Python,而 Python 執行速度慢且難以提速,這是一個瓶頸。Fluid 程序也是一個 Python 程序,但是執行這個程序會先把自己輸出成一個 protobuf message,隨後調用 Fluid 解釋器(而不是 Python 解釋器)來解釋執行這個 protobufmessage,這樣比 Python 解釋器的執行速度更快,和 TensorFlow 執行圖的速度一樣。甚至更進一步,我們在開發編譯執行的方式 —— 寫一個 transpiler 把 protobuf message 表示的程序翻譯成 C++ 程序,然後可以用 nvcc、icc、gcc 編譯成二進制代碼,直接運行在服務器和手機上。從而徹底解決 PyTorch 和 Eager Execution 程序的執行速度受限於 Python 的執行速度的問題。

在知乎上,Caffe 的作者賈揚清稱讚了百度的 PaddlePaddle,並說「整體的設計感覺和 Caffe 心有靈犀」。那麼,您認為,跟 Caffe 以及 TensorFlow、PyTorch、MXNet 等熱門框架相比,PaddlePaddle 的優勢在哪? 

王益:知乎上賈揚清的稱讚是在 PaddlePaddle 開源之初。如我上文所述,當時的 PaddlePaddle 和 Caffe 確實很像。今天在百度內外推動的都是 PaddlePaddleFluid 了,是一個比 PyTorch 和 Eager Execution 更激進的技術思路。

陸奇曾表示,要將 PaddlePaddle 發展成具有中國特色,最適合中國國情的深度學習平台。請問「適合中國國情」的深度學習平台怎樣理解?它和國外的深度學習平台有何區別? 

王益:從我的理解來看,一方面是基礎計算架構要適應中國的現狀;另一方面是計算技術上要世界領先,能人所不能。這兩方面都有很多可以做的工作,而且百度還是足以自信的。

雖然現在很多深度學習應用用一個幾台機器的小集群就可以解決,但是 Web scaled 應用,比如廣告和搜索引擎,或者新的應用,比如通過 Lidar、Radar、cameras 採集海量數據的無人車,都是需要大規模深度學習計算能力的。通過擴展 Kubernetes 這樣的先進的集群管理系統,PaddlePaddle EDL 比 Google KubeFlow 優勢很明顯 —— EDL 不僅可以把 PaddlePaddle 程序在 Kubernetes 上跑起來,而且可以彈性調度—— 不忙的時候一個訓練作業多用一些資源,忙的時候少用一些,但是資源變化不會導致作業失敗;而 KubeFlow 只是把 TensorFlow 程序在 Kubernetes 上跑起來,不能實現彈性調度。另外,EDL 不僅調度深度學習作業,也彈性調度其他作業,比如 Nginx、MySQL 等,從而極大地提升集群總體利用率—— 在國家深度學習重點實驗室機群上實測效果高達 91%,遠超一般的高性能計算集群的 30% 左右的利用率。這樣的技術在公有雲和私有雲上的推廣,很容易就能用 1/3 的機器做同樣的工作,為一家單位一年節省的計算成本可以高達百萬、甚至數百萬美元。

深度學習平台和編程語言一樣,不是一個獨立的程序,而是一個社區 —— 訓練要能在國內的雲服務上跑;要能部署到國內的企業的私有雲上;國內的科技創新企業在製造定製化的加速芯片,PaddlePaddle 應該是連接這些基礎創新和應用的橋樑;要開放中文數據和中文模型—— 比如圖像識別的 label 是中文的;語音識別和語音合成等應用也是和中文強相關的。

現在 Google 正加速 TensorFlow 在國內的推廣(開設 TensorFlow 微信公眾號、中文網站等),百度的 PaddlePaddle 會採用怎樣的策略應對?

王益:在宣傳和推廣方面,PaddlePaddle 團隊也在建設宣傳渠道。歡迎大家訪問我們的官方網站 paddlepaddle.org,也歡迎大家訂閱我們的微信公眾號(微信號:PaddleOpenSource)。前一年裡,PaddlePaddle 團隊的人數也在迅速增長,雖然和 TensorFlow 團隊的規模相比還是有一定的距離,我們在 Github 上的 pull request 和 issues 數量增長和 TensorFlow 是同量級的,這背後是團隊持續一年多努力工作的結果。

從 PaddlePaddle 的發展過程可看出,百度正努力降低 PaddlePaddle 的開發門檻,同時提升其開發效率,從而讓開發者能夠順暢地使用 PaddlePaddle 開發產品。那麼除了不斷優化 PaddlePaddle 之外,百度還提供了哪些措施來獲取更多的開發者使用 PaddlePaddle ?

王益:PaddlePaddle 有一個 Web-based IDE,可以讓大家在瀏覽器里用 JupyterNotebook 編程,然後按一個鍵,就把程序發送到雲端(Kubernetes 集群上)運行,程序運行時候的輸出實時地顯示在瀏覽器里。這樣大家不需要在多個編程環境之間切換—— 在筆記本上開發,在 GPU server 上驗證,在集群上跑試驗,也就不需要維護多個環境里的各種軟件(比如 Python)的版本和配置一致。

PaddlePaddle 還提供一個訓練過程可視化的工具 VisualDL:https://github.com/PaddlePaddle/VisualDL。 這個工具很方便,社區反映非常熱烈。開始開發才不到半年,Github 上的「星」的數量(1071)就直追開發了兩年多的 Google TensorBoard 了(1144)。

我們還在為 PaddlePaddle Fluid 開發一個類似 GDB 的調試器。希望今年夏天的時候可以面世,進一步方便大家調試深度學習程序。

有開發者反饋,和其他框架相比,PaddlePaddle 的文檔資料較少,請問百度未來在 PaddlePaddle 社區運營以及開發文檔資料的支持工作上會有哪些具體的措施?

王益:文檔問題確實存在。我們也一直在反思原因和尋求解答。原因有幾個:

  1. 開源一年多以來,技術演進速度很快,文檔沒有跟上。

  2. 開源之前,作為公司內部項目,很多用戶交流都發生在公司內部的通信工具上,沒有歸檔到文檔里,很可惜。

  3. 團隊人力較少,顧不上文檔的完備。

  4. 中國工程師用英語寫作文檔的能力有限。

針對這幾個問題,最近幾個月我們做了很多工作:

  1. 鑒於 Fluid 已經是目前最新一代技術,2018 年我們會努力穩定和完善它,並且不斷補足文檔。

  2. 絕大部分用戶交流發生在 Github issue 里,這些討論過程會被不斷收集起來,形成文檔,或者幫助我們把現有文檔修改得更簡潔易懂。

  3. 百度在最近一年裡為 PaddlePaddle 配置了更多的工程師,我們也在不斷提升自己的文檔能力。

  4. API reference 類型的文檔盡量通過工具自動從代碼生成。

其他類型的文檔,我們建立了審核機製作為組織開源貢獻的基礎。我們也為百度之外的文檔和源碼貢獻者們準備了禮物:https://github.com/PaddlePaddle/Paddle/issues/6542。歡迎大家加入到 PaddlePaddle 項目里來,一起把它做得更好。

您曾經在 Google、騰訊、LinkedIn 做過與分佈式機器學習相關的工作,為什麼最終會選擇來百度領導開發 PaddlePaddle? 

王益:一個主要的原因是百度的 AI 布局是真的很開放,沒有什麼藏着掖着的。比如PaddlePaddle 100% 都在 Github 上公開,沒有內部版本。從芯片、到手機、到各種AI 應用,中國在 AI 領域每個層次上都有值得驕傲的工作在做值得驕傲的技術。如果有一個開放的軟件平台把他們能連為一體,無疑是一件獨具社會價值和面向長遠未來的事兒。這是一個很有挑戰的機會。另一個主要原因是百度的管理層都很支持 AI 開放這件事。陸奇、王海峰老師在技術成果宣傳和公司間的戰略合作方面,都是親力親為的,PaddlePaddle 的開源也得到了吳恩達老師的支持。

根據目前的發展現狀來看,您認為未來機器學習領域的發展趨勢是怎樣的?您比較看好哪些技術的應用潛力?

王益:機器學習有很多具體的工作方向,每一個都很有意思。我最近十年來都專註在大規模分佈式計算——除了提升計算速度(開始運行到結束之間的時間),還要綜合提升整個機群的利用率,以及降低每個作業提交之後到開始運行之前的這段等待時間。這是我最感興趣的方向。它能夠為公司節省計算成本,保障研究員們的工作效率,更是大規模互聯網業務成功的基石。

如今人工智能大熱,有很多程序員以及研究員有意轉向人工智能的開發和研究,對於這樣的現象您是怎麼看的?您能否提供一些建議給這些想轉型人工智能的技術人員?

王益:計算機科學有兩種形式:一種是,人來學習和積累知識,然後對給定問題想出來一個解法,把解法描述成程序,然後計算機照着執行。很多程序員學習算法和數據結構是為了掌握這種形式。另一種形式是,人想不出解法,所以寫一個程序,讓程序通過分析數據,歸納規則,再利用這些規則解決問題。后一種是人工智能。為了寫這個人工智能程序,當然也得學好算法和數據結構;同時人工智能程序區別於一般程序的地方是需要程序員有必要的數學基礎。

我們以前做的統計學習要求的統計學和統計學習理論相對比較難學一些,深度學習基本只需要高等數學為基礎,門檻一下子就降低了很多。這是一個大家學習把握第二種形式的好機會。

不管高等數學還是概率統計,都是大一課程,不需要超常的智慧,只是需要耐心積累知識體系之後,才能看到效果。我看到不少朋友們覺得難,其實不是這個學習的事兒難,而是要克服焦慮感,維持耐心比較難。如果大家因為著急想要放棄,請想想以下事實:

計算機科學發展了半個多世紀,能用第一種形式完全解決的核心問題,包括操作系統、編程語言、Web server、GUI 系統等,都解決的差不多了。而很多新的問題,比如:如果展示這個廣告,用戶有多大的概率會點擊;如果推薦這個衣服,用戶有多大可能性會購買;如果推薦這個小視頻,用戶有多大可能會觀看;這個照片看上去像是哪個知名景點等等,都需要用第二種形式的編程來解決,並且這些進展已經在最近二十年裡支撐起 BAT 和 FLAG 這樣的偉大的公司。

總結

2017 年夏天,北京工業大學的四位學生利用 PaddlePaddle 製造了一台智能桃子分揀機,從形狀、大小、色澤等多維度對桃子自動分級,實現桃子的自動分揀。對於自家的 PaddlePaddle 平台,李彥宏表示:「經過了五六年的積累,PaddlePaddle 實際上是百度深度學習算法的引擎,把源代碼開發出來,讓同學們、讓社會上所有的年輕人都能夠學習,在它的基礎上改進,我相信他們會發揮出創造力,做到很多我們連想都沒有想過的東西。」

總結起來,百度 PaddlePaddle 平台的使用成本更低、更加簡潔易用,從開放力度上來講,PaddlePaddle 也是前所未有的,不僅將高性能的分佈式框架徹底開源出來,同時還開放了大量的模型,在技術、營銷和客戶資源方面為企業和個人開發者提供幫助。不過,在競爭激烈的機器學習平台領域,PaddlePaddle 如何獲得更多開發者的青睞,如何拓展 PaddlePaddle 的技術生態,對於百度來講還有很長的路要走。


想在手機閱讀更多Android 手機及裝置資訊?下載【香港矽谷】Android應用
分享到Facebook
技術平台: Nasthon Systems