深度學習高速路上,PaddlePaddle正在彎道超車

深度學習是機器學習中一種基於對數據進行表證學習的方法,近些年不斷髮展並廣受歡迎。研究熱潮的持續高漲,帶來各類開源深度學習框架層出不窮,其中包括TensorFlow、CaffeKerasCNTKTorch7MXNetLeafPaddlePaddleTheanoDeepLearning4LasagneNeon等,在此背景下,PaddlePaddle如何在這條深度學習的高速路上彎道超車,看PaddlePaddle架構師潘欣如何解答。程序員

如下爲潘欣老師演講實錄編程

藉助傳統編程語言理念的全功能深度學習框架安全

PaddlePaddle是國內惟一的開源深度學習平臺,由百度自主研發並具有徹底的自主核心技術和知識產權,支持從建模、網絡、強化學習、語音識別到最後部署的所有環節,具備易學、易用、安全、高效等特色,是全功能的深度學習框架。網絡

圖一 PaddlePaddle核心框架結構多線程

PaddlePaddle的核心架構如圖所示,它的總體運行流程是經過API接口組輸入/輸出網絡,並在底層作統一轉化,而後經過Runtime進行訓練,最後轉換成線上部署的模型。線上部署分爲服務端和移動端,爲應對不一樣體系平臺、能耗的要求,咱們部署不一樣的設備。架構

其中左側第一層是API接口,它採用Python語言編寫,大體分爲兩大類,一類是組網類API,包括控制邏輯、構成邏輯、計算邏輯、IO的模塊、讀取數據的模塊等;另外一類是執行類底層API,把用戶組好的模型進行分析,並將計算方法進行合併優化,以此提升訓練速度。併發

除此以外,對於API的組網,PaddlePaddle還有一些新特性。衆所周知,目前不少的框架是在用戶層暴露出來一個圖的接口,以此進行組網。但咱們認爲,大多數的程序員更熟悉的是傳統的如變量、block的流式程序的概念,而不是經過一個圖去鏈接算子、編寫模型。因此在PaddlePaddle API接口的設計中,咱們使用了這些傳統編程語言的理念,使得最終編寫更相似於傳統編程語言。框架

組網類API機器學習

組網類API包含通用、控制、計算、優化、IO等類型的API異步

  1. VariablesPaddlePaddle中的變量,能夠是Tensor Parameter,或RPCClient。概念相似高級語言中的變量,有不一樣類型。
  2. LayersPaddlePaddle中用戶配置模型的基礎模塊,Layer表示一個或者一組緊密關聯的計算,Layers能夠經過輸入輸出鏈接起來。
  3. BlockBlock表示一組連續的計算邏輯,一般是一個或多個順序Layer組成。一般主模型是一個Block0。另外在Control Flow中,好比WhileIflese,也會單獨造成一個子Block
  4. Control FlowPaddlePaddle支持If-elseWhileSwitch等編程語言中常見的Control Flow,以確保模型的靈活表達。Control Flow一般以Block的形式存在。
  5. Program:包含了1個或者多個Block,表示一個完整的模型執行單元。執行器須要完整的執行Program,並保證讀寫關係符合用戶的預期。

執行類API

示例

訓練Runtime

多卡並行-SSA Graph

  1. 將模型Program轉換成一個可併發執行的Intermediate Representation(IR);利用Static Single AssignmentVariableVersion,獲得一個正確的依賴關係;Build Pass中插入通訊節點和額外的依賴關係。
  2. 基於圖依賴的執行:Input ready的全部Operator能夠併發執行;Operators在多個GPU上數據並行執行;多卡Gradient聚合,確保數據並行中參數一致。

多卡並行-Profile

多機分佈式

多機分佈式支持RingPserver兩種模式。

  1. Ring:自動插入多機Communicator,多機同步訓練,支持高性能RDMA通訊。
  2. Pserver:拆分紅Trainer ProgramPserverProgram。支持同步和異步的分佈式訓練。Trainer端多線程異步發送GradientPserver端多線程異步Apply Optimization

用戶Focus Modeling, 框架自動多機化部署

  1. 發現Optimizer OperatorsParametersGradients
  2. SplitAssignParameter Server上。
  3. TrainerParameter Server上插入發送和接收的通訊節點。
  4. 生成在Trainer執行的Program
  5. 生成在Parameter Server執行的Program

多機分佈式的通訊和集羣

  1. 支持MPIRPC等通訊方式。
  2. RPC未來會換成Brpc,並提供原生的RPC+RDMA支持,極大提升通訊效率。
  3. 支持Kubernetes集羣部署。

多機分佈式下的容錯

Trainer或者PserverFailure後能夠重啓恢復訓練。即將支持Pserver端的分佈式CheckPoint和恢復,支持大規模Embedding

大規模稀疏數據分佈式模型訓練

在互聯網場景中,億級的用戶天天產生着百億級的用戶數據,百度的搜索和推薦系統是大規模稀疏數據分佈式模型訓練的主要應用場景。

如何利用這些數據訓練出更好的模型來給用戶提供服務,對機器學習框架提出了很高的要求。主要包括:

  1. 樣本數量大,單週20T+
  2. 特徵維度多達千億甚至萬億。
  3. T級別,參數大。
  4. 小時級更新,時效要求高。

注:文中所提架構基於PaddlePaddle 0.14版本,將來,會發出更爲穩定的新版本,歡迎你們關注

提問環節

提問:在分佈式訓練的時候,有同步和異步兩種,何時適合用同步,何時適合用異步?

潘欣:目前沒有機械化的方法肯定這個問題,可是有一些經驗能夠跟你們分享。如在圖像這個領域用同步更穩定,還有最近的翻譯模型,也是經過同步的方法訓練。固然,並非說同步必定比異步好。根據過去在公司的經驗,中國的主流實際上是異步,異步的好處是訓練更加可擴展,對於不少傳統NLP任務,異步比同步要好。因此要驗證這個問題須要在實驗中比較。

實錄結束

潘欣,百度深度學習框架PaddlePaddle的架構設計以及核心模塊開發負責人,百度深度學習技術平臺部TC主席。在計算機視覺CVPR和雲計算SoCC等國際會議發表多篇論文。

相關文章
相關標籤/搜索