天天看點

分布式深度學習架構的前世今生,從 MapReduce 到 Pathways

作者:極市平台

作者丨自由技藝@知乎(已授權)公衆号:那有一束光

來源丨https://zhuanlan.zhihu.com/p/533852982

編輯丨極市平台

分布式深度學習架構目的隻有一個:解決超大模型的訓練問題,主要針對兩種場景:一個具有超大規模的 dense(密集) 參數的模型,比如 NLP、CV 等;另一個是具有超大規模 sparse(稀疏)參數的模型,比如推薦模型。前一種場景重計算,主要采用 GPU 訓練,通信采用 AllReduce 模式,後一種場景重存儲和 I/O(參數讀寫),主要采用的技術是參數伺服器。

1、上古時代的分布式機器學習平台

從早期的 MPI,到後來的 Hadoop,乃至于目前還有使用的 Spark,但是它們都存在一些不足:

  • MPI Gradient Aggregation: 主要缺點是任務求解器的速度不高,無法支撐大規模資料。
  • MapReduce:解決了使用者需要手寫 MPI 程式的麻煩,統一并抽象出了分布式架構,同時解決了 MPI 無法支撐大資料的問題,但無法改進批處理求解器的訓練性能,而且疊代式計算低效、節點間通信低效。
  • GraphLab:2010年由 CMU 的 Select 實驗室提出,它借鑒了 MapReduce 的思想,将 MapReduce 并行計算模型推廣到了對資料重疊性、資料依賴性和疊代型算法适用的領域,填補了 MapReduce 并行計算模型和底層消息傳遞、多線程模型之間的空隙。但對于深度學習中多層網絡結構無法支援。

2、參數伺服器的誕生

參數伺服器(英文名 Parameter Server,又稱 PS)的興起本質上源于深度學習的快速發展,準确地說是為了應付越來越大的神經網絡模型。衆所周知,很多深度學習任務,比如推薦任務、自然語言處理等,都依靠海量參數(十億、百億、甚至千億)來提高模型的拟合能力,同時需要給模型喂入大量訓練資料。對于世界上頂尖的網際網路公司(Facebook、Google、Baidu 等)來說,擷取訓練資料從來都不是難事,它們甚至擁有多達 TB、PB(1TB = 1024GB,1PB = 1024TB)量級的數劇,這樣規模的資料在單機上訓練和預測是明顯不可能的。此外,它們還擁有豐富的計算資源(CPU/GPU/NPU/XPU 叢集)來支援大規模計算。是以,如何有效的利用資料和計算資源,提高模型效率,成為急需解決的問題。于是,參數伺服器應運而生。參數伺服器提供了一條可行解決思路:将資料、訓練參數、OP(執行單元)分散到不同的計算節點上,執行分布式訓練,進而達到快速收斂的效果。

分布式深度學習架構的前世今生,從 MapReduce 到 Pathways

日益膨脹的神經網絡模型

3、參數伺服器的設計要點

  1. 性能:包括存儲能力和計算能力。存儲能力指能充分利用各種存儲媒體,如 SSD、MEM、PMEM、HBM 等,最大化節點的參數存儲能力;計算能力指用盡可能少的硬體資源或者充分利用各種類型的硬體裝置盡可能快地完成訓練任務。
  2. 适用性:能夠支援各種類型的深度學習訓練任務。也就是說,Worker 端支援各種大模型的切分及前向和反向計算;PServer 端支援各種類型參數(如推薦任務中的 Sparse、Dense 參數,定長 embedding 和變長 embedding 等)讀取、寫入和各種梯度更新政策(如 SGD、Adam 等)。
  3. 通信開銷:首先,針對實際應用場景,選取同步或者異步的通訊方式。其次,在異構叢集中,涉及到 CPU 之間、CPU 和 GPU、GPU 之間、以及其他 AI 晶片之間的頻繁資料交換,選擇最優的通信路由是非常必要的。如果能解決通信開銷問題,就能夠堆更多的機器,進而具備更強的計算和存儲能力。
  4. 一緻性:一緻性用來衡量不同節點之間的資料是否一緻。強一緻性意味着不同節點間的同步成本和時延提高。在設計參數伺服器時,考慮到深度學習此類應用對資料一緻性不敏感,是以研究人員可以通過設計寬松的一緻性模型(flexible consistency model),來平衡系統性能和算法收斂。
  5. 彈性:首先是可擴充性,設計參數伺服器需要考慮動态的插入移除某些節點,不能因為某些節點加入,移除或者故障導緻系統重新開機;其次是容錯能力。在分布式叢集中,難免會出現節點故障,是以需要系統能夠快速從非災難性機器故障中恢複。
  6. 易用性和二次開發能力:小白使用者能夠快速上手,這需要參數伺服器對外提供簡潔的調用接口;對于二次開發使用者,能夠根據自己的任務特點定制某些功能,比如新的資料存儲結構、名額計算子產品等等。

