流水線並行(Pipeline Parallelism)是什麼?

將深度神經網路的不同層分配到不同的 GPU 設備上,讓多個 micro-batch 在不同層上交叉執行以提高 GPU 利用率的分佈式訓練方法。|本頁含完整原理、應用場景、iPAS 考試重點與 3 個常見問答。

英文
Pipeline Parallelism
主題標籤
模型訓練、分佈式訓練、深度學習
考點定位
非 iPAS 核心術語
最後更新
2026/06/22
流水線並行(Pipeline Parallelism)是什麼? 模型訓練分佈式訓練
術語快查

搜尋意圖: 如果你在找「流水線並行 是什麼」或「流水線並行 和相近概念差在哪」,先看這頁的短定義、完整說明與延伸比較。

TL;DR: 將深度神經網路的不同層分配到不同的 GPU 設備上,讓多個 micro-batch 在不同層上交叉執行以提高 GPU 利用率的分佈式訓練方法。

實用情境: 適合用在閱讀 AI 文章、產品文件或和同事討論時,先用一頁快速對齊概念。

下一步: 先讀完定義,再往下看延伸比較與對應工具,把概念轉成實際應用。

將深度神經網路的不同層分配到不同的 GPU 設備上,讓多個 micro-batch 在不同層上交叉執行以提高 GPU 利用率的分佈式訓練方法。

核心概念

流水線並行(Pipeline Parallelism)的核心思想是層級的模型分割。將一個深層模型的不同層分配到不同的 GPU 設備上,形成一個線性的流水線。

考慮一個有 8 層的模型和 4 個 GPU 的情況。流水線並行將其分配為:

  • GPU0:第 1-2 層
  • GPU1:第 3-4 層
  • GPU2:第 5-6 層
  • GPU3:第 7-8 層

訓練時,一個完整的 batch 被進一步分割成多個 micro-batch(例如 4 個)。這樣可以實現流水線:

  • 時間步 1:GPU0 處理 micro-batch 1
  • 時間步 2:GPU0 處理 micro-batch 2,GPU1 處理 micro-batch 1 的輸出
  • 時間步 3:GPU0 處理 micro-batch 3,GPU1 處理 micro-batch 2,GPU2 處理 micro-batch 1
  • ...

這樣,所有 GPU 都在忙碌,提高了整體的計算利用率。

流水線並行的優勢包括:

  1. 降低通訊帶寬要求。設備間的通訊只發生在層邊界,通常是激活值的傳遞,通訊量相對較小。
  2. 適合層數多的模型。對於層數很多但每層參數不太大的模型(如某些 Transformer),流水線並行效果好。
  3. 易於實現和理解。流水線的邏輯相對直觀。

流水線並行的劣勢是:

  1. 氣泡開銷。由於流水線填充和清空的過程,會產生一定的計算浪費(氣泡)。
  2. 複雜的梯度同步。反向傳播需要確保梯度同步正確。
  3. 記憶體使用增加。需要存儲中間激活值以供反向傳播使用,特別是當 micro-batch 數多時。

運作原理

流水線並行的運作涉及前向傳播、反向傳播和梯度累積三個階段。

前向傳播階段:

  1. GPU0 接收輸入 batch,將其分割成多個 micro-batch。
  2. GPU0 對 micro-batch 1 執行前向傳播,將輸出(激活值)發送給 GPU1。
  3. GPU0 同時對 micro-batch 2 執行前向傳播。
  4. GPU1 接收來自 GPU0 的激活值,執行其層的前向傳播,將輸出發送給 GPU2。
  5. 這個過程持續,形成流水線,直到所有 micro-batch 都完成前向傳播。

反向傳播階段:

  1. 最後一個 GPU(GPU3)首先計算其層的梯度。
  2. 梯度沿著流水線反向傳播,每個 GPU 計算其層的梯度。
  3. 梯度被累積(對所有 micro-batch 的梯度求和)。
  4. 參數梯度用於更新該 GPU 上層的參數。

