深度模型常見(jiàn)加速訓(xùn)練策略架構(gòu)篇(一)---分布式訓(xùn)練介紹

一、當(dāng)前模型訓(xùn)練速度的瓶頸

(一)、當(dāng)前模型訓(xùn)練步驟

  1. 讀取Mini batch,前向傳播計(jì)算loss
  2. loss反向傳播得到各個(gè)參數(shù)的梯度
  3. 根據(jù)算出的梯度,選用特性的優(yōu)化器更新參數(shù)

(二)、當(dāng)前模型訓(xùn)練模式分類

  1. 單機(jī)單卡
  2. 單機(jī)多卡
  3. 多級(jí)多卡

(三)、采用分布式系統(tǒng)訓(xùn)練中涉及到的通信方式分類

  1. 點(diǎn)對(duì)點(diǎn)通信(只有一個(gè)發(fā)送者和接收者)
  2. 集合通信(有多個(gè)發(fā)送者和接收者)

(四)、分布式系統(tǒng)中基于集合通信的常用操作

  1. boradcast,將參數(shù)從一個(gè)node發(fā)到多個(gè)node上
  2. reduce,將參數(shù)從多個(gè)node收集到一個(gè)node上,同時(shí)對(duì)手機(jī)到的參數(shù)進(jìn)行歸并(求和求積)

(五)、大規(guī)模訓(xùn)練的技術(shù)挑戰(zhàn)(研究點(diǎn)/優(yōu)化點(diǎn))

1. 顯存墻(決定能否訓(xùn)練)

(1)介紹

  • Model states、
    模型參數(shù)
  • Avtivations
    用于 autograd 的中間變量。如 Forward Output、Output Gradient 以及 cuDNN Workspace。

(2)優(yōu)化方式

2. 通信墻(決定訓(xùn)練速度)

(1)介紹

在進(jìn)行分布式訓(xùn)練時(shí)對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行了各種各樣的切分,但是神經(jīng)網(wǎng)絡(luò)的訓(xùn)練任務(wù)仍是一個(gè)整體,因而,切分需要通信來(lái)進(jìn)行聚合。

聚合所產(chǎn)生的通信需求隱含了不少問(wèn)題,首先,深度學(xué)習(xí)迭代式訓(xùn)練的特性導(dǎo)致更新頻繁,需要大量的交換局部更新。但是目前網(wǎng)絡(luò)的傳輸速率遠(yuǎn)遠(yuǎn)不能匹配 GPU 或 TPU 這種專用加速芯片的運(yùn)算速率。

  • 能否增大帶寬
    不行。增大帶寬,帶寬利用率會(huì)降低。因?yàn)榫W(wǎng)絡(luò)協(xié)議棧會(huì)占用帶寬

3.計(jì)算墻(決定訓(xùn)練速度)

(1)介紹

顧名思義,前向傳播和反向傳播的計(jì)算以及參數(shù)更新的計(jì)算瓶頸。

opeator-level算子級(jí)別的優(yōu)化
  • 小算子過(guò)多
  • Kernel實(shí)現(xiàn)不夠高效
  • 內(nèi)存局部性差
Graph-level計(jì)算圖級(jí)別的優(yōu)化
  • 如何搜索出計(jì)算效率更高的計(jì)算圖
  • 如何用計(jì)算編譯技術(shù)解決小算子問(wèn)題
  • 如何進(jìn)行通信和計(jì)算的 overlap 等
Task-level訓(xùn)練階段的系統(tǒng)設(shè)計(jì)

與傳統(tǒng)訓(xùn)練不同,在包含大規(guī)模訓(xùn)練技術(shù)的訓(xùn)練系統(tǒng)設(shè)計(jì)時(shí),不僅要考慮到龐大的節(jié)點(diǎn)數(shù),也要考慮到在解決顯存、通信問(wèn)題時(shí)帶來(lái)的系統(tǒng)層面的變化。因此,Task-level 的關(guān)鍵挑戰(zhàn)在于,如何給出一個(gè)最終計(jì)算效率最高的系統(tǒng)設(shè)計(jì)

  • 采用何種分布式訓(xùn)練架構(gòu),才能使得大規(guī)模訓(xùn)練具備良好的拓展性。在節(jié)點(diǎn)數(shù)很多時(shí)仍能保持較好的加速比(scale factor)
  • 如何 balance 顯存優(yōu)化與速度優(yōu)化

二、如何從系統(tǒng)框架層面上對(duì)訓(xùn)練加速---并行

(一)分類

  • 數(shù)據(jù)并行(解決計(jì)算墻)
    1.不同 node 輸入不同數(shù)據(jù),運(yùn)行相同的完整的模型。
    2.通過(guò)修改 Sampler 切分輸入,每張卡只需要處理一部分?jǐn)?shù)據(jù)
  • 模型并行(解決顯存墻)
    1.不同 node 輸入相同數(shù)據(jù),運(yùn)行模型的不同部分
    2.通過(guò)修改層內(nèi)的計(jì)算方式,將單層的計(jì)算負(fù)載和顯存負(fù)載切分到多張卡上
  • 流水并行(解決顯存墻)
    將不同的層放到不同的卡上,進(jìn)而將計(jì)算負(fù)載和顯存負(fù)載切分至多張卡上

