百度技術沙龍第67期 百度開源專場

本文做者:HelloDevelopergit

具體的產品案例,分享百度開源技術最新實踐經驗。目前這些項目都已經在 github/baidu 上開源。github

什麼是 PaddlePaddle 深度學習平臺?

首先作個簡單的介紹,PaddlePaddle 是百度自主研發的性能優先、靈活易用的深度學習平臺,是一個已經解決和將要解決一些實際問題的平臺。目前百度有超過30個主要產品都在使用 PaddlePaddle。關於機器學習、深度學習和淺層學習的內容就不詳細介紹了,接下來重點講述一下 PaddlePaddle 的總體架構。數據庫

關於 PaddlePaddle 總體架構服務器

說到 PaddlePaddle 的總體架構,主要從這幾個方面入手:多機並行架構、多 GPU 並行架構、Sequence 序列模型和大規模稀疏訓練。多機的並行架構和序列模型的實現都是實現神經網絡最複雜的東西,那麼具體怎麼實現全鏈接?網絡

PaddlePaddle 是2013年啓動時比較流行的架構是 Pserver 和 Trainer 的架構。在多機並行架構中數據分配到不一樣節點,下圖裏灰色部分表示機器,方框裏表示一個進程,Pserver 和 Trainer 是分佈在兩個進程裏,中間的部分是網絡通信鏈接。架構

下面來介紹一下什麼是大規模稀疏模型訓練。稀疏模型訓練是說輸入數據是稀疏的,因爲稀疏輸入,那麼灰色的神經元和鏈接在訓練中都沒有做用,灰色神經元的輸出是0,灰色鏈接的梯度是0,梯度是0的話,簡單的 SGD 不更新權重。因此只有藍色的鏈接有價值,須要從 PServer 服務器得到最新參數,須要計算梯度,並將梯度傳送回參數服務器。(以下圖)負載均衡

除了上面所提到的,還有兩外兩種狀況下的稀疏模型:框架

  • 大規模稀疏模型(多機器)——每一個 Trainer Prefetch 出自身須要的參數和服務器通訊。機器學習

  • 大規模稀疏模型(正則化)——簡單的 SGD 確實在梯度爲0的時候,不去更新參數,可是加上正則化就不必定了;好比L2正則化,就要求參數的2範數持續減少。分佈式

PaddlePaddle 實現時的一些思考

基於 OP(操做)仍是基於 Layer(層)?

  • 基於 OP——從矩陣乘法配起,一步一步對應一個一個數學運算。

  • 基於層——直接寫一個全鏈接層,LSTM 層。

  • 基於 OP 的優點 Tensorflow——更靈活,更可讓研究人員構造新的東西

  • 基於 Layer 的優點 Caffe——更易用,讓細節暴露的更少;更容易優化。

基於 OP 仍是基於 Layer?——支持大部分 Layer,可是也支持從 OP 開始配網絡(矩陣乘發,加法,激活等等);對於成型的 Layer(LSTM)使用 C++從新優化。緣由在於,PaddlePaddle 是企業解決現有問題的框架,不是純粹的科研框架;企業須要性能,也須要靈活性。

多機通訊基於 MPI 仍是 Spark 仍是 K8s + Docker?PaddlePaddle 底層通訊不依賴於任何網絡框架,PaddlePaddle 的網絡任務需求相對簡單,根源在於任務週期短(連續運行幾周);任務能夠失敗(多存checkpoint)。同時,PaddlePaddle 的網絡須要高性能,從頭手寫網絡庫更方便性能調優,RDMA 能夠更好的支持。同理,PaddlePaddle 底層不依賴任何 GPU 通訊框架。

百度搜索開源基礎架構

顏世光是百度搜索基礎架構負責人,在此次沙龍上介紹了百度當前的這套搜索引擎,以及搜索引擎背後的事件。重點部分是百度這套開源的基礎架構軟件站,它包括分佈式數據庫、文件系統、管理系統、分佈式協調服務、網絡通訊框架。下面來一一介紹。

當前,用戶經過互聯網搜索引擎的指望在不斷的變化,整個搜索引擎的指望從以前的幾周變成如今的幾分鐘,以前幾周以內能夠處理幾百億的數據,如今要在幾分鐘以內處理幾萬億的數據,這是個鮮明的矛盾。其實解決方案就是構建一個大數據處理平臺,也稱之爲「基礎架構系統」。這個基礎架構系統目標首先是海量的目標數據。其次就是在於集羣利用率的保證,這個利用率多是 CPU 利用率,它會爲你節省成本。

這裏能夠簡單介紹一下百度內從事開發的平臺——baidu stack(如上圖)。這個平臺分三層,最的底層是網絡通信,是一個高性能的 RPC 框架,它會把全部的網絡問題屏蔽掉,讓上層的系統在開發中不須要考慮網絡拓撲。中間一層是基礎服務,包括分佈式文件系統,它解決了數據處理。

第二就是集羣管理系統,它管理的數據可讓程序部署變得代價很小。第三是分佈式的協調服務,一方面用作服務發現,另外就是分佈式。最上層是核心數據庫和數據處理系統。

在理解上能夠將這套系統和 Hadoop 相關的系統類比。從中間這層提及,Hadoop 有 HDPS,Hadoop 在分佈式服務這塊使用 Cukaber,好比也有 Storm、Spark 這些。整個基礎架構系統的設計思想有兩個,第一是分層。不管是 Hadoop 系仍是谷歌,他們都使用相似的思想,這個思想主要是分工和借用,讓不一樣分工解決不一樣問題。

另一個思想就是高效,解決用戶對處理速度的指望。百度主要使用 SSD、萬兆網卡,這套分佈式基礎架構徹底是用 C++實現的。首先是核心的數據庫 Tera,這裏列了 Tera 數據庫的核心功能,包括全局有序、自動分裂、合併、支持快照。

Tera 的架構能夠看(如上簡圖),從圖上咱們能夠看到它有核心就是綠色兩部分,是 Master 和 TableServer,提供整個數據節點都是 TableServer,全部的訪問通過 Master,讓它擴展到幾千臺服務器中。

灰色的底層數據都是在分佈式文件系統上,自身沒有任何數據,被設計成無狀態,當一個 TableServer 宕機後,會從另一個機器拉取數據,不會有任何損失。一樣底層的分佈式文件系統能夠提供很大的幫助,它是經過 Nexus 作的。

這裏簡單介紹一下 Tera 的核心技術。⽔水平擴展方面能作到無單點;在線分裂、合併;⾃自動負載均衡;經過 LSM-Tree 作到實時同步,而且 Tera 還具備多語言支持的特色。Tera 在百度內部有很是普遍的應用,例如百度的網頁庫, 百度將萬億量級的網頁存儲在 Tera 中。

這裏再介紹一下如上圖的百度文件處理系統(BFS),不只在百度,BFS 在外部的使用價值也是很高的。那麼 BFS 具備哪些特色呢?首先是持續可⽤:分佈式 Master,多機房數據冗餘。其次就是實時高吞吐:慢節點處理,元數據管理。

原文連接地址:https://developer.baidu.com/topic/show/290220

相關文章
相關標籤/搜索