最適合中國開發者的深度學習框架:走向成熟的PaddlePaddle
近日,PaddlePaddle Fluid 1.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 支持超大規模的並行深度學習,包括支持大規模異構計算集群、非同步訓練和同步訓練模式、以及千億級稀疏特徵任務在數百個節點的並行訓練。
※忘了Python關鍵語句?這份備忘錄拯救你的記憶
※首場AItutorial明日上線 | Greg Mori帶你了解人類行為識別的前世今生
TAG:機器之心 |