4、參數伺服器的發展曆史

分布式機器學習領域,谷歌和百度是最早的參與者,谷歌在 2012 年發表了他們在大規模分布式機器學習的工作,百度鳳巢其實在 2010 年就已經上線了分布式 LR 模型和參數伺服器架構。2013 年開始上線超大規模稀疏 DNN 模型。PaddlePaddle(飛槳)在 2018 年開始支援大規模稀疏參數并對外開源。

第一代:LDA

參數伺服器的概念最早來自于 Alex Smola 于 2010 年提出的并行 LDA(Latent Dirichlet Allocation,隐狄利克雷配置設定模型:是文本挖掘領域(文本主體識别、文本分類以及文本相似度計算等)的一種主題模型,它可以将文檔中每篇文檔的主題按照機率分布的形式給出,同時它是一種無監督學習,在訓練時不需要手工标注的訓練集,需要的僅僅是文檔集以及指定主體的資料量k即可。簡單來說,就是對于每一個主題均可以找出一些詞語來描述它) 架構,它采用 Memcached 分布式存儲參數,提供了有效的機制用于分布式系統中 Worker 之間同步模型參數,而每個 Worker 隻需要儲存其計算時所需要的一小部分參數即可。

分布式深度學習架構的前世今生,從 MapReduce 到 Pathways

LDA 架構

但是,它缺少靈活性和性能 —— 僅使用 Memcached(key, value) 鍵值對存儲作為同步機制。

第二代:DistBelief

分布式深度學習架構的前世今生,從 MapReduce 到 Pathways

SGD Downpour 架構

2012 年 Google 的 Jeff Dean 發表了《Large Scale Distributed Deep Networks》一文。這篇文章不僅提出了 DistBelief 架構(TensorFlow 前身),還同時基于參數伺服器架構(Parameter Server)提出了 Downpour SGD 純異步模式。在取得性能大幅提升的同時,也有非常不錯的效果收益。

實際應用時,TensorFlow 是運作在 Spark上的:Spark Worker 啟動單機版的 Tensorflow 異步計算梯度,周期性把梯度發給 Driver,就是參數伺服器,在彙總多個Worker的梯度後,參數伺服器把梯度資料傳回給 Worker。這種方式的并行實作簡單,但 Driver(參數伺服器)很容易引起網絡通信的開銷進而影響到伸縮性。

Yahoo 也曾經做過類似的工作:讓 Caffe 運作在 Spark 上。

第三代(1):Parameter Server(PS-Lite)

分布式深度學習架構的前世今生,從 MapReduce 到 Pathways

Parameter Server 架構

2014 年,李沐所在的 DMLC 組發表了論文《Scaling Distributed Machine Learning with the Parameter Server》,提出了第三代參數伺服器架構,相比之前的 DistBelief 提供了更加通用的架構:在設計上包含一個Server Group 和若幹個 Worker Group,Server Group 用來做參數伺服器,每個Server Node 存放一個參數分片,由 Server Manager 管理整個 Server Group,維持整個 Server Group 的中繼資料的一緻性視圖,以及參數分片情況。每個 Worker Group 運作一個應用,Worker Node 隻跟 Server Node 通信用來更新參數,Worker Node 之間沒有任何互動。每個 Worker Group 内有一個排程器,負責給 Worker Nodes 配置設定任務以及監控,如果有Worker Node 挂掉或者新加入,排程器負責重新排程剩餘的任務。PS-Lite 針對網絡帶寬的優化主要是針對 Server之間的參數複制提供了采用先聚合再複制的方式:

分布式深度學習架構的前世今生,從 MapReduce 到 Pathways

Replication after Aggregation