通訊同步: 在某些實現中(如 GPipe),完成一個完整 batch 的前向傳播後,才開始反向傳播,以最小化通訊開銷。在其他實現中(如 PipeDream),可能採用異步的方式,反向傳播立即開始,這可以減少流水線氣泡。

實際應用

流水線並行在訓練非常大的模型時是必不可少的。Google 的 PipeDream 項目展示了流水線並行在訓練 BERT 等大型模型上的高效性。

在邊界計算中,流水線並行用於在有限的 GPU 資源上訓練大型模型。通過將模型分割到多個 GPU,研究人員可以在沒有超大 GPU 集群的情況下訓練模型。

在雲計算中,流水線並行用於優化多租户環境下的資源利用。系統可以根據可用資源動態調整流水線深度。

在邊緣推理中,流水線並行也適用。將模型分割到多個邊緣設備上,實現分佈式推理。

在微調場景中,研究人員使用流水線並行在有限的 GPU 上微調非常大的模型,減少對昂貴 GPU 的需求。

常見誤區

一個常見的誤區是認為流水線並行沒有開銷。實際上,流水線氣泡是一個重要的開銷。當 GPU 數多或 micro-batch 數少時,氣泡比例較大,加速效果受限。

另一個誤區是認為流水線並行和張量並行不能混用。實際上,它們可以也應該混用。在許多大型模型訓練中,同時使用數據並行、流水線並行和張量並行,以實現最優的性能。

還有人誤以為流水線深度(層數)越多越好。實際上,流水線深度受到氣泡比例和記憶體的限制。太深的流水線會導致過多的氣泡和記憶體壓力。

與相關技術的比較

流水線並行與張量並行都是模型並行技術,但分割位置不同。流水線並行在層級分割,張量並行在層內分割。

與數據並行相比,流水線並行用於分割模型,而數據並行分割輸入數據。三者常一起使用形成混合並行。

與激活檢查點(Activation Checkpointing)相關,激活檢查點減少激活值的記憶體使用,支援更深的流水線或更大的 micro-batch。

常見問題

流水線並行中的氣泡是什麼,如何最小化?

流水線氣泡是指某些 GPU 處於閒置狀態的時間。在流水線的填充階段(前 GPU 數個時間步),較後面的 GPU 還沒有接收到數據而閒置。在清空階段(最後幾個時間步),較前面的 GPU 已經完成計算而閒置。氣泡開銷 = (GPU 數 - 1) / (GPU 數 × micro-batch 數)。要最小化氣泡,應該增加 micro-batch 數,使得流水線在大部分時間都滿載。例如,4 個 GPU 的流水線,如果有 8 個 micro-batch,氣泡開銷是 25%;如果有 32 個 micro-batch,開銷降到 6%。

流水線並行如何決定最優的 micro-batch 大小?

micro-batch 大小需要平衡幾個因素。較小的 micro-batch 大小導致流水線更容易滿載(減少氣泡),但增加了通訊次數。較大的 micro-batch 大小減少通訊次數,但可能導致更多的氣泡。通常的做法是選擇一個中等的 micro-batch 大小,使得氣泡開銷在可接受的範圍內(如 < 20%)。同時需要考慮記憶體限制,因為每個 GPU 需要存儲多個 micro-batch 的激活值。例如,對於 4 個 GPU,可以嘗試 4-16 個 micro-batch。

流水線並行與數據並行的組合方式是什麼?

在實際訓練中,通常同時使用流水線並行和數據並行。例如,128 個 GPU 可以分為兩組:流水線組(4 個 GPU,每個 GPU 負責 2 層)和數據並行組(32 倍)。這樣,每個流水線內的 GPU 計算不同層,同時不同流水線實例處理不同的 batch。這種組合可以同時享受兩種並行化的優勢。通訊開銷被分為層間通訊(流水線,較小)和梯度同步(數據並行,通常使用高效的方法如梯度累積)。