一、當(dāng)前模型訓(xùn)練速度的瓶頸
(一)、當(dāng)前模型訓(xùn)練步驟
- 讀取Mini batch,前向傳播計(jì)算loss
- loss反向傳播得到各個(gè)參數(shù)的梯度
- 根據(jù)算出的梯度,選用特性的優(yōu)化器更新參數(shù)
(二)、當(dāng)前模型訓(xùn)練模式分類
- 單機(jī)單卡
- 單機(jī)多卡
- 多級(jí)多卡
(三)、采用分布式系統(tǒng)訓(xùn)練中涉及到的通信方式分類
- 點(diǎn)對(duì)點(diǎn)通信(只有一個(gè)發(fā)送者和接收者)
- 集合通信(有多個(gè)發(fā)送者和接收者)
(四)、分布式系統(tǒng)中基于集合通信的常用操作
- boradcast,將參數(shù)從一個(gè)node發(fā)到多個(gè)node上
- 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 的同步模式:

將 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模式

(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é)

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


