核心概念
本文提出了一種稱為「詞彙平行化」的新方法,用於解決大型語言模型訓練中,因詞彙層造成流水線平行化效能瓶頸的問題,透過將詞彙層計算分散到所有流水線設備,並優化計算順序和通訊策略,有效提升了模型訓練的吞吐量和記憶體使用效率。
摘要
大型語言模型訓練的效能瓶頸
近年來,隨著 Transformer 模型規模不斷擴大,模型平行化技術成為深度學習領域的重要研究方向。其中,流水線平行化(Pipeline Parallelism)由於其低通訊成本和高算術強度,成為訓練大型模型的常用方法。然而,流水線平行化面臨著兩個主要挑戰:流水線氣泡(Pipeline Bubbles)和高記憶體消耗。
詞彙層造成的不平衡問題
本文關注的是一個經常被忽視的問題:詞彙層(Vocabulary Layers)造成的不平衡問題。傳統上,Transformer 層會被平均分配到不同的流水線階段,而第一階段包含額外的輸入層,最後階段包含額外的輸出層。這種不平衡的設置會嚴重影響效能:
- 由於工作負載較少,其他流水線階段會出現流水線氣泡。
- 第一階段的額外輸入層加劇了記憶體瓶頸。
- 隨著詞彙量增加,這種不平衡會更加明顯。
詞彙平行化:解決方案
為了徹底解決這個問題,本文提出了詞彙平行化(Vocabulary Parallelism)方法,其設計原則如下:
- 將詞彙層按詞彙維度進行分割,並平均分配到所有流水線設備。
- 將詞彙層的計算表示為類似於 Transformer 層的前向/後向傳遞的傳遞過程,使其原生於流水線平行化。
- 將詞彙傳遞整合到流水線排程中,不應顯著影響原始排程的記憶體和效率。
詞彙傳遞的建構與優化
本文詳細介紹了如何將詞彙層分割成多個計算傳遞,並將其分配到不同的流水線設備上。同時,為了減少通訊障礙,本文提出了兩種新穎的演算法:
- 前向階段優化:將計算 softmax 所需的全局最大值和總和的通訊延遲到計算 softmax 之後,有效減少了通訊次數。
- 後向階段優化:將所有三個 all-reduce 通訊延遲到計算輸入梯度的矩陣乘法之後,進一步減少了通訊次數。
流水線排程
本文採用 Qi 等人提出的框架來建構流水線排程,將詞彙傳遞整合到現有的流水線排程中,例如 1F1B 和 V-Half。通過在最後一個 Transformer 層的前向和後向傳遞之間插入適當的時間間隔,為詞彙層計算創造空間,同時確保排程滿足所有依賴關係。
實驗結果
實驗結果表明,詞彙平行化方法可以顯著提高模型訓練的吞吐量,最高可達 51%,同時降低了峰值記憶體消耗。此外,當與記憶體平衡的排程(如 V-Half)結合使用時,詞彙平行化可以實現完全的記憶體平衡。
總結
詞彙平行化方法有效解決了大型語言模型訓練中詞彙層造成的不平衡問題,顯著提高了模型訓練的效率。
統計資料
在 Gemma2 9B 模型中,詞彙量為 256k 時,輸出層的計算量和參數記憶體大約是 Transformer 層的 5 倍。
與 na¨ıve 方法相比,詞彙平行化方法的吞吐量提高了 5% 到 51%。
詞彙平行化方法僅增加了少量且恆定的激活記憶體開銷。
與交錯流水線相比,詞彙平行化方法在 32 個 GPU 上的端到端訓練速度提高了約 11%。
在 24 個設備上,將詞彙量填充為 256032(48 的倍數)比使用原始值 256008 的效能提高了約 8%。
對於 21B 模型,詞彙平行化在 MFU 中的效能比交錯流水線高出 6.7% 到 8.2%。
在 V-Half 排程上,詞彙平行化方法的吞吐量比基準方法高出 7.2% 到 143%。
在 V-Half 排程上,基準方法在不同流水線設備之間的記憶體使用不平衡高達 45GB,而詞彙平行化方法實現了平衡的記憶體使用。