最適合中國開發者的深度學習框架:走向成熟的PaddlePaddle 1.0

機器之心原創

作者:思

近日,PaddlePaddle 1.0 正式發佈,這一適合國內開發者的框架爲我們提供了超全的官方模型支持和最完善的移動端硬件支持。在 PaddlePaddle 走向成熟的這些歷程中,它爲機器學習社區貢獻了非常多的實現及應用。機器之心訪問了百度深度學習技術平臺部總監馬豔軍和 PaddlePaddle 總架構師於佃海,他們向我們介紹了 PaddlePaddle 的「成熟韻味」都體現在哪。

自深度學習以分層逐步學習的奇思妙想崛起以來,深度學習框架就在不停地發展。在 AlexNet 還沒有攜帶深度學習亮相 ImageNet 之前,由蒙特利爾大學 LISA 實驗室所編寫的 Theano 框架就已經開源,它可用來支持高效機器學習算法。Theano 是目前 DL 框架中的元老,它開啓了深度神經網絡高效編程的先河,後來開源的框架都受益於 Theano 的先行探索。

自 AlexNet 之後,深度卷積神經網絡在圖像數據展現出無與倫比的能力,而伯克利大學 AI 研究中心維護的 Caffe 也在 2013 年底正式開源。Caffe 支持非常多的計算機視覺領域算法,目前仍然有非常多的卷積神經網絡模型還都依賴於這個框架。

此後隨着深度學習在各種任務都以「暴力美學」的方式頻頻打破紀錄,科技巨頭也開始逐步開源內部的深度學習框架,包括 Facebook 主要維護的 Torch、谷歌主要維護的 TensorFlow(2015 年)和百度主要維護的 PaddlePaddle(2016 年)等。

因爲學術研究機構主導維護的框架比較適合完成模型原型,但在大數據或大規模分佈式計算等情況下 很難有比較好的性能,因此由科技巨頭主導維護的框架變得越來越流行。2017 年 4 月 19 日發佈 1.0 後的 Caffe 不再更新版本,9 月 19 日走過 10 年的 Theano 不再有官方維護。但與此同時,具有業務基礎的 TensorFlow、PaddlePaddle 和 PyTorch 等框架獲得了更廣泛的應用。

在這些根植業務的穩定框架中,由百度開發並維護的 PaddlePaddle 是適合中國開發者和企業的深度學習工具,而最近發佈的 PaddlePaddle 1.0 又標誌着它已經走向成熟。成熟的 PaddlePaddle 官方所維護的模型數量基本上是最多的,包括自然語言處理、計算機視覺和推薦等領域的成熟模型。這些模型很多都是根據百度自身業務積累而開源的,甚至還會提供對應的預訓練資源。例如在 NLP 中的情感分析任務上,PaddlePaddle 就會提供基於中文的預訓練模型,這對於開發者而言是非常有意義的。

成熟也就意味着 PaddlePaddle 能爲開發者和企業提供從訓練到部署的整套流程。從框架開發環境、AutoDL 2.0 自動設計深度模型、大規模並行訓練框架到覆蓋 90% 以上的移動端 GPU 加速,新發布的 PaddlePaddle 在數據預處理、模型搭建、模型訓練和部署這一系列流程都展示了成熟的味道:

  • 支持真正能解決企業問題的模型,所有成熟的模型都必須完備;
  • 運行穩定、可靠且高效;
  • 代碼簡潔,方便二次開發。

作爲國內唯一成熟的深度學習框架,PaddlePaddle 目前已經更新到了 1.1.0。機器之心在本文中將從整體開發套件、官方模型、移動端支持以及並行計算等方面介紹成熟的 PaddlePaddle 目前已經走到哪了。

PaddlePaddle Suite

PaddlePaddle Suite 是以深度學習框架爲核心的套件,它從數據預處理到模型部署爲深度學習的整個開發和應用流程提供了完整的工具。其中核心框架是從頭構建模型的基礎,而模塊與組件可以幫助我們快速訓練與試驗模型。最後的平臺會爲開發者提供整體流程支持,例如 AI Studio 提供了各種競賽教程與免費 GPU 資源,而 EasyDL 可以爲完全沒有基礎的用戶提供自動化的機器學習模型。

馬豔軍表示這三部分都是相互有聯繫的,模塊與組件都是依託核心框架所做的工具,而平臺是基於核心框架與組件所搭建的系統。例如在組件中,Visual DL 能可視化整個訓練和測試過程,包括損失函數的變化、模型計算圖和中間生成的圖像等。而 PARL 是深度強化學習框架性質的組件,它相當於提供了一套強化學習模型、算法和函數等,這些都還是基於核心框架的。

此外核心框架與組件又爲平臺提供了底層支持,例如我們可以在平臺上直接可視化訓練過程,或者在平臺調用核心框架搭建模型。值得注意的是,使用深度學習設計深度學習的 Auto DL 2.0 可以基於核心框架自動構建出非常優秀的模型。例如 Auto DL 在 Cifar-10 數據集上自動設計的神經網絡能獲得當前最優的測試集準確度 97.9%,同比一般的 ResNet-110 只能獲得 93.5% 的準確率。

