## 分散式訓練的類型:Data Parallel vs. Model Parallel 隨著深度學習模型的規模不斷擴大,單一計算設備已無法滿足訓練所需的記憶體和運算能力,分散式訓練技術因此成為解決這一問題的關鍵手段,在眾多分散式訓練方法中,數據並行(Data Parallelism)和模型並行(Model Parallelism)是最基礎且應用廣泛的兩種類型。 ## 什麼是 Data Parallel? 數據並行將訓練數據分成多份,分配到不同設備,每設備持有一份完整模型副本,獨立計算梯度後同步更新參數,其簡單高效,適合數據量大且模型較小的場景,梯度同步是數據並行的核心,常用方式包括 Parameter Server (PS) 和 Ring-All-Reduce。 ### Parameter Server(PS) Parameter Server 採用中心化架構,設有一個或多個參數伺服器(Server)負責存儲和管理全局模型參數,訓練過程中,各工作節點(Worker)計算本地梯度後發送至參數伺服器,伺服器聚合梯度並更新參數,再將更新後的參數廣播回各工作節點,這種方式易於擴展到大量節點,但在伺服器成為瓶頸時(如通信負載過高),效率可能下降。  ### Ring-All-Reduce Ring-All-Reduce 則是去中心化的同步方式,節點間形成環狀拓撲結構。各節點將梯度分塊,依次傳遞給下一個節點,通過多次傳遞與局部聚合完成全局梯度計算,最終所有節點獲得一致的更新結果。其優勢在於通信負載均勻分擔,無單點瓶頸,特別適合高帶寬環境,如 NVIDIA NCCL 支援的 GPU 集群,但隨著節點數增加,環內傳輸次數也增多,可能影響速度  ## 什麼是 Model Parallel? 當深度學習模型的參數量遠超單張 GPU 所能容納(例如 GPT-3、PaLM、LLaMA-3 等),傳統的數據並行已無法滿足訓練需求,此時就必須採用模型並行(Model Parallelism),也就是將模型本身拆解成數個部分,分布到多張 GPU 上運行。 ### Tensor slicing(張量切分) Tensor Slicing 是操作層內部的矩陣切分(例如線性層的權重矩陣),並將這些切分後的張量分配到不同 GPU 上計算,例如矩陣乘法 $X ⋅ A = Y$,其中 A 是權重矩陣, 𝑋 是輸入張量, 𝑌 是輸出張量,將 A 按行或列拆分,在多張 GPU 上平行處理,最後通過通信機制將結果整合。  以下圖片展示了 MLP 和 Self-Attention 對於Column-wise 和 Row-wise Slicing 的結合,分擔到多設備減輕記憶體壓力。 * Row-wise slicing:按列分割,需要通信來合併結果(加法操作),因為每個設備計算的結果是對最終輸出的部分貢獻,而不是獨立的部分。 * Column-wise slicing:按行分割,每個設備計算部分輸出,無需額外通信即可拼接結果。  ### Layer-wise partitioning(層級切分) Layer-wise 是模型並行的傳統方式,將神經網路按層次分割到多個設備,例如,訓練 BERT-Large(3.4 億參數)時,單 16GB GPU 不足,可將 24 層 Transformer 分為前 12 層與後 12 層,部署至兩 GPU,利用 NVLink 高效傳輸中間結果完成訓練,但設備間因層間依賴可能導致閒置,效率低於 Tensor Slicing。  ## Pipeline Parallelism 在典型的深度學習模型中,尤其是 Transformer 架構,其模型由多層堆疊而成(如 GPT 的上百層 Transformer blocks),這些層的結構相對規則,非常適合沿模型深度方向進行切割,例如,若一個模型有 24 層,使用 4 張 GPU 訓練,則可以將每 6 層視為一個階段,分別交由不同的 GPU 負責。資料在訓練時被劃分成多個 micro-batches,第一個 micro-batch 從第一張 GPU 開始進行前向傳播,當它被傳遞至第二張 GPU 時,第一張 GPU 就可以立刻開始處理下一個 micro-batch。這樣一來,各 GPU 可以同時處理不同階段的不同資料,實現高度並行。 ### 優勢 1. 即使單張 GPU 記憶體不足以容納整個模型,也能透過模型切段的方式進行訓練,同時提升訓練吞吐量。 2. Pipeline Parallelism 是以「模型層的順序結構」為基礎進行切分,更貼近語義層次上的劃分,因此也常被視為 Layer-wise Model Parallelism 的實作之一。 ### 挑戰 1. Pipeline Bubble (管線空轉):當訓練開始時,前段 GPU 會先開始工作,而後段 GPU 必須等待前面的資料處理完成,才能接手運算,這造成初期與結尾的 GPU 利用率偏低。 2. 反向傳播的梯度也必須依序回傳,對訓練時序管理與記憶體調度提出更高要求。 為解決這些問題,研究人員提出了「微批次重疊(micro-batch interleaving)」與「梯度累積(gradient accumulation)」等技術,用以減少 idle time 並平衡 forward / backward 的流動。  ### 實際案例 Google 在訓練 PaLM(5400 億參數)與 Gemini 模型時,就廣泛採用 GSPMD(General and Scalable Parallelism for ML)框架,結合了 pipeline、tensor、sharded、data 並行四種策略,才得以成功推動超兆級模型的訓練。 ## 總結 分散式平行化訓練技術並非單一方法,而是一組可根據硬體條件與模型特性靈活組合的策略工具箱,現今的SOTA模型往往採用 Data Parallel + Tensor Parallel + Pipeline Parallel 三重混合策略,配合進階通訊協定與記憶體管理機制,在數百張 GPU 甚至 TPU 上高效訓練超大規模模型。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up