---
# System prepended metadata

title: 分散式訓練的類型：Data Parallel vs. Model Parallel vs. Pipeline Parallel
tags: [分散式訓練]

---

## 分散式訓練的類型：Data Parallel vs. Model Parallel
隨著深度學習模型的規模不斷擴大，單一計算設備已無法滿足訓練所需的記憶體和運算能力，分散式訓練技術因此成為解決這一問題的關鍵手段，在眾多分散式訓練方法中，數據並行（Data Parallelism）和模型並行（Model Parallelism）是最基礎且應用廣泛的兩種類型。

## 什麼是 Data Parallel？
數據並行將訓練數據分成多份，分配到不同設備，每設備持有一份完整模型副本，獨立計算梯度後同步更新參數，其簡單高效，適合數據量大且模型較小的場景，梯度同步是數據並行的核心，常用方式包括 Parameter Server (PS) 和 Ring-All-Reduce。

### Parameter Server(PS)
Parameter Server 採用中心化架構，設有一個或多個參數伺服器（Server）負責存儲和管理全局模型參數，訓練過程中，各工作節點（Worker）計算本地梯度後發送至參數伺服器，伺服器聚合梯度並更新參數，再將更新後的參數廣播回各工作節點，這種方式易於擴展到大量節點，但在伺服器成為瓶頸時（如通信負載過高），效率可能下降。
![image](https://hackmd.io/_uploads/SkX0hxNAye.png)

### Ring-All-Reduce
Ring-All-Reduce 則是去中心化的同步方式，節點間形成環狀拓撲結構。各節點將梯度分塊，依次傳遞給下一個節點，通過多次傳遞與局部聚合完成全局梯度計算，最終所有節點獲得一致的更新結果。其優勢在於通信負載均勻分擔，無單點瓶頸，特別適合高帶寬環境，如 NVIDIA NCCL 支援的 GPU 集群，但隨著節點數增加，環內傳輸次數也增多，可能影響速度
![image](https://hackmd.io/_uploads/rySdTgE0yl.png)

## 什麼是 Model Parallel？
當深度學習模型的參數量遠超單張 GPU 所能容納（例如 GPT-3、PaLM、LLaMA-3 等），傳統的數據並行已無法滿足訓練需求，此時就必須採用模型並行（Model Parallelism），也就是將模型本身拆解成數個部分，分布到多張 GPU 上運行。

### Tensor slicing（張量切分）
Tensor Slicing 是操作層內部的矩陣切分（例如線性層的權重矩陣），並將這些切分後的張量分配到不同 GPU 上計算，例如矩陣乘法 $X ⋅ A = Y$，其中 A 是權重矩陣， 𝑋 是輸入張量， 𝑌 是輸出張量，將 A 按行或列拆分，在多張 GPU 上平行處理，最後通過通信機制將結果整合。

![image](https://hackmd.io/_uploads/SkmhNZNAJx.png)
以下圖片展示了 MLP 和 Self-Attention 對於Column-wise 和 Row-wise Slicing 的結合，分擔到多設備減輕記憶體壓力。

* Row-wise slicing：按列分割，需要通信來合併結果（加法操作），因為每個設備計算的結果是對最終輸出的部分貢獻，而不是獨立的部分。
* Column-wise slicing：按行分割，每個設備計算部分輸出，無需額外通信即可拼接結果。

![image](https://hackmd.io/_uploads/B1O-wbV0yg.png)


### Layer-wise partitioning（層級切分）
Layer-wise 是模型並行的傳統方式，將神經網路按層次分割到多個設備，例如，訓練 BERT-Large（3.4 億參數）時，單 16GB GPU 不足，可將 24 層 Transformer 分為前 12 層與後 12 層，部署至兩 GPU，利用 NVLink 高效傳輸中間結果完成訓練，但設備間因層間依賴可能導致閒置，效率低於 Tensor Slicing。

![image](https://hackmd.io/_uploads/rkujVZNC1e.png)

## 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 的流動。
![image](https://hackmd.io/_uploads/rJ926ZV0kg.png)

### 實際案例
Google 在訓練 PaLM（5400 億參數）與 Gemini 模型時，就廣泛採用 GSPMD（General and Scalable Parallelism for ML）框架，結合了 pipeline、tensor、sharded、data 並行四種策略，才得以成功推動超兆級模型的訓練。

## 總結
分散式平行化訓練技術並非單一方法，而是一組可根據硬體條件與模型特性靈活組合的策略工具箱，現今的SOTA模型往往採用 Data Parallel + Tensor Parallel + Pipeline Parallel 三重混合策略，配合進階通訊協定與記憶體管理機制，在數百張 GPU 甚至 TPU 上高效訓練超大規模模型。