大規模訓練

管線平行(pipeline parallelism)

管線平行從和張量平行相反的方向切模型:它不把每層切到多個裝置,而是把連續的整層分組指派給不同裝置,稱為階段(stage)。一個批次先流過第 0 階段,其輸出成為第 1 階段的輸入,依此類推——像一條裝配線。它的吸引力在於唯一的通訊是在每個階段邊界對激活做點對點的傳遞,遠比張量平行所需的 all-reduce 便宜,因此管線階段可以跨節點。

代價是管線氣泡:當第 0 階段在處理第一筆輸入時,後面每個階段都閒置著,排空時也對稱地閒置。為了縮小氣泡,批次被切成許多微批次,依某種排程被打入管線。GPipe 先填滿再清空;1F1B(一前向一反向)排程交錯前向與反向微批次以限制激活記憶體;交錯式與零氣泡排程則藉由給每個裝置數個不連續的階段塊,把閒置時間壓得更低。氣泡比例大致以「階段數除以微批次數」下降。

管線平行是跨節點擴展的首選軸,因為它通訊輕;但它對負載不均很敏感——層對階段切得不均,某些階段就得等——而且它的激活記憶體隨在飛行中的微批次數成長,這也是它常與激活重算搭配的原因。

\text{bubble fraction} = \frac{p-1}{m+p-1}

p 個階段、m 個微批次的同步管線中的閒置時間比例;微批次越多,氣泡越小。

張量平行在層內切分、需要節點內頻寬;管線平行跨層切分、能容忍慢速連線——正是這份互補性讓 3D 平行把兩者巢狀嵌套。

又称
PPinter-layer parallelism管線平行層間平行