0
雷鋒網(wǎng) AI 研習(xí)社按:PaddlePaddle 的前身是百度在 2013 年自主研發(fā)的深度學(xué)習(xí)平臺(tái),在百度內(nèi)部已經(jīng)使用多年,支持百度內(nèi)部各項(xiàng)業(yè)務(wù)。 2016 年 8 月底百度開源了 PaddlePaddle 之后,在短時(shí)間內(nèi)迅速成為全球開發(fā)熱度(Github Pull Request 數(shù)量)增速最高的開源深度學(xué)習(xí)平臺(tái)。PaddlePaddle 項(xiàng)目不僅提供深度學(xué)習(xí)框架,還提供各種簡化調(diào)試和支持大規(guī)模訓(xùn)練的附加技術(shù)。PaddlePaddleVisualDL 開發(fā)不到半年的時(shí)間,在Github 上的“star”數(shù)就逼近了開發(fā)了兩年多的 Google TensorBoard。
PaddlePaddle 的社區(qū)增速和其技術(shù)迭代速度密不可分。剛開源的時(shí)候,PaddlePaddle 的設(shè)計(jì)思路和四年前開發(fā)的Caffe類似。在一年時(shí)間里,連續(xù)推出了“v2”和“Fluid”兩代新技術(shù):其中 v2 像 MxNet 和Caffe2 一樣參考 TensorFlow 增加了 operators 的概念;Fluid 類似 PyTorch,但是不依賴 Python 的控制流(if-else、for等),而是提供自己的解釋器甚至編譯器,所以不受限于 Python 的執(zhí)行速度問題。
在 2017 年 11 月的百度世界大會(huì)上,PaddlePaddle 發(fā)布了三項(xiàng)新功能:
PaddlePaddleFluid 提供高級(jí)語言中的 while 和 if 等控制流結(jié)構(gòu),提升使用者的開發(fā)效率,同時(shí)利用編譯優(yōu)化技術(shù)保證計(jì)算性能。
PaddlePaddleCloud 支持使用者在瀏覽器里開發(fā) AI 應(yīng)用,在云端調(diào)試運(yùn)行,開發(fā)者不需要在個(gè)人電腦和機(jī)群之間切換,提升了工作效率。
PaddlePaddleEDL 是全球首個(gè)支持彈性作業(yè)調(diào)度的開源 AI 云解決方案,通過與 Kubernetes 合作實(shí)現(xiàn)彈性作業(yè)調(diào)度。
三大新功能的推出,進(jìn)一步加強(qiáng)了 PaddlePaddle 的易用性,提高了效率,并降低了開發(fā)者的使用門檻。
陸奇曾表示,開源代碼寫得好,不僅能解決大家的痛點(diǎn),開源代碼也會(huì)變得越來越強(qiáng),開源代碼的生命力必然會(huì)超過封閉體系的代碼。PaddlePaddle 開源至今,還會(huì)為開發(fā)者提供哪些服務(wù)?怎樣在大量流行開源框架的競爭之下脫穎而出?如何成為陸奇口中所說的“越來越強(qiáng)”的開源平臺(tái)?帶著這些疑問,雷鋒網(wǎng) AI 研習(xí)社采訪了百度 PaddlePaddle 的技術(shù)負(fù)責(zé)人王益,他將分享在開發(fā) PaddlePaddle 過程中的經(jīng)驗(yàn)點(diǎn)滴。
嘉賓簡介:王益,在加入百度之前曾任硅谷 AI 創(chuàng)業(yè)公司 Scaled Inference 創(chuàng)始科學(xué)家,LinkedIn 高級(jí)主任數(shù)據(jù)科學(xué)家,騰訊社交廣告技術(shù)總監(jiān),Google研究員。王益曾在清華大學(xué)和香港城市大學(xué)學(xué)習(xí),并取得了清華大學(xué)機(jī)器學(xué)習(xí)和人工智能博士學(xué)位。此外,他還是 IEEE 的高級(jí)會(huì)員,著有《推薦系統(tǒng)實(shí)踐》一書。
以下是雷鋒網(wǎng) AI 研習(xí)社對(duì)王益的采訪內(nèi)容:
PaddlePaddle 其實(shí)已經(jīng)有很多年的歷史了,從 2013 年發(fā)展至今,PaddlePaddle 在設(shè)計(jì)的過程中經(jīng)過了哪些重大變化?
王益:PaddlePaddle 的2013年版本是百度杰出科學(xué)家徐偉老師主持設(shè)計(jì)和開發(fā)的,其設(shè)計(jì)思路和同時(shí)代的 Caffe “心有靈犀”:表示一個(gè)模型的方式都是“一串 layers”。這個(gè)設(shè)計(jì)沿用了三年。2016年8月底,PaddlePaddle 開源之后,我們?cè)谛炖蠋熤笇?dǎo)下做了兩代升級(jí):2017 年 4 月推出 PaddlePaddle v2,2017 年底推出PaddlePaddleFluid。
PaddlePaddle v2 的推出把 PaddlePaddle 的技術(shù)升級(jí)到了 2015 年 Google 推出的TensorFlow 的水平 —— 把 layers “打碎”成更細(xì)粒度的 operators,同時(shí)支持更復(fù)雜的網(wǎng)絡(luò)拓?fù)洹皥D”而不只是“串”。
PaddlePaddle Fluid 的設(shè)計(jì)思路和 PyTorch 以及 TensorFlowEager Execution 很像 —— 已經(jīng)不再有“模型”的概念,也就不在意“圖”(graph ofoperators)或者“串”(sequence oflayers)了,而是只有“程序”的概念。當(dāng)然,從程序是可以導(dǎo)出一個(gè)圖的,這也是 從一個(gè) PyTorch 程序可以被導(dǎo)出成 ONNX 文件格式的模型一樣。
需要提醒的是,PyTorch 和 EagerExecution 程序中的控制流(比如 if-else, for)都是用的 Python,而 Python 執(zhí)行速度慢且難以提速,這是一個(gè)瓶頸。Fluid 程序也是一個(gè) Python 程序,但是執(zhí)行這個(gè)程序會(huì)先把自己輸出成一個(gè) protobuf message,隨后調(diào)用 Fluid 解釋器(而不是 Python 解釋器)來解釋執(zhí)行這個(gè) protobufmessage,這樣比 Python 解釋器的執(zhí)行速度更快,和 TensorFlow 執(zhí)行圖的速度一樣。甚至更進(jìn)一步,我們?cè)陂_發(fā)編譯執(zhí)行的方式 —— 寫一個(gè) transpiler 把 protobuf message 表示的程序翻譯成 C++ 程序,然后可以用 nvcc、icc、gcc 編譯成二進(jìn)制代碼,直接運(yùn)行在服務(wù)器和手機(jī)上。從而徹底解決 PyTorch 和 Eager Execution 程序的執(zhí)行速度受限于 Python 的執(zhí)行速度的問題。
在知乎上,Caffe 的作者賈揚(yáng)清稱贊了百度的 PaddlePaddle,并說“整體的設(shè)計(jì)感覺和 Caffe 心有靈犀”。那么,您認(rèn)為,跟 Caffe 以及 TensorFlow、PyTorch、MXNet 等熱門框架相比,PaddlePaddle 的優(yōu)勢(shì)在哪?
王益:知乎上賈揚(yáng)清的稱贊是在 PaddlePaddle 開源之初。如我上文所述,當(dāng)時(shí)的 PaddlePaddle 和 Caffe 確實(shí)很像。今天在百度內(nèi)外推動(dòng)的都是 PaddlePaddleFluid 了,是一個(gè)比 PyTorch 和 Eager Execution 更激進(jìn)的技術(shù)思路。
陸奇曾表示,要將 PaddlePaddle 發(fā)展成具有中國特色,最適合中國國情的深度學(xué)習(xí)平臺(tái)。請(qǐng)問“適合中國國情”的深度學(xué)習(xí)平臺(tái)怎樣理解?它和國外的深度學(xué)習(xí)平臺(tái)有何區(qū)別?
王益:從我的理解來看,一方面是基礎(chǔ)計(jì)算架構(gòu)要適應(yīng)中國的現(xiàn)狀;另一方面是計(jì)算技術(shù)上要世界領(lǐng)先,能人所不能。這兩方面都有很多可以做的工作,而且百度還是足以自信的。
雖然現(xiàn)在很多深度學(xué)習(xí)應(yīng)用用一個(gè)幾臺(tái)機(jī)器的小集群就可以解決,但是 Web scaled 應(yīng)用,比如廣告和搜索引擎,或者新的應(yīng)用,比如通過 Lidar、Radar、cameras 采集海量數(shù)據(jù)的無人車,都是需要大規(guī)模深度學(xué)習(xí)計(jì)算能力的。通過擴(kuò)展 Kubernetes 這樣的先進(jìn)的集群管理系統(tǒng),PaddlePaddle EDL 比 Google KubeFlow 優(yōu)勢(shì)很明顯 —— EDL 不僅可以把 PaddlePaddle 程序在 Kubernetes 上跑起來,而且可以彈性調(diào)度—— 不忙的時(shí)候一個(gè)訓(xùn)練作業(yè)多用一些資源,忙的時(shí)候少用一些,但是資源變化不會(huì)導(dǎo)致作業(yè)失??;而 KubeFlow 只是把 TensorFlow 程序在 Kubernetes 上跑起來,不能實(shí)現(xiàn)彈性調(diào)度。另外,EDL 不僅調(diào)度深度學(xué)習(xí)作業(yè),也彈性調(diào)度其他作業(yè),比如 Nginx、MySQL 等,從而極大地提升集群總體利用率—— 在國家深度學(xué)習(xí)重點(diǎn)實(shí)驗(yàn)室機(jī)群上實(shí)測(cè)效果高達(dá) 91%,遠(yuǎn)超一般的高性能計(jì)算集群的 30% 左右的利用率。這樣的技術(shù)在公有云和私有云上的推廣,很容易就能用 1/3 的機(jī)器做同樣的工作,為一家單位一年節(jié)省的計(jì)算成本可以高達(dá)百萬、甚至數(shù)百萬美元。
深度學(xué)習(xí)平臺(tái)和編程語言一樣,不是一個(gè)獨(dú)立的程序,而是一個(gè)社區(qū) —— 訓(xùn)練要能在國內(nèi)的云服務(wù)上跑;要能部署到國內(nèi)的企業(yè)的私有云上;國內(nèi)的科技創(chuàng)新企業(yè)在制造定制化的加速芯片,PaddlePaddle 應(yīng)該是連接這些基礎(chǔ)創(chuàng)新和應(yīng)用的橋梁;要開放中文數(shù)據(jù)和中文模型—— 比如圖像識(shí)別的 label 是中文的;語音識(shí)別和語音合成等應(yīng)用也是和中文強(qiáng)相關(guān)的。
現(xiàn)在 Google 正加速 TensorFlow 在國內(nèi)的推廣(開設(shè) TensorFlow 微信公眾號(hào)、中文網(wǎng)站等),百度的 PaddlePaddle 會(huì)采用怎樣的策略應(yīng)對(duì)?
王益:在宣傳和推廣方面,PaddlePaddle 團(tuán)隊(duì)也在建設(shè)宣傳渠道。歡迎大家訪問我們的官方網(wǎng)站 paddlepaddle.org,也歡迎大家訂閱我們的微信公眾號(hào)(微信號(hào):PaddleOpenSource)。前一年里,PaddlePaddle 團(tuán)隊(duì)的人數(shù)也在迅速增長,雖然和 TensorFlow 團(tuán)隊(duì)的規(guī)模相比還是有一定的距離,我們?cè)?Github 上的 pull request 和 issues 數(shù)量增長和 TensorFlow 是同量級(jí)的,這背后是團(tuán)隊(duì)持續(xù)一年多努力工作的結(jié)果。
從 PaddlePaddle 的發(fā)展過程可看出,百度正努力降低 PaddlePaddle 的開發(fā)門檻,同時(shí)提升其開發(fā)效率,從而讓開發(fā)者能夠順暢地使用 PaddlePaddle 開發(fā)產(chǎn)品。那么除了不斷優(yōu)化 PaddlePaddle 之外,百度還提供了哪些措施來獲取更多的開發(fā)者使用 PaddlePaddle ?
王益:PaddlePaddle 有一個(gè) Web-based IDE,可以讓大家在瀏覽器里用 JupyterNotebook 編程,然后按一個(gè)鍵,就把程序發(fā)送到云端(Kubernetes 集群上)運(yùn)行,程序運(yùn)行時(shí)候的輸出實(shí)時(shí)地顯示在瀏覽器里。這樣大家不需要在多個(gè)編程環(huán)境之間切換—— 在筆記本上開發(fā),在 GPU server 上驗(yàn)證,在集群上跑試驗(yàn),也就不需要維護(hù)多個(gè)環(huán)境里的各種軟件(比如 Python)的版本和配置一致。
PaddlePaddle 還提供一個(gè)訓(xùn)練過程可視化的工具 VisualDL:https://github.com/PaddlePaddle/VisualDL。 這個(gè)工具很方便,社區(qū)反映非常熱烈。開始開發(fā)才不到半年,Github 上的“星”的數(shù)量(1071)就直追開發(fā)了兩年多的 Google TensorBoard 了(1144)。
我們還在為 PaddlePaddle Fluid 開發(fā)一個(gè)類似 GDB 的調(diào)試器。希望今年夏天的時(shí)候可以面世,進(jìn)一步方便大家調(diào)試深度學(xué)習(xí)程序。
有開發(fā)者反饋,和其他框架相比,PaddlePaddle 的文檔資料較少,請(qǐng)問百度未來在 PaddlePaddle 社區(qū)運(yùn)營以及開發(fā)文檔資料的支持工作上會(huì)有哪些具體的措施?
王益:文檔問題確實(shí)存在。我們也一直在反思原因和尋求解答。原因有幾個(gè):
開源一年多以來,技術(shù)演進(jìn)速度很快,文檔沒有跟上。
開源之前,作為公司內(nèi)部項(xiàng)目,很多用戶交流都發(fā)生在公司內(nèi)部的通信工具上,沒有歸檔到文檔里,很可惜。
團(tuán)隊(duì)人力較少,顧不上文檔的完備。
中國工程師用英語寫作文檔的能力有限。
針對(duì)這幾個(gè)問題,最近幾個(gè)月我們做了很多工作:
鑒于 Fluid 已經(jīng)是目前最新一代技術(shù),2018 年我們會(huì)努力穩(wěn)定和完善它,并且不斷補(bǔ)足文檔。
絕大部分用戶交流發(fā)生在 Github issue 里,這些討論過程會(huì)被不斷收集起來,形成文檔,或者幫助我們把現(xiàn)有文檔修改得更簡潔易懂。
百度在最近一年里為 PaddlePaddle 配置了更多的工程師,我們也在不斷提升自己的文檔能力。
API reference 類型的文檔盡量通過工具自動(dòng)從代碼生成。
其他類型的文檔,我們建立了審核機(jī)制作為組織開源貢獻(xiàn)的基礎(chǔ)。我們也為百度之外的文檔和源碼貢獻(xiàn)者們準(zhǔn)備了禮物:https://github.com/PaddlePaddle/Paddle/issues/6542。歡迎大家加入到 PaddlePaddle 項(xiàng)目里來,一起把它做得更好。
您曾經(jīng)在 Google、騰訊、LinkedIn 做過與分布式機(jī)器學(xué)習(xí)相關(guān)的工作,為什么最終會(huì)選擇來百度領(lǐng)導(dǎo)開發(fā) PaddlePaddle?
王益:一個(gè)主要的原因是百度的 AI 布局是真的很開放,沒有什么藏著掖著的。比如PaddlePaddle 100% 都在 Github 上公開,沒有內(nèi)部版本。從芯片、到手機(jī)、到各種AI 應(yīng)用,中國在 AI 領(lǐng)域每個(gè)層次上都有值得驕傲的工作在做值得驕傲的技術(shù)。如果有一個(gè)開放的軟件平臺(tái)把他們能連為一體,無疑是一件獨(dú)具社會(huì)價(jià)值和面向長遠(yuǎn)未來的事兒。這是一個(gè)很有挑戰(zhàn)的機(jī)會(huì)。另一個(gè)主要原因是百度的管理層都很支持 AI 開放這件事。陸奇、王海峰老師在技術(shù)成果宣傳和公司間的戰(zhàn)略合作方面,都是親力親為的,PaddlePaddle 的開源也得到了吳恩達(dá)老師的支持。
根據(jù)目前的發(fā)展現(xiàn)狀來看,您認(rèn)為未來機(jī)器學(xué)習(xí)領(lǐng)域的發(fā)展趨勢(shì)是怎樣的?您比較看好哪些技術(shù)的應(yīng)用潛力?
王益:機(jī)器學(xué)習(xí)有很多具體的工作方向,每一個(gè)都很有意思。我最近十年來都專注在大規(guī)模分布式計(jì)算——除了提升計(jì)算速度(開始運(yùn)行到結(jié)束之間的時(shí)間),還要綜合提升整個(gè)機(jī)群的利用率,以及降低每個(gè)作業(yè)提交之后到開始運(yùn)行之前的這段等待時(shí)間。這是我最感興趣的方向。它能夠?yàn)楣竟?jié)省計(jì)算成本,保障研究員們的工作效率,更是大規(guī)?;ヂ?lián)網(wǎng)業(yè)務(wù)成功的基石。
如今人工智能大熱,有很多程序員以及研究員有意轉(zhuǎn)向人工智能的開發(fā)和研究,對(duì)于這樣的現(xiàn)象您是怎么看的?您能否提供一些建議給這些想轉(zhuǎn)型人工智能的技術(shù)人員?
王益:計(jì)算機(jī)科學(xué)有兩種形式:一種是,人來學(xué)習(xí)和積累知識(shí),然后對(duì)給定問題想出來一個(gè)解法,把解法描述成程序,然后計(jì)算機(jī)照著執(zhí)行。很多程序員學(xué)習(xí)算法和數(shù)據(jù)結(jié)構(gòu)是為了掌握這種形式。另一種形式是,人想不出解法,所以寫一個(gè)程序,讓程序通過分析數(shù)據(jù),歸納規(guī)則,再利用這些規(guī)則解決問題。后一種是人工智能。為了寫這個(gè)人工智能程序,當(dāng)然也得學(xué)好算法和數(shù)據(jù)結(jié)構(gòu);同時(shí)人工智能程序區(qū)別于一般程序的地方是需要程序員有必要的數(shù)學(xué)基礎(chǔ)。
我們以前做的統(tǒng)計(jì)學(xué)習(xí)要求的統(tǒng)計(jì)學(xué)和統(tǒng)計(jì)學(xué)習(xí)理論相對(duì)比較難學(xué)一些,深度學(xué)習(xí)基本只需要高等數(shù)學(xué)為基礎(chǔ),門檻一下子就降低了很多。這是一個(gè)大家學(xué)習(xí)把握第二種形式的好機(jī)會(huì)。
不管高等數(shù)學(xué)還是概率統(tǒng)計(jì),都是大一課程,不需要超常的智慧,只是需要耐心積累知識(shí)體系之后,才能看到效果。我看到不少朋友們覺得難,其實(shí)不是這個(gè)學(xué)習(xí)的事兒難,而是要克服焦慮感,維持耐心比較難。如果大家因?yàn)橹毕胍艞墸?qǐng)想想以下事實(shí):
計(jì)算機(jī)科學(xué)發(fā)展了半個(gè)多世紀(jì),能用第一種形式完全解決的核心問題,包括操作系統(tǒng)、編程語言、Web server、GUI 系統(tǒng)等,都解決的差不多了。而很多新的問題,比如:如果展示這個(gè)廣告,用戶有多大的概率會(huì)點(diǎn)擊;如果推薦這個(gè)衣服,用戶有多大可能性會(huì)購買;如果推薦這個(gè)小視頻,用戶有多大可能會(huì)觀看;這個(gè)照片看上去像是哪個(gè)知名景點(diǎn)等等,都需要用第二種形式的編程來解決,并且這些進(jìn)展已經(jīng)在最近二十年里支撐起 BAT 和 FLAG 這樣的偉大的公司。
2017 年夏天,北京工業(yè)大學(xué)的四位學(xué)生利用 PaddlePaddle 制造了一臺(tái)智能桃子分揀機(jī),從形狀、大小、色澤等多維度對(duì)桃子自動(dòng)分級(jí),實(shí)現(xiàn)桃子的自動(dòng)分揀。對(duì)于自家的 PaddlePaddle 平臺(tái),李彥宏表示:“經(jīng)過了五六年的積累,PaddlePaddle 實(shí)際上是百度深度學(xué)習(xí)算法的引擎,把源代碼開發(fā)出來,讓同學(xué)們、讓社會(huì)上所有的年輕人都能夠?qū)W習(xí),在它的基礎(chǔ)上改進(jìn),我相信他們會(huì)發(fā)揮出創(chuàng)造力,做到很多我們連想都沒有想過的東西。”
總結(jié)起來,百度 PaddlePaddle 平臺(tái)的使用成本更低、更加簡潔易用,從開放力度上來講,PaddlePaddle 也是前所未有的,不僅將高性能的分布式框架徹底開源出來,同時(shí)還開放了大量的模型,在技術(shù)、營銷和客戶資源方面為企業(yè)和個(gè)人開發(fā)者提供幫助。不過,在競爭激烈的機(jī)器學(xué)習(xí)平臺(tái)領(lǐng)域,PaddlePaddle 如何獲得更多開發(fā)者的青睞,如何拓展 PaddlePaddle 的技術(shù)生態(tài),對(duì)于百度來講還有很長的路要走。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。