吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Google GPipe為代表的流水線并行范式

jf_pmFSk4VX ? 來源:GiantPandaCV ? 2023-05-26 14:40 ? 次閱讀

在上一篇的介紹中,我們介紹了以Google GPipe為代表的流水線并行范式。當模型太大,一塊GPU放不下時,流水線并行將模型的不同層放到不同的GPU上,通過切割mini-batch實現對訓練數據的流水線處理,提升GPU計算通訊比。同時通過re-materialization機制降低顯存消耗。

但在實際應用中,流水線并行并不特別流行,主要原因是模型能否均勻切割,影響了整體計算效率,這就需要算法工程師做手調。因此,今天我們來介紹一種應用最廣泛,最易于理解的并行范式:數據并行。

數據并行的核心思想是:在各個GPU上都拷貝一份完整模型,各自吃一份數據,算一份梯度,最后對梯度進行累加來更新整體模型。理念不復雜,但到了大模型場景,巨大的存儲和GPU間的通訊量,就是系統設計要考慮的重點了。在本文中,我們將遞進介紹三種主流數據并行的實現方式:

DP(Data Parallelism):最早的數據并行模式,一般采用參數服務器(Parameters Server)這一編程框架。實際中多用于單機多卡

DDP(Distributed Data Parallelism):分布式數據并行,采用Ring AllReduce的通訊方式,實際中多用于多機場景

ZeRO:零冗余優化器。由微軟推出并應用于其DeepSpeed框架中。嚴格來講ZeRO采用數據并行+張量并行的方式,旨在降低存儲。

本文將首先介紹DP和DDP,在下一篇文章里,介紹ZeRO。全文內容如下:

1、數據并行(DP)

1.1 整體架構

1.2 通訊瓶頸與梯度異步更

2、分布式數據并行(DDP)

2.1 圖解Ring-AllReduce

2.2 DP與DDP通訊分析

推薦閱讀: 圖解大模型訓練之:流水線并行,以GPipe為例

一、數據并行(DP)

1.1 整體架構

8c209392-fb83-11ed-90ce-dac502259ad0.png

一個經典數據并行的過程如下:

若干塊計算GPU,如圖中GPU0~GPU2;1塊梯度收集GPU,如圖中AllReduce操作所在GPU。

在每塊計算GPU上都拷貝一份完整的模型參數。

把一份數據X(例如一個batch)均勻分給不同的計算GPU。

每塊計算GPU做一輪FWD和BWD后,算得一份梯度G。

每塊計算GPU將自己的梯度push給梯度收集GPU,做聚合操作。這里的聚合操作一般指梯度累加。當然也支持用戶自定義。

梯度收集GPU聚合完畢后,計算GPU從它那pull下完整的梯度結果,用于更新模型參數W。更新完畢后,計算GPU上的模型參數依然保持一致。

聚合再下發梯度的操作,稱為AllReduce。

前文說過,實現DP的一種經典編程框架叫“參數服務器”,在這個框架里,計算GPU稱為Worker,梯度聚合GPU稱為Server。在實際應用中,為了盡量減少通訊量,一般可選擇一個Worker同時作為Server。比如可把梯度全發到GPU0上做聚合。需要再額外說明幾點:

1個Worker或者Server下可以不止1塊GPU。

Server可以只做梯度聚合,也可以梯度聚合+全量參數更新一起做在參數服務器的語言體系下,DP的過程又可以被描述下圖:

8c2f5558-fb83-11ed-90ce-dac502259ad0.png

1.2 通訊瓶頸與梯度異步更新

DP的框架理解起來不難,但實戰中確有兩個主要問題:

存儲開銷大。每塊GPU上都存了一份完整的模型,造成冗余。關于這一點的優化,我們將在后文ZeRO部分做講解。

通訊開銷大。Server需要和每一個Worker進行梯度傳輸。當Server和Worker不在一臺機器上時,Server的帶寬將會成為整個系統的計算效率瓶頸。

我們對通訊開銷再做詳細說明。如果將傳輸比作一條馬路,帶寬就是馬路的寬度,它決定每次并排行駛的數據量。例如帶寬是100G/s,但每秒卻推給Server 1000G的數據,消化肯定需要時間。那么當Server在搬運數據,計算梯度的時候,Worker們在干嘛呢?當然是在:

8c3a625e-fb83-11ed-90ce-dac502259ad0.png

人類老板不愿意了:“打工系統里不允許有串行存在的任務!”,于是梯度異步更新這一管理層略誕生了。

8c4dc95c-fb83-11ed-90ce-dac502259ad0.png