Server 之間複制主要是為容錯考慮,是以 Worker 和 Server 之間的資料傳輸仍依賴參數伺服器本身異步機制帶來的帶寬節省:在應用于深度學習時,主要借助于稱作 Delayed Block Proximal Gradient 的方法(包括收斂性證明):每次疊代隻更新一個 block 的參數;Worker 節點計算梯度的同時還需要計算特定坐标的學習速率,即該 block 的二階偏導數的對角線。在資料傳輸時,PS-Lite 還會引入部分定義的 Filter 來避免傳輸對模型影響不大的參數,例如 Random Skip或者KKT Filter,引入這些Filter可以讓傳輸的模型參數量減少十倍以上。

在 Parameter Server 中,每個 PServer 實際上隻負責分到的部分參數(PServer 共同維持一個全局的共享參數,每個 Worker 也隻分到部分資料和處理任務)它具有以下優勢:

  • Efficient Communication:高效的通信。網絡通信開銷是機器學習分布式系統中的大頭,是以 parameter server基本盡了所有的努力來降低網絡開銷。其中最重要的一點就是:異步通信。因為是異步通信,是以不需要停下來等一些慢的機器執行完一個 iter,這就大大減少了延遲;
分布式深度學習架構的前世今生,從 MapReduce 到 Pathways

異步 task

  • Flexible consistency models:寬松的一緻性要求進一步減少了同步的成本和延時。并非所有算法都天然的支援異步和随機性,有的算法引入異步後可能收斂會變慢,是以 parameter server 允許算法設計者根據自身的情況來做算法收斂速度和系統性能之間的權衡 trade-off;
分布式深度學習架構的前世今生,從 MapReduce 到 Pathways

bounded delay

  • Elastic Scalability:使用一緻性雜湊演算法,分布式的 hash 表,使得新的 PServer 可以随時動态插入集合中,無需重新開機訓練任務;
  • Fault Tolerance and Durability:節點故障是不可避免的。在本文中,對于 PServer 節點來說,使用鍊備份來應對;而對于 Worker 來說,因為 Worker 之間互相不通信,是以在某個 Worker 失敗後,新的 Worker 可以直接加入。Vector clocks 保證了經曆故障之後還是能運作良好;
  • Ease of Use:全局共享的參數可以被表示成各種形式:vector、matrices 或是 sparse類型,同時架構還提供對線性代數類型提供高性能的多線程計算庫。

它的具體實作:

  • Vector Clock

使用 range vector clock 來記錄每個節點參數的時間戳,用來跟蹤資料狀态或避免資料重複發送。由于參數都是 Range Push/Range Pull,是以同一個 key range 裡的參數可以共享一個時間戳,相較于傳統的 vector clock 進行了壓縮,降低了記憶體和網絡帶寬開銷。

  • Messages

節點之間通信發送的 message 由 range vector clock 和 <key, value> 對組成。

由于頻繁更新模型參數,需要對 message 進行壓縮以減少網絡帶寬開銷,Parameter Server 采用兩種方法來壓縮 message:

key 的壓縮:訓練資料在疊代時通常不會改變,是以 worker 沒必要每次都發送相同的 key lists,server 第一次接收時緩存起來即可,後續隻需要發送 key lists 的哈希值進行比對。

value 的壓縮:有些參數更新并非對最終優化有價值,是以使用者可以自定義過濾規則來過濾掉一些不必要的參數。例如對于梯度下降,大量 value 為 0 或者很小的梯度是低效的,可以過濾。

  • 在資料一緻性上使用一緻性雜湊演算法,參數 key 和 server id 被插入到哈希環中,有兩種方式保證了主節點和備份節點之間的資料一緻性:
    • Chain Replication
    • Repiication after Aggregation
  • Server 管理
    • 添加 server:server manager 給新 server 配置設定 key range,其他 server 的 key range 做出相應更改;新 server 擷取作為主 server 維護的 key range 和作為從 server 維護的 k 個 key range;server manager 廣播節點的更改;
    • 删除 server:當 server manager 通過心跳信号發現 server 出現故障後,會将該 server 的 key range 配置設定給新的 server,并删除該 server
  • Worker 管理
    • 添加 woker:task scheduler 給新 worker 配置設定資料;該新 worker 載入訓練資料,然後從 server 擷取參數;task scheduler 廣播節點的更改,可能造成其他 worker 釋放部分訓練資料
    • 删除 woker:丢失小部分訓練資料通常并不會影響模型訓練結果,此外恢複一個 worker 比 server 需要更多的開銷。是以删除 worker 通常是直接不管該節點,可以用于終止最慢的 worker,減緩 Straggler 帶來的性能影響。當然使用者也可以選擇用新 worker 來替代丢失的 worker。
  • 異步任務

