大規模訓練
環狀全歸約(ring all-reduce)
在 N 個裝置間平均梯度是一次 all-reduce,而最樸素的做法——每個裝置把完整梯度送到某一個節點,由它加總再廣播回去——會讓那個節點成為瓶頸,其流量隨 N 成長。環狀全歸約藉由把裝置排成一個邏輯環、每個裝置只跟它的兩個鄰居對話,來消除這個瓶頸。梯度被切成 N 個塊,這些塊繞著環循環,使工作量與頻寬由所有人均攤。
它分兩個階段。在 reduce-scatter 階段,歷時 N−1 步,每個裝置把一個塊送給它的後繼者並把收到的塊加進來,於是該階段結束後每個裝置各持有一個完全加總好的塊。在 all-gather 階段,這些加總好的塊再循環 N−1 步,直到每個裝置都擁有完整的已歸約梯度。每個裝置送出的總資料量約為梯度大小的兩倍,與 N 無關——這就是頻寬最優的性質:每裝置通訊量不隨裝置數成長,只有延遲(步數)會。
環狀全歸約因百度的實作而在深度學習界普及,並體現於 NCCL 等函式庫中,是資料平行梯度同步背後的主力。它的弱點是大環上的延遲——N−1 個循序躍點——因此正式環境的集合通訊會用階層式或樹狀變體,在節點內結合環的頻寬最優性、在節點間採用更淺的拓樸。
T \approx 2(N-1)\,\alpha + 2\,\frac{N-1}{N}\,\frac{S}{\beta}
N 個裝置對大小 S 資料做環狀全歸約的時間:延遲項隨 N 成長,但每裝置的頻寬項趨近 2S/β、與 N 無關。
環狀全歸約是頻寬最優、而非延遲最優:每個裝置搬動的量與 N 無關為常數,但完成要 2(N−1) 個循序步,這正是巨型叢集要在環之上疊樹的原因。
又稱
另見