運算極限:單一 GPU 的運算能力有其天花板,如今要訓練最頂尖的語言模型,需要仰賴具備 Exaflops 等級算力的超級電腦。
記憶體極限:由於模型參數變得無比巨大,單一 GPU 已經無法將整個模型裝入記憶體中。
解決方案:必須透過多 GPU 與多機器平行化,將記憶體與運算需求分散。這包含了節點內(Intra-node)的高速互連(如 NVLink,速度極快),以及跨節點(Inter-node)的高速網路通訊(如 InfiniBand,速度相較 NVLink 慢上許多)。這種硬體通訊架構的階層性與速度差異,將會直接影響後續平行化策略(如 tensor parallel 與 pipeline parallel)的設計與配置。

All Reduce (全歸約): 將所有機器(或 GPU)上的數據進行某種合併運算(例如相加總),完成後,將這個最終的完整結果複製並發送給「每一台」機器。這個操作的通訊成本大約是處理數據總量的兩倍。在資料平行訓練中,同步所有機器的梯度時最常使用這個操作。

Broadcast (廣播): 將「單一」台機器(例如 rank 2)上的某一份資料,原封不動地複製並派發給系統中所有「其他」的機器。

Reduce (歸約): 與 All Reduce 類似,會將所有機器上的輸入數據進行合併運算(例如相加總),但最大的不同是,最終的計算結果只會發送並保存在「其中一台」指定的機器上,而不是所有人。

All Gather (全收集): 假設每台機器都只持有一小部分的資料(例如模型參數的一個切片),這個操作會讓每台機器將自己擁有的部分發送給其他人。換句話說,就是把自己的東西分享給所有人,最終每一台機器都會收集齊全,擁有系統中所有完整的資料。

Reduce Scatter (歸約分散): 這可以看作是 All Reduce 的局部版本。機器會先將數據的各個部分(例如矩陣的不同 row)分別進行合併運算,接著將運算完的不同片段,分散發送給對應的不同機器(例如:片段 0 傳給 rank 0 機器、片段 1 傳給 rank 1 機器)。

一個完整的 All Reduce 操作,其實可以等價拆解為先執行 Reduce Scatter,接著再執行 All Gather 兩個步驟。 在網路頻寬受限的環境下,這種「先歸約分散、再全收集」的做法是最佳的通訊策略,因為這兩個步驟加起來的通訊成本,剛好就等於直接執行一次 All Reduce。這也是後續理解 ZeRO 策略如何節省記憶體的關鍵基礎。