異步梯度更新的方式雖然大幅度加快了訓練速度,但是帶來了模型的一緻性喪失,也就是說并行訓練的結果與原來的單點串行的訓練結果是不一緻的,這樣的不一緻性會對模型的收斂速度造成了一定的影響。是以最終選取同步更新還是異步更新取決于不同模型對于一緻性的敏感程度。這類似于一個模型超參數選取的問題,需要針對具體問題進行具體的驗證。

bounded delay 模型:設定一個最大延時事件,稱之為 staleness 值,允許一定程度的任務進度不一緻,即最快的任務最多領先最慢的任務 staleness 輪疊代。是以 staleness = 0 時,即 Sequential 一緻性模型(也稱 BSP,bulk synchronous parallel,嚴格同步);當 staleness = ∞ 時,即 Eventual 一緻性模型(也稱 SSP, staleness synchronous parallel,純異步)

第三代(2):SINGA 架構

該系統包含若幹個 Server Group 和 Worker Group。每個 Server Group 維護完整的模型參數,相鄰的 Server Group 定期同步模型參數。每個 Worker Group 負責計算,在資料并行中,每個 Worker Group 負責一個訓練資料的分片,所有的 Worker Group 節點跟Server Group之間異步通信,然而在 Worker Group 内部,則是同步處理SINGA值得稱道之處在于同時支援資料并行和模型并行,以及混合并行(兩種并行的組合),在模型并行時,每個Worker Group 隻負責更新部分模型參數。

分布式深度學習架構的前世今生,從 MapReduce 到 Pathways

SINGA 的架構非常靈活,可以根據需要滿足不同模式的分布式計算,除了類似 DownpourSGD 的結構之外,還可以配置成 AllReduce,Sandblaster,Distributed Hogwild 等不同範式。

在采用 SINGA 訓練深度學習模型時,需要根據模型特點決定如何采用資料并行和模型并行,進而減少網絡帶寬造成的瓶頸,例如選取具有低維特征的神經網絡層作為 Worker Group 的邊界,減少 Worker 之間的資料傳輸;選取神經網絡層之間依賴小的部分應用模型并行等。憑借多樣化的并行機制。

第三代(3):CNTK

微軟的 CNTK 隻提供資料并行,它采用參數伺服器模型實作了一種稱為 1-Bit Quantized SGD 的算法,其目的就是用于節約帶寬,其主要思想是壓縮梯度的表示到隻用 1bit,把殘差帶到下一次的 minibatch 中。相比用浮點數(32位)表示梯度值,1-Bit SGD 相當于節約了 30 多倍的傳輸帶寬。

第三代(4):Poseidon

這來自 CMU 另一個機器學習研究小組 Eric Xing 教授的項目 Petuum。

分布式深度學習架構的前世今生,從 MapReduce 到 Pathways

上圖中的 Server 就相當于 DownpourSGD 的 Master,Clients 則相當于 Worker。與 DownpourSGD 相比,Poseidon 差異在于:首先,在每個 Worker 節點上增加了額外的一層,允許單節點運作多個線程任務,這主要是針對多 CPU 核和多 GPU 卡的設計,友善任務線程綁定到 1 個 CPU 核或者 1 張 GPU 卡。其次,Poseidon 不僅允許 Master 和 Worker 之間的參數更新,還允許不同的 Worker 之間通信。為了減少網絡開銷,Poseidon 做了如下工作:

  1. 引入Wait-free BP算法。BP 算法是神經網絡裡最基本的算法,在後向傳播過程中,誤差資訊從神經網絡的頂層一直傳播到底層。每次疊代,每個 Worker 分别進行BP算法,隻有當傳播到達底層時,每個 Worker 才開始通信,把本地的參數更新發送到 Master 然後等待 Master 聚合各節點梯度後傳回。以下圖來表示如下,其中 push 和 pull 就是跟參數伺服器 Master 之間的互動。
分布式深度學習架構的前世今生,從 MapReduce 到 Pathways
分布式深度學習架構的前世今生,從 MapReduce 到 Pathways