上圖刻畫了在梯度異步更新的場景下,某個Worker的計算順序為:

在第10輪計算中,該Worker正常計算梯度,并向Server發送push&pull梯度請求。

但是,該Worker并不會實際等到把聚合梯度拿回來,更新完參數W后再做計算。而是直接拿舊的W,吃新的數據,繼續第11輪的計算。這樣就保證在通訊的時間里,Worker也在馬不停蹄做計算,提升計算通訊比

當然,異步也不能太過份。只計算梯度,不更新權重,那模型就無法收斂。圖中刻畫的是延遲為1的異步更新,也就是在開始第12輪對的計算時,必須保證W已經用第10、11輪的梯度做完2次更新了。

參數服務器的框架下,延遲的步數也可以由用戶自己決定,下圖分別刻劃了幾種延遲情況:

8c542a9a-fb83-11ed-90ce-dac502259ad0.png

(a) 無延遲

(b) 延遲但不指定延遲步數。也即在迭代2時,用的可能是老權重,也可能是新權重,聽天由命。

(c) 延遲且指定延遲步數為1。例如做迭代3時,可以不拿回迭代2的梯度,但必須保證迭代0、1的梯度都已拿回且用于參數更新。

總結一下,異步很香,但對一個Worker來說,只是等于W不變,batch的數量增加了而已,在SGD下,會減慢模型的整體收斂速度。異步的整體思想是,比起讓Worker閑著,倒不如讓它多吃點數據,雖然反饋延遲了,但只要它在干活在學習就行。

batch就像活,異步就像畫出去的餅,且往往不指定延遲步數,每個Worker干越來越多的活,但模型卻沒收斂取效。讀懂分布式訓練系統其實也不難。

二、分布式數據并行(DDP)

受通訊負載不均的影響,DP一般用于單機多卡場景。因此,DDP作為一種更通用的解決方案出現了,既能多機,也能單機。DDP首先要解決的就是通訊問題:將Server上的通訊壓力均衡轉到各個Worker上。實現這一點后,可以進一步去Server,留Worker。

前文我們說過,聚合梯度 + 下發梯度這一輪操作,稱為AllReduce。接下來我們介紹目前最通用的AllReduce方法:Ring-AllReduce。它由百度最先提出,非常有效地解決了數據并行中通訊負載不均的問題,使得DDP得以實現。

2.1 Ring-AllReduce

如下圖,假設有4塊GPU,每塊GPU上的數據也對應被切成4份。AllReduce的最終目標,就是讓每塊GPU上的數據都變成箭頭右邊匯總的樣子。

8c5d6b00-fb83-11ed-90ce-dac502259ad0.png

Ring-ALLReduce則分兩大步驟實現該目標:Reduce-Scatter和All-Gather

Reduce-Scatter

定義網絡拓撲關系,使得每個GPU只和其相鄰的兩塊GPU通訊。每次發送對應位置的數據進行累加。每一次累加更新都形成一個拓撲環,因此被稱為Ring。看到這覺得困惑不要緊,我們用圖例把詳細步驟畫出來。

8c67afe8-fb83-11ed-90ce-dac502259ad0.png8c76b006-fb83-11ed-90ce-dac502259ad0.png

一次累加完畢后,藍色位置的數據塊被更新,被更新的數據塊將成為下一次更新的起點,繼續做累加操作。

8c7dbb1c-fb83-11ed-90ce-dac502259ad0.png8c87a64a-fb83-11ed-90ce-dac502259ad0.png

3次更新之后,每塊GPU上都有一塊數據擁有了對應位置完整的聚合(圖中紅色)。此時,Reduce-Scatter階段結束。進入All-Gather階段。目標是把紅色塊的數據廣播到其余GPU對應的位置上。

All-Gather

如名字里Gather所述的一樣,這操作里依然按照“相鄰GPU對應位置進行通訊”的原則,但對應位置數據不再做相加,而是直接替換。All-Gather以紅色塊作為起點。

8c918dc2-fb83-11ed-90ce-dac502259ad0.png8ca045ce-fb83-11ed-90ce-dac502259ad0.png

以此類推,同樣經過3輪迭代后,使得每塊GPU上都匯總到了完整的數據,變成如下形式:

8cac4126-fb83-11ed-90ce-dac502259ad0.png

