標籤:論文 電腦 The 深度學習 彙總 模組 模型 embed api
深度學習是機器學習中一種基於對資料進行表證學習的方法,近些年不斷髮展並廣受歡迎。研究熱潮的持續高漲,帶來各種開源深度學習架構層出不窮,其中包括TensorFlow、Caffe、Keras、CNTK、Torch7、MXNet、Leaf、PaddlePaddle、Theano、DeepLearning4、Lasagne、Neon等,在此背景下,PaddlePaddle如何在這條深度學習的高速路上彎道超車,看PaddlePaddle架構師潘欣如何解答。
以下為潘欣老師演講實錄
藉助傳統程式設計語言理念的全功能深度學習架構
PaddlePaddle是國內唯一的開源深度學習平台,由百度自主研發並具備完全的自主核心技術和智慧財產權,支援從建模、網路、強化學習、語音辨識到最後部署的全部環節,具有易學、易用、安全、高效等特點,是全功能的深度學習架構。
圖一 PaddlePaddle核心架構結構
PaddlePaddle的核心架構,它的整體運行流程是通過API介面組輸入/輸出網路,並在底層做統一轉化,然後通過Runtime進行訓練,最後轉換成線上部署的模型。線上部署分為服務端和移動端,為應對不同體系平台、能耗的要求,我們部署不同的裝置。
其中左側第一層是API介面,它採用Python語言編寫,大致分為兩大類,一類是組網類API,包括控制邏輯、構成邏輯、計算邏輯、IO的模組、讀取資料的模組等;另一類是執行類底層API,把使用者組好的模型進行分析,並將計算方法進行合并最佳化,以此提高訓練速度。
除此之外,對於API的組網,PaddlePaddle還有一些新特性。眾所周知,目前很多的架構是在使用者層暴露出來一個圖的介面,以此進行組網。但我們認為,大多數的程式員更熟悉的是傳統的如變數、block的流式程式的概念,而不是通過一個圖去串連運算元、編寫模型。所以在PaddlePaddle API介面的設計中,我們使用了這些傳統程式設計語言的理念,使得最終編寫更類似於傳統程式設計語言。
組網類API
組網類API包含通用、控制、計算、最佳化、IO等類型的API。
? Variables:PaddlePaddle中的變數,可以是Tensor、 Parameter,或RPCClient。概念類似進階語言中的變數,有不同類型。
? Layers:PaddlePaddle中使用者配置模型的基礎模組,Layer表示一個或者一組緊密關聯的計算,Layers可以通過輸入輸出串連起來。
? Block:Block表示一組連續的計算邏輯,通常是一個或多個順序Layer組成。通常主模型是一個Block0。另外在Control Flow中,比如While、Iflese,也會單獨形成一個子Block。
? Control Flow:PaddlePaddle支援If-else、While、Switch等程式設計語言中常見的Control Flow,以確保模型的靈活表達。Control Flow通常以Block的形式存在。
? Program:包含了1個或者多個Block,表示一個完整的模型執行單元。執行器需要完整的執行Program,並保證讀寫關係符合使用者的預期。
執行類API
樣本
訓練Runtime
多卡並行-SSA Graph
? 將模型Program轉換成一個可並發執行的Intermediate Representation(IR);利用Static Single Assignment為Variable加Version,得到一個正確的依賴關係;Build Pass中插入通訊節點和額外的依賴關係。
? 基於圖依賴的執行:Input ready的所有Operator可以並發執行;Operators在多個GPU上資料並存執行;多卡Gradient彙總,確保資料並行中參數一致。
多卡並行-Profile
多機分布式
多機分布式支援Ring、Pserver兩種模式。
? Ring:自動插入多機Communicator,多機同步訓練,支援高效能RDMA通訊。
? Pserver:拆分成Trainer Program和PserverProgram。支援同步和非同步分布式訓練。Trainer端多線程非同步發送Gradient;Pserver端多線程非同步Apply Optimization。
使用者Focus Modeling, 架構自動多機化部署:
? 發現Optimizer Operators、Parameters、Gradients。
? Split和Assign到Parameter Server上。
? 在Trainer和Parameter Server上插入發送和接收的通訊節點。
? 產生在Trainer執行的Program。
? 產生在Parameter Server執行的Program。
多機分布式的通訊和叢集
? 支援MPI、RPC等通訊方式。
? RPC將來會換成Brpc,並提供原生的RPC+RDMA支援,極大提高通訊效率。
? 支援Kubernetes叢集部署。
多機分布式下的容錯
Trainer或者PserverFailure後可以重啟恢複訓練。即將支援Pserver端的分布式CheckPoint和恢複,支援大規模Embedding。
大規模稀疏資料分布式模型訓練
在互連網情境中,億級的使用者每天產生著百億級的使用者資料,百度的搜尋和推薦系統是大規模稀疏資料分布式模型訓練的主要應用情境。
如何利用這些資料訓練出更好的模型來給使用者提供服務,對機器學習架構提出了很高的要求。主要包括:
? 樣本數量大,單周20T+。
? 特徵維度多達千億甚至萬億。
? T層級,參數大。
? 小時級更新,時效要求高。
註:文中所提架構基於PaddlePaddle 0.14版本,未來,會發出更為穩定的新版本,歡迎大家關注
提問環節
提問:在分布式訓練的時候,有同步和非同步兩種,什麼時候適合用同步,什麼時候適合用非同步?
潘欣:目前沒有機械化的方法確定這個問題,但是有一些經驗可以跟大家分享。如在映像這個領域用同步更穩定,還有最近的翻譯模型,也是通過同步的方法訓練。當然,並不是說同步一定比非同步好。根據過去在公司的經驗,中國的主流其實是非同步,非同步好處是訓練更加可擴充,對於很多傳統NLP任務,非同步比同步要好。所以要驗證這個問題需要在實驗中比較。
實錄結束
潘欣,百度深度學習架構PaddlePaddle的架構設計以及核心模組開發負責人,百度深度學習技術平台部TC主席。在電腦視覺CVPR和雲端運算SoCC等國際會議發表多篇論文。
深度學習高速路上,PaddlePaddle正在彎道超車