2. 引入SACP(Structured-Aware Communication Protocol)協定。這個協定一看名字就是專門針對帶寬消耗設計的。該協定是專門針對矩陣型參數的機器學習模型來設計的——深度學習的參數就是典型的矩陣結構。以AlexNet 為例,兩個 FC 全連接配接層 FC6 和 FC7 之間的參數權重就是個 4096*4096 的矩陣。每次疊代時,都需要在Master 和 Worker 之間交換這樣 2 個矩陣。随着模型和叢集的增大,交換的參數矩陣會更加龐大。為減少帶寬消耗,首先,Poseidon 引入 Worker 之間的通信,稱為 SFB(Sufficient Factor Broadcasting)。在 Worker 和Master 之間傳遞的矩陣參數 ∇W,可以通過矩陣分解寫為 ∇W =uv',u,v' 就是所謂 Sufficient Factor,而 u,v' 可以通過直接從 Worker 節點之間的通信中獲得,通過把矩陣轉化為向量,減少了通信開銷。随着叢集節點的增多,這種手段也會帶來副作用,因為 P2P 通信的成本會上升。

基于此 Poseidon 提出了 SACP 協定本身,這是一個混合 Master/Worker 之間通信和 SFB 的方案,它會動态決定是選取前者還是後者來進行參數交換,是以,在前邊的Poseidon框圖裡我們看到了Bandwidth Manager,就是起這個作用。

是以,從設計上,我們可以看到基于 Petuum 的 Poseidon 為網絡帶寬消耗做了大量優化。在随後 Eric Xing 團隊的進一步的工作中又提出了專門針對 GPU 叢集的參數伺服器,其目的主要在于讓參數伺服器更有效利用 GPU 顯存。

第四代:百花齊放

随着深度學習的研究越來越深入,它的應用場景越來越廣泛,模型種類越來越多,模型規模越來越大。各個廠商開始将參數伺服器廣泛應用到自家的業務上,也對參數伺服器在功能、易用性、性能上做了各種各樣的改進。

  • 2017 年 Uber 開源了 Horvod,它以 Tensorflow 為基礎,CPU PS 并無什麼特色,GPU PS 采用了百度的 Tensorflow ring-allreduce 算法實作,它最大的特點是彈性:包括節點發現、容錯、Worker 生命周期管理。
  • 2017 年騰訊基于 Angel 的 LDA* 對傳統的 LDA 進行了兩個針對性優化,使得它有廣泛的适用性和良好的性能,成為一個大規模的高性能主題模型系統:
    • 吉布斯采樣(Hybrid Sampler)
    • 非對稱架構:将一部分長尾詞語的采樣推送到 PServer 端進行,進而避免了對詞 - 話題矩陣的拉取操作。由于在這樣的架構中,PSServer 不僅僅作為一個分布式存儲,還參與了一定的計算任務,進而某種程度上實作了模型并行。
分布式深度學習架構的前世今生,從 MapReduce 到 Pathways

非對稱參數伺服器

  • 2018 年阿裡以 tensorflow 為基礎,針對高緯稀疏場景問題做了個适配,開源了 X-Deep Learning 系統。它有如下幾點特色:
    • IO 優化:多項字首樹(在商業場景中,不同的訓練樣本有很多重複的特征,例如,使用者在同一屏的多條曝光記錄,item 不同,但是 use r特征是相同的)
    • pipeline:XDL 每一輪疊代可以分為三個階段:第1階段,讀取訓練樣本,并轉化為 mini-batch;第2階段,PServer 側預先抓取參數索引;第3階段,Worker 拉取模型參數,進行前後向的計算。為了加快訓練速度,提升吞吐率,XDL 通過多線程技術,将相鄰的疊代中不同的階段在時間上重疊起來。
    • 特征準入和淘汰(樣本準入和淘汰)
  • Facebook 在 2019 年發表了一篇論文講DLRM模型《Deep Learning Recommendation Model for Personalization and Recommendation Systems》。它基于 pytorch 和 caffe2 實作。在 embedding table的模型并行模式上實作了一種特殊的并行範式(butterfly shuffle)。同時,這篇論文将這種并行模式運作在Facebook 的超級 AI 計算機 Big Basin 平台上。
分布式深度學習架構的前世今生,從 MapReduce 到 Pathways