建議讀者們手動推一次,加深理解(注:最后一圖箭頭畫錯,公眾號不許修改

2.2 Ring-AllReduce通訊量分析

假設模型參數W的大小為,GPU個數為。則梯度大小也為,每個梯度塊的大小為。

對單卡GPU來說:

Reduce-Scatter階段,通訊量為

All-Gather階段,通訊量為

總通訊量為,隨著N的增大,可以近似

而對前文的DP來說,它的Server承載的總通訊量也是。雖然通訊量相同,但搬運相同數據量的時間卻不一定相同。DDP把通訊量均衡負載到了每一時刻的每個Worker上,而DP僅讓Server做勤勞的搬運工。當越來越多的GPU分布在距離較遠的機器上時,DP的通訊時間是會增加的。

但這并不說明參數服務器不能打(有很多文章將參數服務器當作old dinosaur來看)。事實上,參數服務器也提供了多Server方法,如下圖:

8cb45aaa-fb83-11ed-90ce-dac502259ad0.png

在多Server的模式下,進一步,每個Server可以只負責維護和更新某一塊梯度(也可以某塊梯度+參數一起維護),此時雖然每個Server仍然需要和所有Worker通訊,但它的帶寬壓力會小非常多。經過調整設計后,依然可以用來做DDP。雖然這篇文章是用遞進式的方式來介紹兩者,但不代表兩者間一定要決出優劣。我想表達的觀點是,方法是多樣性的。對參數服務器有興趣的朋友,可以閱讀參考的第1個鏈接。

最后,請大家記住Ring-AllReduce的方法,因為在之后的ZeRO,Megatron-LM中,它將頻繁地出現,是分布式訓練系統中重要的算子。

三、總結

1、在DP中,每個GPU上都拷貝一份完整的模型,每個GPU上處理batch的一部分數據,所有GPU算出來的梯度進行累加后,再傳回各GPU用于更新參數。

2、DP多采用參數服務器這一編程框架,一般由若個計算Worker和1個梯度聚合Server組成。Server與每個Worker通訊,Worker間并不通訊。因此Server承擔了系統所有的通訊壓力。基于此DP常用于單機多卡場景。

3、異步梯度更新是提升計算通訊比的一種方法,延遲更新的步數大小決定了模型的收斂速度。

4、Ring-AllReduce通過定義網絡環拓撲的方式,將通訊壓力均衡地分到每個GPU上,使得跨機器的數據并行(DDP)得以高效實現。

5、DP和DDP的總通訊量相同,但因負載不均的原因,DP需要耗費更多的時間搬運數據。

審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Google
    +關注

    關注

    5

    文章

    1772

    瀏覽量

    57800
  • gpu
    gpu
    +關注

    關注

    28

    文章

    4774

    瀏覽量

    129351
  • 模型
    +關注

    關注

    1

    文章

    3305

    瀏覽量

    49218

原文標題:圖解大模型訓練之:數據并行上篇(DP, DDP與ZeRO)

文章出處:【微信號:GiantPandaCV,微信公眾號:GiantPandaCV】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    FPGA中的流水線設計

    組合邏輯,假定每級延遲相同為 Tpd,1.無流水線的總延遲就是 2Tpd,可以在一個時鐘周期完成,但是時鐘周期受限制在 2Tpd;2.流水線:每一級加入寄存器(延遲 Tco)后,單級的延遲
    發表于 10-26 14:38

    基于流水線技術的并行高效FIR濾波器設計

    基于流水線技術的并行高效FIR濾波器設計 基于流水線技術,利用FPGA進行并行可重復配置高精度的FIR濾波器設計。使用VHDL可以很方便地改變濾波器的系數和階數。在DSP中采用
    發表于 03-28 15:12 ?832次閱讀
    基于<b class='flag-5'>流水線</b>技術的<b class='flag-5'>并行</b>高效FIR濾波器設計

    什么是流水線技術

    什么是流水線技術 流水線技術
    發表于 02-04 10:21 ?3950次閱讀

    CPU流水線的定義

    cpu流水線技術是一種將指令分解多步,并讓不同指令的各步操作重疊,從而實現幾條指令并行處理,以加速程序運行過程的技術。
    發表于 12-14 15:29 ?4725次閱讀

    電鍍流水線的PLC控制

    電鍍流水線的PLC控制電鍍流水線的PLC控制電鍍流水線的PLC控制
    發表于 02-17 17:13 ?36次下載

    一種針對可重構處理器流水線簡化編程的設計范式

    一種針對可重構處理器流水線簡化編程的設計范式_周君宇
    發表于 01-07 21:39 ?0次下載

    Verilog基本功之:流水線設計Pipeline Design

    ,并暫存中間數據的方法。 目的是將一個大操作分解成若干的小操作,每一步小操作的時間較小,所以能提高頻率,各小操作能并行 執行,所以能提高數據吞吐率(提高處理速度)。 二. 什么時候用流水線設計 使用流水線一般是時序比較緊張
    發表于 09-25 17:12 ?6604次閱讀

    FPGA之為什么要進行流水線的設計

    流水線又稱為裝配線,一種工業上的生產方式,指每一個生產單位只專注處理某一個片段的工作。以提高工作效率及產量;按照流水線的輸送方式大體可以分為:皮帶流水裝配線、板鏈線、倍速鏈、插件線、網帶線、懸掛線及滾筒
    的頭像 發表于 11-28 07:04 ?3655次閱讀

    EE-383:基于MDMA的雙SHARC+并行流水線音頻直通

    EE-383:基于MDMA的雙SHARC+并行流水線音頻直通
    發表于 04-29 17:30 ?0次下載
    EE-383:基于MDMA的雙SHARC+<b class='flag-5'>并行</b><b class='flag-5'>流水線</b>音頻直通

    各種流水線特點及常見流水線設計方式

    按照流水線的輸送方式大體可以分為:皮帶流水裝配線、板鏈線、倍速鏈、插件線、網帶線、懸掛線及滾筒流水線這七類流水線
    的頭像 發表于 07-05 11:12 ?7477次閱讀
    各種<b class='flag-5'>流水線</b>特點及常見<b class='flag-5'>流水線</b>設計方式

    如何選擇合適的LED生產流水線輸送方式

    LED生產流水線輸送形式分為平面直線傳輸流水線、各種角度平面轉彎傳輸流水線、斜面上傳流水線、斜面下傳流水線這四種輸送方式,企業也是可以根據L
    發表于 08-06 11:53 ?1058次閱讀

    嵌入式_流水線

    流水線一、定義流水線是指在程序執行時多條指令重疊進行操作的一種準并行處理實現技術。各種部件同時處理是針對不同指令而言的,他們可同時多條指令的不同部分進行工作。? 把一個重復的過程分解
    發表于 10-20 20:51 ?6次下載
    嵌入式_<b class='flag-5'>流水線</b>

    GTC 2023:深度學習之張星并行流水線并行

    張星并行流水線并行技術通常被描述模型并行,在開源社區中,最著名的兩個系統是NVIDIA的Megatron- M和Microsoft的De
    的頭像 發表于 03-23 17:21 ?1909次閱讀
    GTC 2023:深度學習之張星<b class='flag-5'>并行</b>和<b class='flag-5'>流水線</b><b class='flag-5'>并行</b>

    什么是流水線 Jenkins的流水線詳解

    jenkins 有 2 種流水線分為聲明式流水線與腳本化流水線,腳本化流水線是 jenkins 舊版本使用的流水線腳本,新版本 Jenkin
    發表于 05-17 16:57 ?1117次閱讀

    Gpipe作為流水線并行的范例進行介紹

    和充沛優質的硬件資源 算法的迭代創新 在大模型訓練這個系列里,我們將一起探索學習幾種經典的分布式并行范式,包括 流水線并行(Pipeline Parallelism),數據
    的頭像 發表于 05-25 11:41 ?1150次閱讀
    以<b class='flag-5'>Gpipe</b>作為<b class='flag-5'>流水線</b><b class='flag-5'>并行</b>的范例進行介紹
    防伪百家乐官网筹码币套装| 尊龙百家乐娱乐场| 威尼斯人娱乐城信誉最好| 射洪县| 百家乐官网娱乐网真钱游戏| 赌场百家乐实战| 皇家娱乐| 百家乐官网规则以及玩法| 天津太阳城橙翠园| 百家乐官网视频网络游戏| 百家乐牌数计算法| 互联星空棋牌中心| 百家乐官网软件辅助器| 乐天百家乐的玩法技巧和规则| 百家乐官网发牌铲| 赌博百家乐的乐趣| 百家博国际娱乐城| 网上玩百家乐犯法| 奇博国际娱乐| 做生意戴什么珠子招财| 大发888提款速度快吗| 百家乐官网网络赌博真假| 百家乐澳门赌| 百家乐官网另类投注法| 沙龙百家乐娱乐网| 四子王旗| 百家乐最好打法与投注| 吉首市| 百家乐免费赌博软件| 韶关市| 百家乐必赢外挂软件| e世博百家乐官网娱乐场| 百家乐有公式| 百家乐官网已破解的书籍| 百家乐77scs官| 百家乐官网赌场论坛| 大发888充钱| 红树林百家乐官网的玩法技巧和规则 | 乐透乐博彩论坛| 云鼎百家乐注册| 易赢百家乐官网软件|