摘要:針對數(shù)據(jù)并行方法加速大規(guī)模深度神經(jīng)網(wǎng)絡(luò)時易出現(xiàn)的通信開銷大、訓(xùn)練耗時長、資源利用率不高的問題,提出了一種深度神經(jīng)網(wǎng)絡(luò)動態(tài)分層梯度稀疏化及梯度合并優(yōu)化方法。首先,將梯度稀疏化壓縮與流水線并行技術(shù)相結(jié)合,提出動態(tài)分層梯度稀疏優(yōu)化方法,為每層神經(jīng)網(wǎng)絡(luò)匹配一個合適的閾值,通過在后續(xù)迭代時動態(tài)調(diào)整該閾值,實現(xiàn)對每層網(wǎng)絡(luò)傳輸梯度的自適應(yīng)壓縮。然后,提出了層梯度合并方法,利用動態(tài)規(guī)劃算法對層梯度合并時的通信開銷、稀疏化及層梯度計算時間進行權(quán)衡優(yōu)化,求解出最佳的層梯度合并組合,并將多層小尺度梯度張量合并為一層通信,以降低分層梯度決策時引入的過高通信延遲開銷。最后,將求解出的最佳層梯度合并組合應(yīng)用于具體的訓(xùn)練迭代過程。實驗結(jié)果表明:與已有方法相比,所提方法可在保證模型訓(xùn)練精度的同時大大降低通信開銷,提升模型的訓(xùn)練速度;與未壓縮方法相比,訓(xùn)練速度最大可提升1.99倍。
關(guān)鍵詞:深度神經(jīng)網(wǎng)絡(luò);分布式訓(xùn)練;同步數(shù)據(jù)并行;梯度壓縮;層梯度合并
中圖分類號:TP311 文獻標志碼:A
DOI:10.7652/xjtuxb202409011 文章編號:0253-987X(2024)09-0105-12
A Dynamic Layer-Wise Gradient Sparsity and Gradient Merging Optimization Method for Deep Neural Networks
JU Tao, KANG Heting, LIU Shuai, HUO Jiuyuan
(School of Electronic and Information Engineering, Lanzhou Jiaotong University, Lanzhou 730070, China)
Abstract:A dynamic layer-wise gradient sparsity and gradient aggregation optimization strategy for deep neural networks is proposed to address the challenges posed by substantial communication overhead, prolonged training duration, and suboptimal resource utilization associated with the acceleration of large-scale deep neural networks through data parallelism. Initially, a dynamic layer-wise gradient sparsity optimization method is proposed by combining gradient sparsity compression with pipeline parallelism. Each neural network layer is assigned an appropriate threshold, which is adjusted dynamically in subsequent iterations to achieve adaptive compression of gradient transmission for each layer. Subsequently, a layer-wise gradient merging method is introduced. Leveraging dynamic programming, this method optimizes communication overhead, sparsity, and layer gradient computation time during layer-wise gradient merging, determining the optimal combination for merging multiple layers of small-scale gradient tensors into a single communication layer. This aims to reduce the high communication latency introduced during layer-wise gradient decision-making. Finally, the determined optimal layer-wise gradient merging combination is applied to the specific training iteration process. Experimental results demonstrate that the proposed method, compared to existing methods, significantly reduces communication overhead and enhances model training speed while ensuring model training accuracy. It achieves a maximum training speed up of 1.99 times compared to the uncompressed method.
Keywords:deep neural network; distributed training; synchronous data parallelism; gradient compression; layer gradient merging
近年來,隨著深度學(xué)習(xí)在各應(yīng)用領(lǐng)域的快速發(fā)展,加之復(fù)雜模型架構(gòu)的不斷更迭和數(shù)據(jù)量的不斷增加,訓(xùn)練大規(guī)模深度神經(jīng)網(wǎng)絡(luò)需要更多的算力資源支撐。由于單個加速設(shè)備的計算能力和存儲容量已不能滿足訓(xùn)練大規(guī)模模型的需求,因此采用分布式思想對模型進行并行化訓(xùn)練已成為現(xiàn)行的一種有效方式[1-2]。較為常見的并行化訓(xùn)練是基于參數(shù)服務(wù)器架構(gòu)的同步數(shù)據(jù)并行方法,即各個計算節(jié)點通過維護模型參數(shù)副本的一致性,在每次訓(xùn)練中使用不同的小批量樣本計算梯度并進行模型參數(shù)的迭代更新。具體執(zhí)行思想為:每個節(jié)點在完成對本地局部梯度的計算后,將局部梯度發(fā)送給服務(wù)器節(jié)點;隨后,服務(wù)器節(jié)點將來自所有計算節(jié)點的局部梯度進行聚合平均得到全局梯度,并將全局梯度用于更新模型參數(shù)[3];之后,各個計算節(jié)點從服務(wù)器節(jié)點獲取最新的模型參數(shù)進行下一輪迭代,直至收斂[4-5]。其中,同步隨機梯度下降算法因具有良好的收斂性,現(xiàn)已成為分布式深度學(xué)習(xí)訓(xùn)練常用的一種優(yōu)化方法[6]。
然而,由于計算節(jié)點在完成反向傳播后,需要將本地局部梯度發(fā)送給服務(wù)器節(jié)點并從服務(wù)器節(jié)點獲取最新的模型參數(shù),因此節(jié)點之間會產(chǎn)生頻繁的梯度傳輸操作,這將使得額外的通信開銷超過計算開銷,逐漸成為加速深度神經(jīng)網(wǎng)絡(luò)分布式訓(xùn)練的主要制約因素[7]。因此,如何在不影響模型訓(xùn)練精度的前提下實現(xiàn)計算節(jié)點間的高效通信,是基于參數(shù)服務(wù)器架構(gòu)的同步數(shù)據(jù)并行訓(xùn)練中亟待解決的問題。
1 相關(guān)工作
1.1 梯度壓縮
目前,在深度神經(jīng)網(wǎng)絡(luò)分布式訓(xùn)練通信優(yōu)化方面已有大量的研究。梯度壓縮是常采用的一種有損壓縮優(yōu)化技術(shù),通過減少深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練時傳輸?shù)奶荻攘縼韮?yōu)化通信,主要分為量化[8-9]和稀疏化[10]兩類方法。量化采用低精度的數(shù)據(jù)表示方法,通過減少每個梯度值的比特數(shù)來壓縮通信量。然而,由于量化后至少需要一個比特來維持原本的梯度信息,理論上只能將梯度張量最多壓縮32倍,無法更進一步實現(xiàn)高效的通信效率提升[11]。稀疏化采用更激進的通信壓縮方式,通過降低無更新操作梯度的傳輸頻率,并選擇重要梯度進行傳輸,可以在確保模型收斂的前提下顯著減少通信量。文獻[12]提出了一種基于固定閾值的梯度稀疏方法,當梯度值大于設(shè)定閾值時進行傳輸操作,但該方法對每層梯度使用統(tǒng)一的均勻壓縮,忽略了模型不同層之間的異構(gòu)性,且難以對各類深度神經(jīng)網(wǎng)絡(luò)設(shè)置合理的閾值,缺少良好的泛化性。針對該問題,文獻[13-14]提出了局部選擇和動態(tài)閾值調(diào)整方法,該方法通過局部梯度選擇和動態(tài)閾值調(diào)整,選擇一定比例的梯度值進行訓(xùn)練時的通信傳輸操作。然而,在高壓縮率的情況下,容易造成模型訓(xùn)練精度的損失。稀疏化的一種變體是更新重要梯度(Top-K)方法[15-17],主要通過將所有梯度進行Top-K操作后,篩選對模型更新影響率較大的梯度值進行傳輸;但在進行大規(guī)模深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練時,由于梯度張量非常龐大,Top-K操作往往會造成很大的時間開銷。為此,文獻[18]通過隨機選擇一定比例的梯度值進行Top-K操作后得到稀疏閾值,最終在全部梯度上使用此閾值進行梯度篩選;但該方法對閾值計算不夠準確,在原始梯度向量的子集上需要進行兩次Top-K采樣,會造成較高的額外計算開銷。Top-K方法雖然可以顯著減少通信量,但忽視了深度神經(jīng)網(wǎng)絡(luò)的分層結(jié)構(gòu)特性,并且稀疏化操作通常在所有層梯度計算結(jié)束后進行,使得計算和通信無法達到良好的并行效果。為此,文獻[19]提出了分層自適應(yīng)梯度稀疏方法(LAGS),即在每層中通過執(zhí)行Top-K操作選擇梯度,并證明了該方法的收斂性。該方法可在梯度計算和梯度通信盡可能并行執(zhí)行的前提下,壓縮傳輸過程中的通信量,但該方法對梯度的選擇不夠高效,導(dǎo)致稀疏化時間占比較大,不能有效減少模型訓(xùn)練時間。
1.2 梯度分布
為實現(xiàn)梯度張量的高效壓縮,減少稀疏化時間開銷,許多研究通過探索深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程中的梯度分布情況來估計壓縮閾值。文獻[20-21]通過理論分析與實驗驗證指出,訓(xùn)練過程中梯度大多位于0附近并遵循高斯分布,并提出了一種高效的梯度選擇算法Gassian K,大幅度降低了稀疏化的時間開銷,但隨著訓(xùn)練的進行,梯度值越來越接近于0。該方法根據(jù)高斯分布預(yù)測的閾值較大,導(dǎo)致模型在相同訓(xùn)練時間內(nèi)往往難以收斂。為更準確地模擬梯度分布特征,文獻[22]將訓(xùn)練過程中梯度分布建模為雙指數(shù)分布、雙伽馬分布和雙廣義帕累托分布3種分布,并提出了一種基于稀疏分布的壓縮方法,通過多段式的估計方法計算閾值,但當壓縮比變大時,對真實梯度分布的擬合會出現(xiàn)較大的偏差,影響模型的收斂性。文獻[23]利用對數(shù)正態(tài)分布較高斯分布更準確的特點,結(jié)合梯度量化方法提出了一種基于對數(shù)正態(tài)分布的壓縮方法,達到了80%的稀疏度,大幅度減少了通信量,但該方法仍存在對訓(xùn)練過程中閾值預(yù)測不夠準確的問題,影響了訓(xùn)練精度。
1.3 計算與通信重疊
在深度神經(jīng)網(wǎng)絡(luò)的反向傳播過程中,梯度從后往前依次進行計算,即前一層網(wǎng)絡(luò)的梯度計算獨立于后一層的通信,后一層的參數(shù)更新也與前一層無關(guān)。因此,可以通過將通信任務(wù)與計算任務(wù)重疊來隱藏部分通信開銷[24]。然而,計算任務(wù)與通信任務(wù)重疊本質(zhì)上并沒有真正減少通信時間,只是盡可能將計算和通信并行執(zhí)行,從而提高模型的整體訓(xùn)練效率。文獻[25]提出了一種無等待反向傳播(WFBP)算法,實現(xiàn)了層間梯度通信和計算的流水線并行,但由于不同層之間計算和通信時間的差異性,在高延遲或低帶寬的網(wǎng)絡(luò)環(huán)境中難以隱藏額外的通信開銷。文獻[26]在WFBP算法的基礎(chǔ)上進行擴展,提出了基于優(yōu)先級傳輸?shù)姆椒?,通過將每一層梯度張量按照預(yù)設(shè)的閾值進行切分,并利用任務(wù)間的優(yōu)先級實現(xiàn)調(diào)度傳輸,達到計算和通信重疊的效果;但由于處理不同運行環(huán)境時需要頻繁的超參數(shù)調(diào)整操作,使得該方法難以適應(yīng)軟硬件資源動態(tài)變化的適行環(huán)境。由于一些大張量的通信可能會阻塞較高優(yōu)先級張量的執(zhí)行,因此文獻[27]提出了優(yōu)先級調(diào)度中的張量分區(qū),將大張量切分成若干小張量執(zhí)行,以實現(xiàn)更大程度的計算與通信重疊;但每個切分后的小張量需要插入推送操作,切分過多的小張量會帶來更長的總啟動時間,導(dǎo)致帶寬利用率較差。
綜上,在深度神經(jīng)網(wǎng)絡(luò)模型的分布式訓(xùn)練中,需要結(jié)合具體的計算資源進行動態(tài)分析,通過梯度分布規(guī)律設(shè)計梯度壓縮方式,將計算與通信進行重疊調(diào)度執(zhí)行,可進一步優(yōu)化通信傳輸開銷,提高訓(xùn)練效率。
針對以上分布式數(shù)據(jù)并行訓(xùn)練大規(guī)模深度神經(jīng)網(wǎng)絡(luò)過程中存在的問題,本文提出一種深度神經(jīng)網(wǎng)絡(luò)動態(tài)分層梯度稀疏化及分層梯度合并優(yōu)化方法DLGS。首先,將全局Top-K稀疏化與流水線并行技術(shù)相結(jié)合,提出動態(tài)分層梯度稀疏決策,為每層神經(jīng)網(wǎng)絡(luò)計算一個合適的閾值,并通過在后續(xù)迭代時動態(tài)調(diào)整該閾值,實現(xiàn)對每層傳輸梯度的自適應(yīng)壓縮。其次,為了進一步降低通信延遲,加速模型訓(xùn)練,提出了層梯度合并方法,利用動態(tài)規(guī)劃算法對層梯度合并時的通信耗時、稀疏化計算及層梯度計算時間進行權(quán)衡優(yōu)化,求解出最優(yōu)的層合并組合,將多層小尺度梯度張量合并為一層進行通信。然后,將最優(yōu)的層合并組合應(yīng)用于具體的訓(xùn)練迭代過程。最后,通過實驗測試,驗證了本文方法的有效性。
2 動態(tài)分層梯度稀疏化
首先,通過對已有全局Top-K梯度稀疏方法的局限性分析,引入分層Top-K梯度稀疏化方法,為每層計算一個合適的壓縮閾值,使得稀疏化不需要等待反向傳播的完成,將部分梯度通信開銷隱藏于梯度計算過程中;之后,為了減少梯度稀疏化的時間開銷,設(shè)計了閾值重用,實現(xiàn)對梯度高效壓縮,進一步提高神經(jīng)網(wǎng)絡(luò)訓(xùn)練速度。
2.1 全局Top-K梯度稀疏化局限性分析
基于Top-K稀疏化具有較大絕對值的梯度對模型收斂影響更大的特點,在梯度更新過程中,每個計算節(jié)點只傳遞小部分絕對值最大的梯度值,剩余未選擇的梯度值累積為本地梯度殘差,添加到下一次迭代計算的梯度中。全局Top-K方法依賴于所有層梯度,如圖1所示Top-K稀疏化執(zhí)行過程,當反向計算完所有層梯度后,才開始對所有層梯度執(zhí)行稀疏化和梯度通信等操作,由于不會使得反向傳播過程中梯度計算和通信操作重疊,因此會導(dǎo)致訓(xùn)練效率較低。
2.2 動態(tài)分層梯度稀疏化方法
為了使梯度計算和通信在盡可能并行執(zhí)行的前提下減少梯度傳輸?shù)耐ㄐ帕?,本文在每一層上?yīng)用Top-K梯度稀疏化和殘差累積,具體執(zhí)行時不是從所有層選擇K個梯度值,而是從每層l中選擇K個梯度值,當層l計算完成梯度后,立即對該層計算得到的梯度進行稀疏化操作,這樣不僅利用稀疏化方法減少了傳輸過程中的通信量,而且還利用深度神經(jīng)網(wǎng)絡(luò)的分層結(jié)構(gòu)使得梯度計算和通信重疊。具體層閾值計算與動態(tài)更新過程為:初始迭代時,對每層l計算得到的梯度應(yīng)用Top-K方法,將每層中通過Top-K方法選擇的第K個梯度值作為層l的閾值,表示為Hl,用閾值列表V=[H1,H2,…,Hl]存儲每層的閾值。通過比較多次迭代后每層的閾值變化,發(fā)現(xiàn)閾值只有輕微的差異,因此不需要在每次迭代過程中對層l計算得到的梯度執(zhí)行Top-K操作計算閾值,而是每隔s次迭代,使用Top-K操作計算每層的準確閾值,并使用所計算的準確閾值來動態(tài)更新層閾值列表V。然后,在接下來的(s-1)次迭代過程中重用該閾值。通過閾值重用,可以減少在層l執(zhí)行Top-K的時間,從而進一步降低稀疏化的時間開銷。
整個動態(tài)分層梯度壓縮執(zhí)行過程如圖2所示。首先層l計算出第i次訓(xùn)練的梯度gn,li(n為計算節(jié)點),將層l計算的梯度gn,li與該層中的梯度殘差en,li-1相加,梯度殘差是計算節(jié)點中層l局部累積的所有先前未傳輸梯度的總和;然后對該層梯度執(zhí)行Top-K操作,得到該層梯度壓縮閾值Hl,通過該閾值對層l的梯度gn,li壓縮;最后將壓縮后的梯度C(gn,li)發(fā)送給參數(shù)服務(wù)器,并累積本次迭代的梯度殘差en,li,用于之后迭代計算得到的梯度中。
2.3 動態(tài)分層梯度壓縮算法
在對每層梯度計算合適的壓縮閾值基礎(chǔ)上,利用每層計算的閾值,實現(xiàn)分層梯度壓縮。假設(shè)在計算節(jié)點n上給定一個具有L層的深度神經(jīng)網(wǎng)絡(luò)M,在第i次訓(xùn)練時將壓縮后的梯度C(gn,li)發(fā)送給參數(shù)服務(wù)器,當參數(shù)服務(wù)器收到各個計算節(jié)點計算的梯度后,對所有梯度求平均值并更新模型參數(shù)。具體的參數(shù)更新公式為
wli+1=wli-αi1N∑Nn=1C(gn,li)(1)
式中:wli表示第i次迭代層l模型參數(shù);αi是學(xué)習(xí)率;N為計算節(jié)點數(shù);gn,li表示計算節(jié)點n在第i次迭代中計算的無偏隨機梯度與層l的本地梯度殘差的累加和;C(gn,li)表示對層l計算的梯度gn,li進行壓縮。動態(tài)分層梯度壓縮算法迭代訓(xùn)練的具體過程見算法1。
算法1 動態(tài)分層梯度壓縮算法
輸入:數(shù)據(jù)集D,每層初始權(quán)重wl,層壓縮率K,學(xué)習(xí)率α,迭代次數(shù)T,節(jié)點數(shù)量N
輸出:模型參數(shù)wT
1 初始化V=[H1,…,HL]=0
2 初始化E=[en,1i,…,en,Li]=0
3 for i=1 to T do
4" 從數(shù)據(jù)集D中采樣小批量數(shù)據(jù)Dni
5" 前向計算;
6" for l=L to 1 do
7"" gn,li=en,li-1+ΔLoss(wt, Dn,li);
8"" M=|gn,li|gt;Hl;
9"" C(gn,li)=gn,l⊙M;
10" en,li=gn,li⊙M;
11" gn,lgolobal=AVG(Reduce(C(gn,li));
12 end for
13 if i mod s == 0 then
14"" update V
end if
15 wli+1=wli-αign,lglobal
16end for
算法主要執(zhí)行步驟如下。
步驟1 每個計算節(jié)點加載訓(xùn)練模型和部分訓(xùn)練數(shù)據(jù)集,初始化每層梯度閾值列表V,初始化每層梯度壓縮殘差矩陣E。
步驟2 迭代訓(xùn)練,共迭代訓(xùn)練T次,每次迭代從數(shù)據(jù)集D中采樣小批量數(shù)據(jù)Dni,前向計算損失。
步驟3 從最后一層L逐層往前計算梯度gn,li,將層l梯度值同該層梯度殘差en,li-1相加得到gn,li=gn,li+en,li-1,之后根據(jù)該層中的閾值Hl對該層梯度進行壓縮,將壓縮后的梯度C(gn,li)發(fā)送給參數(shù)服務(wù)器更新模型參數(shù),并將小于閾值的梯度在本地累積為梯度殘差,用于之后的迭代訓(xùn)練。
步驟4 參數(shù)服務(wù)器收到所有計算節(jié)點計算的梯度后,對梯度求平均值,并用式(1)更新模型參數(shù)。
步驟5 參數(shù)服務(wù)器將最新的模型參數(shù)廣播給計算節(jié)點,更新計算節(jié)點的模型參數(shù),并開始下一輪的迭代訓(xùn)練。
3 層梯度合并
分層梯度稀疏化通過減少通信量可以有效降低通信開銷,加速模型訓(xùn)練過程,但在分層壓縮后的梯度通信過程中,對于不同類型的層,要通信的梯度張量大小存在較大差異,傳輸過多層的小張量不僅會導(dǎo)致帶寬利用不足,還會增加通信延遲[28]。為此,本文提出多層梯度合并方法,將多個層的梯度張量合并一起發(fā)送,以降低通信延遲開銷,加速模型訓(xùn)練過程。
3.1 層梯度合并策略
層梯度合并的目標是在訓(xùn)練過程中盡可能多地將多個稀疏后的梯度張量合并到一起通信,在實現(xiàn)梯度計算和梯度通信最佳重疊的同時,最小化通信延遲開銷。在合并多個層梯度張量過程中,如將整個模型的梯度張量合并成一個單一張量,雖然通信操作只調(diào)用一次,通信延遲最小,但通信過程必須等待反向傳播結(jié)束,沒有使梯度計算與通信重疊,從而影響訓(xùn)練效率。為了獲得最佳的層梯度合并結(jié)果,應(yīng)同時考慮梯度計算時間、梯度壓縮時間和梯度通信時間對整個訓(xùn)練效率的影響。本文首先將層梯度合并問題轉(zhuǎn)化為使得一次迭代最小的優(yōu)化問題,優(yōu)化目標是通過層梯度合并來降低通信延遲開銷,從而最小化迭代時間;然后,對訓(xùn)練過程中梯度計算時間、梯度壓縮時間和梯度通信時間進行分析,判斷層梯度合并的前提條件;最后,利用動態(tài)規(guī)劃算法求解最佳的層梯度合并組合,并用于之后的迭代訓(xùn)練過程。
3.1.1 訓(xùn)練過程分析
本文提出的動態(tài)分層梯度稀疏化方法,一次迭代訓(xùn)練時間titer由前向計算損失時間、反向逐層計算梯度時間、層梯度壓縮時間和壓縮后梯度通信時間4部分組成,表示如下
titer=tf+∑Ll=1tlb+∑Ll=1tls+tnoc(2)
式中:titer表示一次迭代總時間;tf表示前向計算時間;tlb表示層l的反向計算時間;tls表示層l的稀疏化時間;tnoc表示沒有重疊的通信時間。τlb、τls、τlc計算公式分別為
τlb=tf, l=L
τl+1s+tl+1s, 1≤llt;L(3)
τls=τlb+tlb(4)
τlc=τls+tls, l=L
max{τls+tls, τl+1c+tl+1c}, 1lt;l≤L(5)
式中:τlb表示層l開始計算梯度的時刻,取值為前向計算結(jié)束的時刻或者其前一層(l+1)稀疏化結(jié)束時刻;式(4)表示層l的開始稀疏化的時刻τls,取值為層l的梯度計算結(jié)束時刻;式(5)中,τlc表示層l開始通信的時刻,它由層l的稀疏化結(jié)束時刻和其前一層(l+1)的通信結(jié)束時刻決定。
3.1.2 合并過程分析
層梯度合并過程中,將多個層梯度張量合并到一起通信,雖然會緩解通信延遲開銷,但是會推遲前一層或者幾層梯度開始稀疏化和通信的時刻,如圖3a中,層L計算完梯度并壓縮后會在時刻1開始該層梯度通信,圖3b中將層L和層(L-1)合并一起通信,會將層L開始梯度通信的時刻延遲到時刻2。如果將所有層梯度合并到一起發(fā)送,則通信延遲開銷最低,從而使得通信成本最低,但這種通信方式需要計算完所有層梯度才開始通信,不能實現(xiàn)梯度計算和通信并行執(zhí)行。因此,層梯度合并的目標是在訓(xùn)練過程中盡可能將層梯度張量合并的同時,實現(xiàn)梯度通信和計算的最佳重疊。
將合并層定義為:如果在時刻τ處,將層l的梯度合并到層(l-1),并不壓縮和通信層l的梯度,則層l為合并層,表示為l(l-1)。用符號lm表示合并層,用符號ln表示普通層,則
l=lm
s.t. lmgt;1
tlc=tls=0
dl-1=dl+dl-1
τl-1b=τlb+tlb(6)
式中:lmgt;1表明第1層不能為合并層,因為沒有前
一層要合并;tlc=tls=0表明lm這一層梯度計算完成后沒有壓縮和通信;dl-1=dl+dl-1表明lm這一層的梯度張量dl將會累積到前一層張量dl-1中;τl-1b=τlb+tlb表示層(l-1)的梯度計算可以在層l梯度計算完成后立即開始。
對于一個具有L層的深度神經(jīng)網(wǎng)絡(luò)模型,若某層l屬于普通層或者合并層,則所有的層梯度合并可能的組合O有2L-1種。在對梯度分層通信過程中,由于反向計算梯度是從后往前逐層進行的,因此一次迭代結(jié)束時間titer為第1層梯度通信結(jié)束時刻,可寫為
titer=τ1c+t1c(7)
式中:τ1c是第1層開始通信的時刻;t1c是第1層通信的時間。式(7)表示一次迭代結(jié)束時刻titer等價于第1層梯度通信結(jié)束時刻。同時由式(5)可知,第1層的通信開始時刻由第1層的梯度稀疏化結(jié)束時刻和第2層通信結(jié)束時刻決定,第2層中的通信開始時刻由第2層中的梯度稀疏化結(jié)束時刻和第3層通信結(jié)束時刻決定,如此類推,直到第L層開始計算梯度為止。
3.2 優(yōu)化目標
給定一個具有L層的深度神經(jīng)網(wǎng)絡(luò)模型M,優(yōu)化目標是從所有的層梯度可能的組合O中找到一種組合m∈O,使得一次迭代時間titer最小,在最小化通信延遲開銷的同時達到最佳的梯度計算與梯度通信的重疊,用公式表示為
min titer=tf+∑Li=1(τlc+tlc)
s.t. m∈O(8)
式中:τlc表示層l開始通信的時刻;tlc表示層l通信的時間;τlc+tlc表示計算層l通信結(jié)束的時刻。層l開始通信的時刻τlc,由層(l+1)的通信時間或?qū)觢的稀疏化時間決定,即τlc=max{τl+1c+tl+1c,τls+tls}。式(8)的目標是找到一個最優(yōu)的組合m最小化迭代時間titer。
3.3 層梯度合并算法
在對優(yōu)化目標迭代求解過程中,關(guān)鍵是確定合并一個層是否能減少迭代時間titer,如果可以減少迭代時間,則將該層設(shè)為合并層,否則,將該層保持為普通層。對于任意層l,若將其梯度合并后總的迭代時間變?yōu)閠′iter,如果使得t′iterlt;titer,則將層l的梯度合并,否則不合并。圖4描述了具體迭代規(guī)劃合并過程。
假設(shè)已經(jīng)將層L、L-1、L-2進行了合并,形成層梯度組合m1=[L,L-1,L-2],則在該組合中,當層L和層(L-1)的梯度計算完成后,沒有立即壓縮和通信,而是將層L和層(L-1)的梯度張量累積到層(L-2)中,即dL-2=dL-2+dL-1+dL。接著,從層(L-3)開始,對剩余部分層繼續(xù)進行迭代規(guī)劃,形成下一個層梯度組合mj(1≤j≤x)。當所有層都遍歷完之后,所有層被劃分構(gòu)成一個層梯度組合m={m1,m2,…,mx}。在之后的訓(xùn)練過程中,將每個組合mj中所包含的若干層進行一次通信即可。
具體合并過程實現(xiàn)如算法2所示,其中函數(shù)CommTime( )表示返回層l的通信時間,函數(shù)TopKTime( )表示返回層l稀疏化的時間,函數(shù)CommStartTime( )和CompStartTime( )是預(yù)先設(shè)置用于計算層l梯度開始通信時刻τc和梯度計算的起始時刻τb;函數(shù)Merge( )執(zhí)行梯度合并操作,將預(yù)定義的普通層更改為合并層。
算法2 最優(yōu)層梯度合并算法
1 初始化m[1,…,L]={ln}
2 for l=L to 2 do
3"" μ=τb[l]+tb[l]+tb[l-1]
4"" if t′iterlt;titer do
5""" Merge(tb,ts,tc,d[l])
6""" τb2,τs2,ts2=CompStartTime (tb[1,…,L],d[1,…,L],τb[l]+tb[l]);
7""" τb[1,…,L]=τb2,τs[1,…,L]=τs2;
8""" τc,tc=CommStartTime(ts,τc,d[l]);
9""" m[l]=lm;
10"" end if
11 end for
12 return m;
13 Procedure Merge(tb,ts,tc,l)
14"" tb[l-1]=tb[l-1]+tb[l];
15"" d[l-1]=d[l-1]+d[l];
16"" tc[l-1]=CommTime(d[l-1]);
17"" ts[l-1]=Top K Time(d[l-1]);
整個合并算法主要執(zhí)行步驟如下。
步驟1 初始化神經(jīng)網(wǎng)絡(luò)所有層為普通層,通過函數(shù)CommStartTime()和CompStartTime()記錄層l梯度開始通信和計算的起始時刻。
步驟2 從最后一層L開始向前逐層遍歷,對于遍歷到的每一層l,判斷合并該層到前一層(l-1)與不合并該層是否可以減少迭代時間。
步驟3 如果可以減少迭代時間,則調(diào)用Merge()函數(shù)將預(yù)定義的普通層更改為合并層,將該層l的梯度張量累積到前一層梯度張量中,然后將層號推入層梯度組合mj中。
步驟4 如果不能減少迭代時間,則將該層梯度與其前一層不合并,并從前一層開始創(chuàng)建一個新的層梯度組合mj+1,繼續(xù)往前逐層判斷。
步驟5 當所有層遍歷結(jié)束后,求得最優(yōu)的組合方式m。
算法從第L層開始逐層往前掃描直到第2層為止,需要O(L)步,對于每次掃描,如果層l是可以合并的層,則需要計算該層梯度計算和通信開始時間,復(fù)雜度為O(L),因此整個算法的復(fù)雜度為O(L2)。
3.4 層合并后訓(xùn)練執(zhí)行流程
通過對層梯度合并的分析和求解,得到最優(yōu)的層梯度組合方式m=[m1,m2,…,mx],將求得的最優(yōu)層梯度合并方式組合m應(yīng)用于迭代訓(xùn)練過程中。層合并后訓(xùn)練執(zhí)行流程如下所示。
步驟1 每個計算節(jié)點初始化共享同步隊列Q,存儲每層的層號,計算每層的參數(shù)大小等相關(guān)變量;
步驟2 在服務(wù)器節(jié)點(Rank 0)調(diào)用算法2求最優(yōu)層梯度合并方式m,并向所有計算節(jié)點廣播m;
步驟3 每個計算節(jié)點得到層梯度組合m,初始化相關(guān)變量,迭代的讀取小批量數(shù)據(jù)進行前向傳播并求損失;
步驟4 根據(jù)損失進行反向傳播計算得到當前層隨機梯度gn,li,然后根據(jù)合并后的層梯度組合mj判斷是否立即壓縮和通信該層梯度。
步驟5 將層梯度組合mj中的層號推入共享隊列,并將mj中包含的多個層壓縮后的梯度C(gn,li)一起發(fā)送給參數(shù)服務(wù)器。
步驟6 參數(shù)服務(wù)器收到所有計算節(jié)點發(fā)送的層梯度組合mj的多個層梯度,求和取平均值后,更新服務(wù)器節(jié)點的模型參數(shù)。
步驟7 計算節(jié)點從服務(wù)器節(jié)點拉取更新后的模型參數(shù),更新本地模型,進入下一輪迭代訓(xùn)練。
4 實 驗
4.1 實驗設(shè)置
(1)硬件環(huán)境。實驗使用北京超算中心的N40分區(qū),采用4個節(jié)點,其中1個為參數(shù)服務(wù)器節(jié)點,另外3個為計算節(jié)點。服務(wù)器節(jié)點和計算節(jié)點之間通過RoCE 2×25Gb/s(RDMA協(xié)議)建立連接。每個節(jié)點各配備1塊CPU和GPU卡,硬件配置相關(guān)參數(shù)為:CPU為AMD EPYC 7402 (48C)@2.8GHz,內(nèi)存512GB,顯卡為NVIDIAGeForceRTX 4090,顯存24GB。
(2)軟件環(huán)境。并行訓(xùn)練使用Horovod分布式深度學(xué)習(xí)框架,進行上層分布式梯度計算和通信等封裝,底層采用PyTorch深度學(xué)習(xí)框架。操作系統(tǒng)為Red Hat 4.8.5,Horovod版本為0.28.1,PyTorch版本為2.0.1,CUDA版本為11.8,Python版本為3.8,NCCL版本為2.18.1。
(3)網(wǎng)絡(luò)模型及數(shù)據(jù)集。分別用ResNet-20和VGG16兩種網(wǎng)絡(luò)模型在CIFAR-10數(shù)據(jù)集、用ResNet-50網(wǎng)絡(luò)模型在ImageNet數(shù)據(jù)集子集上進行驗證。其中,CIFAR-10數(shù)據(jù)集由10個類別的60000張32×32像素的彩色圖片組成,其中包含50000張訓(xùn)練圖片和10000張測試圖片。ImageNet數(shù)據(jù)子集由截取的100個類的135000張圖片組成,并裁剪為224×224像素,其中一個訓(xùn)練類包含1300張圖片,一個測試類包含50張圖片。
(4)實驗參數(shù)設(shè)置。在同步數(shù)據(jù)并行框架下,使用分布式隨機梯度下降優(yōu)化算法,在CIFAR-10數(shù)據(jù)集共迭代訓(xùn)練140輪(Epoch)。學(xué)習(xí)率采用階梯式設(shè)置,前80輪設(shè)置為0.1,80~120輪設(shè)置為0.01,120~140輪設(shè)置為0.001,批量大小設(shè)置為32。在ImageNet數(shù)據(jù)集共迭代訓(xùn)練80輪,前30輪學(xué)習(xí)率設(shè)置為0.1,30~60輪設(shè)置為0.01,60~80輪設(shè)置為0.001,批量大小設(shè)置為64。
4.2 實驗結(jié)果與分析
4.2.1 并行訓(xùn)練精度與損失對比
為了驗證本文方法(DLGS)在提升模型訓(xùn)練精度和降低訓(xùn)練損失方面的有效性,在0.1壓縮率下分別使用ResNet-20、VGG16和ResNet-50模型測試不同壓縮方法的訓(xùn)練精度和訓(xùn)練損失。ResNet-20模型的訓(xùn)練精度和訓(xùn)練損失分別如圖5和圖6所示,VGG16模型的訓(xùn)練精度和訓(xùn)練損失分別如圖7和圖8所示,ResNet-50模型的訓(xùn)練精度和訓(xùn)練損失分別如圖9和圖10所示。不同壓縮方法的最終訓(xùn)練精度和訓(xùn)練損失對比如表1所示。
從圖5和圖7可以看出,與Top-K、LAGS、未壓縮等方法相比,本文DLGS方法在訓(xùn)練開始時與其他各壓縮方法訓(xùn)練精度差異較小,隨著迭代次數(shù)的增加,本文方法訓(xùn)練精度提升效果僅次于未壓縮方法,在第40輪時訓(xùn)練精度趨于穩(wěn)定,在第80輪時,各壓縮方法精度都有顯著的提升,主要是因為在第80輪后學(xué)習(xí)率衰減為0.01。從圖6和圖8的訓(xùn)練損失曲線可以看出,各壓縮方法在訓(xùn)練過程中訓(xùn)練損失迅速降低,之后趨于穩(wěn)定,在第80輪后損失又有了明顯的下降,主要是因為80輪后學(xué)習(xí)率衰減為原來的1/10。圖9和圖10表明,本文方法在ResNet-50模型上的訓(xùn)練精度和訓(xùn)練損失同其他兩種模型上的類似。從表1可以看出,本文方法在3種網(wǎng)絡(luò)模型上的訓(xùn)練精度和訓(xùn)練損失方面差距不大,十分接近于未壓縮方法,表明本文方法可以在減少訓(xùn)練時間的同時保證模型精度。
4.2.2 訓(xùn)練耗時對比
為評估在提升訓(xùn)練速度上的有效性,在0.1和0.01兩種壓縮率下,對模型ResNet-20、VGG16和ResNet-50的訓(xùn)練耗時進行對比,不同壓縮方法訓(xùn)練耗時如表2所示。從表2可知,本文DLGS方法在兩種壓縮率下的訓(xùn)練耗時均少于其他壓縮方法,主要原因是本文方法通過閾值重用以及梯度稀疏化對多個層梯度進行了合并通信,減少了模型訓(xùn)練過程中的壓縮開銷和通信開銷,從而加速了模型整體訓(xùn)練過程。本文DLGS方法在0.01的壓縮率下訓(xùn)練時間和非壓縮方法相比,最大加速比達到了1.99倍;在VGG16模型上DLGS同其他壓縮方法相比,加速比提高不明顯,主要是因為VGG16輸入分辨率較小,梯度計算時間較小而參數(shù)量較大。本文方法更傾向于合并多個層的梯度,導(dǎo)致梯度計算和梯度通信重疊程度相對較低。
4.2.3 壓縮性能分析
為了驗證本文方法在提升模型訓(xùn)練速度方面的有效性,將一次迭代的訓(xùn)練時間分解為計算時間、稀疏化時間和非重疊的通信時間,并在0.1和0.01兩種壓縮率下,比較不同壓縮方法一次迭代的各部分訓(xùn)練時間,結(jié)果如圖11~圖13所示。
從圖11~圖13可以看出,在3種訓(xùn)練模型上,由于未壓縮方法的通信量很大,通信時間遠大于計算時間,導(dǎo)致一次迭代的訓(xùn)練總時間比其他方法的總時間長;在0.1和0.01兩種壓縮率下,由于Top-K方法減少了通信量進而減少了通信時間,因此比未壓縮方法的訓(xùn)練時間短;LAGS方法在兩種壓縮率下稀疏化時間比Top-K方法多,主要原因是每層調(diào)用Top-K函數(shù)導(dǎo)致稀疏化開銷增加,但該方法重疊了計算和通信,故在整體訓(xùn)練時間上少于Top-K方法。本文DLGS方法在兩種壓縮率下耗時均最短,一方面是因為本文方法減少了通信量從而減少了通信時間,且在這個過程中計算和通信重疊,將部分通信開銷隱藏在計算中;另一方面是因為本文方法通過閾值重用減少了稀疏化的時間開銷,并通過層梯度合并方法降低了通信延遲開銷,從而進一步降低了整個訓(xùn)練迭代的時間。
5 結(jié) 論
本文提出了一種動態(tài)分層梯度稀疏化及梯度合并優(yōu)化方法,用于解決基于參數(shù)服務(wù)器的數(shù)據(jù)并行優(yōu)化方法加速大規(guī)模深度神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練過程中存在的通信開銷大、訓(xùn)練耗時長等問題。首先,通過在迭代過程中動態(tài)調(diào)整每一層的壓縮閾值,有效減少了通信量,使得層梯度壓縮及梯度計算與通信可以流水線并行執(zhí)行,重疊了部分通信時間。其次,利用動態(tài)規(guī)劃對層梯度合并時的通信耗時、稀疏化計算及層梯度計算時間進行權(quán)衡優(yōu)化,求解出最優(yōu)的層合并組合,將多層小尺度梯度張量合并為一層進行通信。最后,將最優(yōu)的層合并組合應(yīng)用于具體的訓(xùn)練迭代過程。實驗結(jié)果表明,本文所提方法在并行訓(xùn)練精度、訓(xùn)練耗時、壓縮效果方面和已有方法相比都有明顯的優(yōu)勢,可以在保證訓(xùn)練精度的情況下,進一步減少通信量,最大化計算和通信的重疊,最終降低深度神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練耗時,提高模型的訓(xùn)練速度。
參考文獻:
[1]朱泓睿, 元國軍, 姚成吉, 等. 分布式深度學(xué)習(xí)訓(xùn)練網(wǎng)絡(luò)綜述 [J]. 計算機研究與發(fā)展, 2021, 58(1): 98-115.
ZHU Hongrui, YUAN Guojun, YAO Chengji, et al. Survey on network of distributed deep learning training [J]. Journal of Computer Research and Development, 2021, 58(1): 98-115.
[2]王帥, 李丹. 分布式機器學(xué)習(xí)系統(tǒng)網(wǎng)絡(luò)性能優(yōu)化研究進展 [J]. 計算機學(xué)報, 2022, 45(7): 1384-1411.
WANG Shuai, LI Dan. Research progress on network performance optimization of distributed machine learning system [J]. Chinese Journal of Computers, 2022, 45(7): 1384-1411.
[3]巨濤, 趙宇陽, 劉帥, 等. 面向圖片識別的深度學(xué)習(xí)模型并行優(yōu)化方法 [J]. 西安交通大學(xué)學(xué)報, 2023, 57(1): 141-151.
JU Tao, ZHAO Yuyang, LIU Shuai, et al. A parallel optimization method of deep learning model for image recognition [J]. Journal of Xi’an Jiaotong University, 2023, 57(1): 141-151.
[4]LI Mu, ANDERSEN D G, PARK J W, et al. Scaling distributed machine learning with the parameter server [C]//Proceedings of the 11th USENIX Conference on Operating Systems Design and Implementation. Berkeley, CA, USA: USENIX Association, 2014: 583-598.
[5]朱虎明, 李佩, 焦李成, 等. 深度神經(jīng)網(wǎng)絡(luò)并行化研究綜述 [J]. 計算機學(xué)報, 2018, 41(8): 1861-1881.
ZHU Huming, LI Pei, JIAO Licheng, et al. Review of parallel deep neural network [J]. Chinese Journal of Computers, 2018, 41(8): 1861-1881.
[6]BOTTOU L, CURTIS F E, NOCEDAL J, et al. Optimization methods for large-scale machine learning [J]. SIAM Review, 2018, 60(2): 223-311.
[7]高赫然, 吳恒, 許源佳, 等. 面向深度學(xué)習(xí)訓(xùn)練的內(nèi)存交換機制綜述 [J]. 軟件學(xué)報, 2023, 34(12): 5862-5886.
GAO Heran, WU Heng, XU Yuanjia, et al. Survey on memory swapping mechanism for deep learning training [J]. Journal of Software, 2023, 34(12): 5862-5886.
[8]巨濤, 劉帥, 王志強, 等. 深度神經(jīng)網(wǎng)絡(luò)模型任務(wù)切分及并行優(yōu)化方法 [J/OL]. 北京航空航天大學(xué)學(xué)報: 1-18[2024-04-13]. https://doi.org/10.13700/j.bh.1001-5965.2022.0731.
JU Tao, LIU Shuai, WANG Zhiqiang, et al. Task segmentation and parallel optimization of DNN model [J/OL]. Journal of Beijing University of Aeronautics and Astronautics: 1-18[2024-04-13]. https://doi.org/10.13700/j.bh.1001-5965.2022.0731.
[9]YAN Guangfeng, LI Tan, WU Kui, et al. Killing two birds with one stone: quantization achieves privacy in distributed learning [J]. Digital Signal Processing, 2024, 146: 104353.
[10]陳世達, 劉強, 韓亮. 降低分布式訓(xùn)練通信的梯度稀疏壓縮方法 [J]. 浙江大學(xué)學(xué)報(工學(xué)版), 2021, 55(2): 386-394.
CHEN Shida, LIU Qiang, HAN Liang. Gradient sparsification compression approach to reducing communication in distributed training [J]. Journal of Zhejiang University(Engineering Science), 2021, 55(2): 386-394.
[11]王恩東, 閆瑞棟, 郭振華, 等. 分布式訓(xùn)練系統(tǒng)及其優(yōu)化算法綜述 [J]. 計算機學(xué)報, 2024, 47(1): 1-28.
WANG Endong, YAN Ruidong, GUO Zhenhua, et al. A survey of distributed training system and its optimization algorithms [J]. Chinese Journal of Computers, 2024, 47(1): 1-28.
[12]STROM N. Scalable distributed DNN training using commodity GPU cloud computing [C]//Proceedings of the Interspeech 2015. Paris, France: International Speech Communication Association, 2015: 1488-1492.
[13]DRYDEN N, MOON T, JACOBS S A, et al. Communication quantization for data-parallel training of deep neural networks [C]//2016 2nd Workshop on Machine Learning in HPC Environments (MLHPC). Piscataway, NJ, USA: IEEE, 2016: 1-8.
[14]CHEN C Y, CHOI J, BRAND D, et al. AdaComp: adaptive residual gradient compression for data-parallel distributed training [C]//Proceedings of the Thirty-Second AAAI Conference on Artificial Intelligence and Thirtieth Innovative Applications of Artificial Intelligence Conference and Eighth AAAI Symposium on Educational Advances in Artificial Intelligence. Palo Alto, CA, USA: AAAI Press, 2018: 2827-2835.
[15]RENGGLI C, ASHKBOOS S, AGHAGOLZADEH M, et al. SparCML: high-performance sparse communication for machine learning [C]//Proceedings of the International Conference for High Performance Computing, Networking, Storage and Analysis. New York, USA: Association for Computing Machinery, 2019: 11.
[16]SATTLER F, WIEDEMANN S, MLLER K R, et al. Sparse binary compression: towards distributed deep learning with minimal communication [C]//2019 International Joint Conference on Neural Networks (IJCNN). Piscataway, NJ, USA: IEEE, 2019: 1-8.
[17]SHI Shaohuai, WANG Qiang, ZHAO Kaiyong, et al. A distributed synchronous SGD algorithm with global top-k sparsification for low bandwidth networks [C]//2019 IEEE 39th International Conference on Distributed Computing Systems (ICDCS). Piscataway, NJ, USA: IEEE, 2019: 2238-2247.
[18]LIN Yujun, HAN Song, MAO Huizi, et al. Deep gradient compression: reducing the communication bandwidth for distributed training [EB/OL]. (2020-06-23)[2024-01-01]. https://arxiv.org/abs/1712.01887.
[19]SHI Shaohuai, TANG Zhenheng, WANG Qiang, et al. Layer-wise adaptive gradient sparsification for distributed deep learning with convergence guarantees [M]//Frontiers in Artificial Intelligence and Applications. Amsterdam, Netherlands: IOS Press, 2020: 1467-1474.
[20]SHI Shaohuai, CHU Xiaowen, CHEUNG K C, et al. Understanding top-K sparsification in distributed deep learning [EB/OL]. (2019-11-20)[2024-01-01]. https://arxiv.org/abs/1911.08772.
[21]GUO Bingjun, LIU Yazhi, ZHANG Chunyang. A partition based gradient compression algorithm for distributed training in AIoT [J]. Sensors, 2021, 21(6): 1943.
[22]ABDELMONIEM A M, AHMED A, ALOUINI M S, et al. An efficient statistical-based gradient compression technique for distributed training systems [J]. Proceedings of Machine Learning and Systems, 2021, 3: 297-322.
[23]CHMIEL B, BEN-URI L, SHKOLNIK M, et al. Neural gradients are near-lognormal: improved quantized and sparse training [EB/OL]. (2020-10-12)[2024-01-01]. https://arxiv.org/abs/2006.08173.
[24]SONG Yingjie, AI Yongbao, XIAO Xiong, et al. HCEC: an efficient geo-distributed deep learning training strategy based on wait-free back-propagation [J]. Journal of Systems Architecture, 2024, 148: 103070.
[25]ZHANG Hao, ZHENG Zeyu, XU Shizhen, et al. Poseidon: an efficient communication architecture for distributed deep learning on GPU clusters [C]//Proceedings of the 2017 USENIX Conference on Usenix Annual Technical Conference. Berkeley, CA, USA: USENIX Association, 2017: 181-193.
[26]JAYARAJAN A, WEI Jinliang, GIBSON G, et al. Priority-based parameter propagation for distributed DNN training [J]. Proceedings of Machine Learning and Systems, 2019, 1: 132-145.
[27]PENG Yanghua, ZHU Yibo, CHEN Yangrui, et al. A generic communication scheduler for distributed DNN training acceleration [C]//Proceedings of the 27th ACM Symposium on Operating Systems Principles. New York, USA: Association for Computing Machinery, 2019: 16-29.
[28]吳艷霞, 梁楷, 劉穎, 等. 深度學(xué)習(xí)FPGA加速器的進展與趨勢 [J]. 計算機學(xué)報, 2019, 42(11): 2461-2480.
WU Yanxia, LIANG Kai, LIU Ying, et al. The progress and trends of FPGA-based accelerators in deep learning [J]. Chinese Journal of Computers, 2019, 42(11): 2461-2480.
(編輯 亢列梅)