官方模型

PaddlePaddle 1.0 爲推薦系統、視覺和自然語言處理任務提供了大量的官方模型,這對於開發者而言是非常難得的資源。馬豔軍表示爲了吸引研究者與開發者,百度首先會開源一些比較經典的算法,這些算法在業界上已經有比較廣的應用,且它們已經非常穩定。其次百度會開源一些前沿高性能模型,尤其是在各種競賽獲得第一的強大模型。特別是在 NLP 等百度傳統強項,其開放的經典模型很多都包含一些百度特有的技術,這些技術在實際產品線上都 已發揮了很大的作用。

百度在搜索和推薦等實際產品應用中積累的一些自然語言處理相關的核心技術都有開放出來,例如文本匹配和推薦的整套系列模型,包括對整個任務流程的支持。另外還有一些前沿模型,例如百度自研的人臉檢測 PyramidBox,該模型在 WIDER FACE 2018 的多項評測中均獲得第一名。

此外 PaddlePaddle 還會提供一些模型的簡潔實現,例如在機器翻譯中,百度會「精簡」整個 Transformer 的模型代碼,將本來很複雜的實現通過高級 API 或封裝變得直觀與易懂。

Transformer 開源模型,開發者可以快速理解直觀代碼並完成二次開發。

馬豔軍表示其實現在 Transformer 的很多實現都非常複雜,開發者需要大量時間理解代碼才能繼續二次開發和部署模型。而 PaddlePaddle 相當於把實現做到足夠簡單,因此修改、訓練、測試或部署都不會有太複雜的工作。

我們注意到,如果用戶使用 Tensorflow 來來開發 Transformer 翻譯模型,需要在 10 萬行 Tensor2tensor 代碼中找出他需要的部分,而在 PaddlePaddle 下的 Transformer 翻譯模型代碼僅 2000 餘行,開發者可以快速理解代碼並完成二次開發。

其實除了 PaddlePaddle 官方維護的這些模型,很多具體領域也都會有一系列類似的工具,例如自然語言處理中的 NLTK 或計算機視覺領域的 Detectron 等。於佃海表示,這些第三方的庫很多時候都只是把各種算法整理出來,並以一種近似黑盒的方式提供使用。但是對於 Paddle 來說,它本身就是深度學習框架,因此搭上這些模型也會有很好的擴展性,我們可以直接調用這些模型,也可以對它們做二次開發。

此外,Paddle 支持的開源模型還有另外一個特點,它們會基於百度在中文上的大數據做一些預訓練模型,這對於中文文本處理或推薦系統都有很大的幫助。例如對於詞法分析模型,Paddle 提供的預訓練模型已經在大規模漢語數據集上訓練得非常好,開發者可以直接調用並用於自己的任務。

除了上面模型的挑選、簡化和中文預訓練等特點,Paddle 支持的官方模型還有另一大特色,即覆蓋了推薦、視覺和文本的大部分的任務和模型。

Paddle 主要覆蓋的任務,每一種任務有多個最優模型,例如目標檢測中的 SSD、PyramidBox 和 Faster R-CNN 等。更詳細的模型列表情查看開源地址。

Paddle 官方模型地址:https://github.com/PaddlePaddle/models/tree/develop/fluid

開發與維護

這麼全的官方模型有一套自己的開發和維護流程,官方支持不僅表示這些模型是沒問題的,同時還表示不論怎樣更新 PaddlePaddle,不論在什麼環境下,這些模型也都是跑得動的。

對於官方模型的整個開發過程而言,Paddle 團隊通過實踐經驗或調研會得出到底哪些模型效果好、性能穩定,當然這一過程會結合具體問題與具體領域。選定模型後 Paddle 團隊會直接實現,或其它部門的算法工程師根據實際經驗完成模型,當然第三方也可以提交新算法。

針對何爲官方支持,馬豔軍表示一旦模型得到實現,他們會在認可的數據集上對效果和速度等各方面都進行驗證。一旦新模型通過驗證,它們就能加入發行版的模型列表,並且在所有的 Paddle 後續框架開發中,不管框架如何升級,這些模型都能穩定地運行。

也就是說不管什麼時候用這些模型,它們肯定都能運行。爲了達到這樣的效果,官方支持的模型在每一次框架升級後都會重新驗證,它們的準確度和速度等衡量標準只允許變好而不能變壞。如果模型性能變差,那麼官方支持的模型肯定出了問題,Paddle 團隊需要在新框架上將它們調整好才能發佈。

於佃海表示這其實也是很自然的一個過程,因爲百度有很強的 AI 研發團隊,而基於 PaddlePaddle 的研發過程,使得在 NLP 和 CV 等方面天然就會有持續的積累。在評估這些模型後肯定知道哪些對大家是值得開源的,因此整個開放和維護過程是一個持續的過程。

除了開源流程外,另外一個比較重要的方面就是環境配置。很多時候我們調用不同的包或工具都會遇到配置運行環境這一「玄學」,尤其是在 Windows 系統上。而馬豔軍表示 Paddle 團隊在環境配置方面也是下了「血本」的,他們一直將環境支持放在最優先的位置。