一旦使用分布式并行計(jì)算,就會(huì)涉及到數(shù)據(jù)通信的問(wèn)題,因此還需要對(duì)通信進(jìn)行加速(解決通信墻)

一般來(lái)說(shuō),模型并行比數(shù)據(jù)并行的通信量更少。但是模型并行需要自己地將模型的計(jì)算進(jìn)行分解。因此一般使用數(shù)據(jù)并行加速。

(二)數(shù)據(jù)并行

1. Parameter Server模式(tensorflow)

(1)結(jié)構(gòu)介紹

類似于master-slave 的同步模式:


image.png

將 node 分成兩種角色:

  • parameter server(ps) 負(fù)責(zé)維護(hù)一份最新的參數(shù) ,
  • worker 負(fù)責(zé)利用從 ps 讀到的最新參數(shù)計(jì)算出梯度(forward 和 backprop),并對(duì) ps 發(fā)送梯度和參數(shù)更新請(qǐng)求。

(2)優(yōu)化方式介紹

優(yōu)化方式分為兩類:同步更新(synchronous update)和異步更新(asynchronous update)。

同步更新

ps 會(huì)同時(shí)充當(dāng) reducer 的角色,等待所有 worker 都發(fā)來(lái)梯度和參數(shù)更新請(qǐng)求后,ps 會(huì)對(duì)梯度取平均(reduce mean),并用平均過(guò)后的梯度更新一次參數(shù)。各個(gè) worker 在從 ps 讀取最新參數(shù)的過(guò)程中,以及等待 ps 更新參數(shù)的過(guò)程中,都是處于空閑狀態(tài)。

  • 優(yōu)點(diǎn):收斂好(相比于異步更新而言)
  • 缺點(diǎn):慢
異步更新

與同步更新不同,異步更新中 ps 在收到 worker 的梯度以及更新請(qǐng)求的時(shí)候,會(huì)立即對(duì)參數(shù)發(fā)起更新,而不等待其他 worker。在完成梯度的計(jì)算后,worker 會(huì)立刻從 ps 上讀取參數(shù),進(jìn)行下一步的迭代。

  • 異步更新的一些問(wèn)題及解決方案
    (i) 參數(shù)和更新用的梯度并不來(lái)自同一個(gè)迭代。用來(lái)更新的梯度可能是幾步更新前的參數(shù)算出來(lái)的。
    解決:直接丟掉落后于當(dāng)前迭代的梯度。(造成了不同 worker racing 的情況,對(duì)計(jì)算資源和數(shù)據(jù)的利用效率不高。)
    (ii)參數(shù)的讀取并沒(méi)有加鎖。這導(dǎo)致 worker 可能會(huì)讀到更新一半的參數(shù)。
    直接丟掉落后于當(dāng)前迭代的梯度。

(3)PS方式優(yōu)缺點(diǎn)

優(yōu)點(diǎn): 容錯(cuò)能力強(qiáng)(設(shè)置多個(gè)PS)
缺點(diǎn):PS傳輸帶寬制約訓(xùn)練速度
目前,因?yàn)闄C(jī)器計(jì)算能力增強(qiáng),需要地機(jī)器數(shù)越來(lái)越少,所以機(jī)器故障率貶低,因此不需要容錯(cuò)能力,反而需要加快訓(xùn)練速度。

2. All Reduce模式

image.png

(1)介紹

在 Allreduce 模式中,所有 node 同時(shí)充當(dāng) ps 和 worker 的角色。

  • 每個(gè) node 可以直接利用本地的參數(shù)拷貝θi進(jìn)行 forward 和 backprop 的計(jì)算
  • 所有 node 都得到算出梯度后,執(zhí)行 allreduce 操作,各個(gè) node 都會(huì)得到全部 node 的梯度平均.
  • 最后各個(gè) node 利用拿到的梯度平均對(duì)本地的θi 進(jìn)行一次更新。
    給個(gè)epoch內(nèi),各個(gè) node 需要發(fā)送和接受一份梯度。

(2)優(yōu)缺點(diǎn)

  • 優(yōu)點(diǎn)
    傳輸耗時(shí)在一定規(guī)模內(nèi)基本不隨 node 數(shù)目的增加而變化
    同步更新,收斂好,可采用大學(xué)習(xí)率
  • 缺點(diǎn)
    當(dāng)系統(tǒng)中存在異構(gòu)的 worker 的時(shí)候,更新仍然會(huì)被最慢的 worker 阻塞住

3.主流方案 ring-allreduce

(1).介紹

  • 架構(gòu)拓?fù)浣Y(jié)構(gòu)
    假設(shè)各個(gè) node 以一個(gè)環(huán)排列,這種假設(shè)可以適用于很多種拓?fù)浣Y(jié)構(gòu),有其工程實(shí)現(xiàn)上的方便性。


    image.png
  • 主要算法內(nèi)容


    image.png

    image.png

(三)、附錄

梯度平均的實(shí)現(xiàn)細(xì)節(jié)

image.png

Reference:

https://zhuanlan.zhihu.com/p/350707888
https://zhuanlan.zhihu.com/p/50116885

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容