蝶形 shuffle

  • 2019 年阿裡推出 PAI Tensorflow(阿裡雲優化的商業版 Tensorflow),它支援的功能包括:靜态特征回填(新上線特征);實時樣本拼接;embedding variable 功能。這個功能提供動态的彈性特征的能力。每個新的特征會新增加一個 slot。并支援特征淘汰,比如說下架一個商品,對應的特征就會被删掉;實時訓練模型校正;模型回退及樣本回放。
  • 2019 年位元組跳動開源 BytePS,它繼承了許多加速技術,比如分層政策、流水線、張量分區、NUMA 感覺本地通信、基于優先級的排程等等。還提出了 BytePS ring-allreduce 方案:一是引入 CPU 節點,用于 ReduceScatter 操作;二是 ReduceScatter 和 AllGather 異步執行,進而縮短了資料傳輸時間開銷。本質上還是通過引入 CPU Server,相當于額外增加一張網卡。
分布式深度學習架構的前世今生,從 MapReduce 到 Pathways

BytePS 架構

  • 2020 年 360 公司開源了 TensorNet,該系統是針對 tensorflow 開發的輕量級 PS,支援 tf2.2 及以後的版本,TensorNet 能支援到百億特征規模,它通過引入 virtual sparse feature,由原來直接從 parameter server 查找稀疏特征變為二級查找。TensorNet将每個batch 的特征 ID 從 0 開始重新編排作為輸入,這樣輸入特征的 index 分布在 [0, 1024) 之間;同時根據原始的特征 ID 從 server 拉取對應的 embedding 向量,填充到 tensorflow 的 embedding 矩陣中,這樣每個特征 field/slot 的 embedding 矩陣大小就隻有 1024 x embedding_size.
分布式深度學習架構的前世今生,從 MapReduce 到 Pathways

TensorNet

  • 2021 年美團公開釋出了它們在分布式訓練優化這塊的一些實踐,它基于 tensorflow1.x 接口,具體有以下幾點:
    • 将所有稀疏參數和大的稠密參數自動、均勻的切分到每個 server 上
    • 通信優化:采用 RDMA 通信方式,使用 RoCE V2 協定優化
    • 隻對那些涉及到跨節點通信的 Tensor 進行 Memory Regisitration,其餘 Tensor 并不注冊到 MR
    • RDMA靜态配置設定器
    • Multi RequestBuffer 與 Completion Queue 負載均衡優化
    • Send-Driven & Rendezvous-Bypass
    • 稀疏域參數聚合
    • 選用高性能 tbb::concurrent_hash_map
    • 改造了 tensorflow 原生算子:Unique 和 Dynamic Partition 算子
  • 2021年,Facebook 又推出了針對深度學習推薦模型(DLRM)的高性能分布式訓練架構,它是一種基于 PyTorch 的高性能可擴充軟體棧,并将其與 Zion 平台的新改進版本 ZionEX 配對。它能訓練具有多達12萬億個參數的超大型DLRM的能力,并表明與以前的系統相比,時間上實作40倍的加速。具體手段包括:(i)設計具有專用橫向擴充網絡,配備高帶寬,最佳拓撲和高效傳輸的ZionEX平台來實作這一目标(ii)實施支援模型和資料并行性的基于PyTorch的優化訓練堆棧(iii)開發分片能夠按行,列次元對嵌入表進行分層劃分并在多個工作程式之間實作負載均衡的算法;(iv)增加高性能的核心營運商,同時保留靈活性,以通過完全确定的更新來支援優化器(v)利用降低的精度通信,多層記憶體層次結構(HBM + DDR + SSD)和流水線技術。此外,還針對在生産環境中進行強大而有效的端到端教育訓練所需的分布式資料攝取和其他支援服務進行了開發。
分布式深度學習架構的前世今生,從 MapReduce 到 Pathways

DLRM 高性能彈性訓練架構

5、百度飛槳開源參數伺服器架構

從參數伺服器的發展曆程可以看出,大部分廠商都是在 tensorflow 或者 pytorch 提供的原生分布式訓練架構基礎上,要麼改造,要麼實作了一個新的 PServer,它們并沒有自家的深度學習架構。而促進參數伺服器不斷更新、優化、發展則取決于四大要素:

  • Worker 端能力
  • PServer 端能力
  • 業務場景豐富性及功能驗證
  • AI 硬體(晶片)

而百度同時具備這四大要素,這是它天然的優勢。PaddlePaddle(飛槳)開源的參數伺服器支援四種模式:CPUS PS、GPU PS、Heter PS 和 Pipeline PS,其特色有:

分布式深度學習架構的前世今生,從 MapReduce 到 Pathways