具體而言,Paddle 對國內各社區的用戶反饋做了全面的迴應,不管是 Windows、MacOS 還是 Linux,模型發佈前都會做全面的驗證,包括各系統版本的支持、編程語言的支持和模型依賴項的支持等。這就相當於在每一種系統環境下對所有模型都做了驗證,因爲官方支持的模型很多,所以這個工作量還是非常大的。

最後,相對於其它使用不同框架的非官方模型,很可能它們都是針對特定論文的實現,而這些實現有可能是不穩定的,在實際應用中可能需要做大量的工程化努力。Paddle 官方支持的模型不僅會保證穩定可靠,同時那些被驗證的前沿最新模型也都會納入官方支持。比如說前一段時間在 NLP 中效果非常好的 BERT 預訓練模型,Paddle 也將提供基於大規模中文數據所預訓練的版本。

移動端加速

除了大量的官方模型,開發者在產品化模型時還會遇到各種各樣的工程化問題。例如簡單地將模型部署到雲端,那麼就需要考慮推理延遲和網絡穩定性等問題。而如果考慮將模型部署到移動端,那麼面臨的問題就更多了,例如安裝包大小、運行內存佔用大小、推理速度和效果等。

針對移動端的這些問題,我們一般會先壓縮神經網絡以減少所需的計算資源,並只編譯特定的 Operator 而降低包體大小。當然若移動端框架還支持硬件加速,那就最好不過了。以前這些優化步驟都需要開發者自行完成,例如根據實際情況實現新的模型壓縮算法,編寫底層加速庫等等。

但是自面向工業化的框架崛起以來,這些調用個函數就能解決。Paddle Mobile 在移動端加速也是做得非常好,馬豔軍表示 Paddle Mobile 對移動端硬件的支持基本上是所有框架中最完整的,使用整套工具不僅能快速部署模型,同時還能借助高速推理引擎快速執行預測。

首先 Paddle 在 CPU 上的支持非常完備,這也是一直以來的優化重點。其次隨着 GPU 在移動端變得越來越流行,目前 Paddle Mobile 已經支持最主流的 90%GPU,包括 IOS、高通的 Andrene 和 ARM 的 Mali GPU。下圖展示了不同模型在不同硬件上的支持情況:

既然已經有了硬件加速的保證,那麼接下來開發者就只需要搞定模型了。不過即使模型壓縮得越狠加速越快,但實際上模型壓縮和性能也是有權衡的。在大多數場景下,壓縮後的模型準確率損失不能超過 1%,甚至有一些會要求準確率不能降低。因此 Paddle 做的很多工作都關注於如何在保持準確率不變的情況下做壓縮。

於佃海表示研究團隊會持續基於 Paddle 框架把輕量級部署應用做得更好,例如可以和訓練階段更好配合,在訓練階段就爲模型壓縮做一些準備。因爲如果等模型訓練好再做壓縮或使用低精度,一些場景下準確率或多或少有一些影響。但是如果在訓練階段就考慮推理階段的模型壓縮或低精度計算問題,那麼模型可能在推理階段的適應性會更大,再做剪枝等壓縮算法就會有比較好的效果。這也就是說爲什麼 PaddlePaddle 不僅做高速推理引擎,它關注的是全流程的高效訓練和上線部署。

最後當模型訓練並壓縮完畢,我們就需要編譯成安裝包。這裏比較重要的是控制包體大小,這也可以視爲一種「壓縮」。很多移動端框架在這一方面做得並不好,比如說如果採用了框架自帶的模型壓縮算法,那麼編譯時會附帶很多額外的 OP。而 Paddle Mobile 在打包的時候會盡量把一些不需要的 OP 不放到軟件包中,並最終實現一個輕量化的安裝程序。

超大規模並行訓練

PaddlePaddle 這種面向工業化的框架在並行訓練,尤其是在GPU 多機多卡、CPU 多機多線程上的並行訓練非常有優勢。從整體上來說有高效的數據讀取方式 PyReader,也有對分佈式框架本身做的優化。例如對於大規模稀疏特徵,因爲參數量會非常大,甚至單臺服務器都無法加載全部參數,那麼並行分佈式參數服務器的設計就需要優化。這種大規模稀疏特徵在工業上非常常見,例如處理廣告或信息流的特徵維度可能會達到千億級的規模,再加上同樣巨量的樣本數,一般的框架是搞不定的。

基於工業化經驗,Paddle 在參數服務器、多機通信和數值優化算法等方面優化了整個並行框架。它不僅適合解決大規模稀疏特徵問題,同時還有很多具體實現上的優化創新,比如動態地調整通信節奏以使用更大的 BatchSize 進行訓練。這樣不僅並行的效率高,同時模型收斂也能變得更快。

總的而言,PaddlePaddle 1.0 支持超大規模的並行深度學習,包括支持大規模異構計算集羣、異步訓練和同步訓練模式、以及千億級稀疏特徵任務在數百個節點的並行訓練。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章