Paddle PS 存儲設計

  • 通用的大規模離散模型訓練架構,支援多種業務場景
  • 支援同步、異步、Geo 三種通信方式
  • 相比 Byte-PS、美團 PS 中建立各種 PUSH、PULL Queue 的方式,Paddle PS 支援異步 Task 模式(更高效流水線架構),減少了線程間通信開銷,效率更高
  • 支援 Worker 端參數 key 各種 merge 操作,降低 Worker 和 PServer 之間通信頻率
  • 支援 SSD、HBM、MEM、PMEM 等多級存儲結構及高效訪存(軟、硬體創新)
  • 針對大規模稀疏參數和稠密參數,分别定義對應的 Table 類型及高效的 Table 通路(Accessor)方式
  • 支援線上流式訓練
  • 資料讀取支援 graph db、kafka、tfrecord、odps 等各種資料源
  • 支援多種 AI 晶片,如 GPU、華為昇騰、百度昆侖等
  • 豐富的名額計算子產品
  • 支援特征準入、特征淘汰
  • 在網卡拓撲、通信協定等方面進行了軟硬體一體的整體設計,超高的多機通信效率
  • 支援 debug 單特征/組合特征重要度、輸入樣本聚合、分 tag(ins)列印 auc、定制化的優化器、支援變長 embedding 等
  • 百度自研的高效 brpc 通信
  • 等等
分布式深度學習架構的前世今生,從 MapReduce 到 Pathways

異構參數伺服器異步task模式

分布式深度學習架構的前世今生,從 MapReduce 到 Pathways

Geo 異步訓練模式

目前百度在廣告/推薦/推薦/電商場景中都是使用 PaddlePaddle 做訓練和預估,離線訓練也是在多機上做 PS 分布式訓練。

在工業場景中部署 PS 時,要利用 K8S 在叢集上進行排程。先是将訓練所依賴的 PaddlePaddle 環境打包成鏡像,存放在鏡像倉庫中,如果訓練環境更新,隻需要打包新的鏡像,并在訓練開始之前指定相應的鏡像即可,環境的管理比較友善。每次訓練的時候,将所需鏡像下載下傳到多個實體機上,然後在實體機上建立容器,并配置環境變量,在容器中建立 Worker 和 PServer 程序開始訓練。

每台實體機上有一個 Worker 程序,每個 Worker 程序會建立幾十個線程,所有線程同時從 hdfs 上讀取資料并進行前後向計算,所有線程各自跑各自的,互不依賴。另外,每台實體機上至少有一個 PServer 程序,具體程序數取決于模型的大小。PServer 和 Worker 部署在一起,減少了跨實體機之間的通信,也是為了降低通信成本;另外 PServer 偏記憶體型任務,主要消耗記憶體,Worker 偏計算型任務,主要消耗 CPU,部署在一起也有利于提高資源使用率。

6、下一代分布式訓練架構:Pathways

PServer 端将支援多種參數管理政策;每個 Worker 和 PServer 都将是一個無狀态的服務,可以更加友善地進行容錯和彈性擴縮容;結合 Paddle 架構自動并行能力,能夠感覺全局的存儲、計算和通信能力,并按照最優政策自動執行任務切分和放置;可以應用架構本身的各種優化的 pass 政策,最大程度加快計算圖的執行速度。

【論文深度解析】Pathways: Asynchronous Distributed Dataflow for ML

https://zhuanlan.zhihu.com/p/497461172

參考文獻

[1] Strategies and Principles of Distributed Machine Learning on Big Data, Eric P. Xing, Qirong Ho, Pengtao Xie, Wei Dai.arXiv:1512.09295 (2015)

[2] https://github.com/adatao/tensorspark

[3]https://github.com/tensorflow/tensorflow/tree/master/tensorflow/core/distributed_runtime

[4] Poseidon: A System Architecture for Efficient GPU-based Deep Learning on Multiple Machines, Zhang, Hao and Hu, Zhiting and Wei, Jinliang and Xie, Pengtao and Kim, Gunhee and Ho, Qirong and Xing, Eric, arXiv preprint arXiv:1512.06216

[5] GeePS: Scalable deep learning on distributed GPUs with a GPU-specialized parameter server, Cui, Henggang and Zhang, Hao and Ganger, Gregory R and Gibbons, Phillip B and Xing, Eric P, Proceedings of the Eleventh European Conference on Computer Systems, 2016

[6] https://github.com/yahoo/CaffeOnSpark

[7] Deep Learning At Scale and At Ease, Wang, Wei and Chen, Gang and Chen, Haibo and Dinh, Tien Tuan Anh and Gao, Jinyang and Ooi, Beng Chin and Tan, Kian-Lee and Wang, Sheng, arXiv preprint arXiv:1603.07846

[8] https://blog.twitter.com/2016/distributed-learning-in-torch

[9] Deep learning with Elastic Averaging SGD, Sixin Zhang, Anna Choromanska, Yann LeCun, arXiv preprint arXiv:1412.06651

[10] Communication Efficient Distributed Machine Learning with the Parameter Server, Li, Mu and Andersen, David G and Smola, Alex J and Yu, Kai, NIPS 2014

[11] 1-bit stochastic gradient descent and its application to data-parallel distributed training of speech DNNs, Seide, Frank and Fu, Hao and Droppo, Jasha and Li, Gang and Yu, Dong, INTERSPEECH 2014

[12] SINGA:SINGA Architecture

[13] NuPS: A Parameter Server for Machine Learning with Non-Uniform Parameter Access: https://arxiv.org/pdf/2104.00501.pdf

[14] 頂級 AI 學者邢波教授:機器學習缺乏清晰理論與工程架構,需重新思考評估方法及目标: 新聞公告-中國科學院自動化研究所圖書館

[15] Simplifying and Automating Parallel Machine Learning via a Programmable and Composable Parallel ML System: https://sites.google.com/view/aaai-2021-tutorial-ah9/home

[16] 增大模型依然有用:增大模型依然有用,DeepMind用2800億參數的Gopher,測試語言系統極限

[17] Distributed Hierarchical GPU Parameter Server for Massive Scale Deep Learning Ads Systems: https://mlsys.org/media/Slides/mlsys/2020/balla(02-08-00)-02-09-40-1408-distributed_hie.pdf)

[18] 推薦系統中稀疏參數的通信優化:http://wiki.baidu.com/pages/viewpage.action?pageId=1083510050

[19] 變長 embedding:曾凡喜:推薦系統中不同 embedding 特征設定不同長度的實踐

[20 ]FleetX ParameterServer訓練:https://fleet-x.readthedocs.io/en/latest/paddle_fleet_rst/parameter_server/ps_quick_start.html

[21] High-performance, Distributed Training of Large-scale Deep Learning Recommendation Models:https://ask.qcloudimg.com/draft/8380959/0l3pp3qlf9.pdf

[22] TensorFlow在推薦系統中的分布式訓練優化實踐: TensorFlow在推薦系統中的分布式訓練優化實踐

[23] Scaling Distributed Machine Learning with the Parameter Server: https://www.cs.cmu.edu/~muli/file/parameter_server_osdi14.pdf

[24] Scaling Distributed Machine Learning with the Parameter Server 解讀:皮皮卡:[OSDI'14] Scaling Distributed Machine Learning with the Parameter Server

[25] 一文讀懂「Parameter Server」的分布式機器學習訓練原理: 王喆:一文讀懂「Parameter Server」的分布式機器學習訓練原理

[26]【深度學習分布式】Parameter Server 詳解:仙道菜:【深度學習分布式】Parameter Server 詳解

[27] Parameter Server分布式訓練概述(下篇): 張備:Parameter Server分布式訓練概述(下篇)

[28] https://github.com/bytedance/byteps

[29] A Unified Architecture for Accelerating Distributed DNN Training in Heterogeneous GPU/CPU Clusters:https://www.usenix.org/system/files/osdi20-jiang.pdf

[30] Deep Learning Recommendation Model for Personalization and Recommendation Systems: https://arxiv.org/pdf/1906.00091.pdf

[31] 2017 年基于騰訊 Angel 的 LDA* 入選 VLDB,超越微軟的 LightLDA: 基于騰訊Angel的LDA*入選VLDB,超越微軟LightLDA_騰訊_騰訊開源團隊_InfoQ精選文章

[32] Horovod: fast and easy distributed deep learning in TensorFlow: https://arxiv.org/pdf/1802.05799.pdf

[33] [源碼解析] 深度學習分布式訓練架構 horovod (14) --- 彈性訓練發現節點 & State: [源碼解析] 深度學習分布式訓練架構 horovod (14) --- 彈性訓練發現節點 & State

[34] Large Scale Distributed Deep Networks:https://www.cs.toronto.edu/~ranzato/publications/DistBeliefNIPS2012_withAppendix.pdf

繼續閱讀