機器學習系統與基礎設施
集合通訊(collective communication,NCCL)
當許多 GPU 共同訓練一個模型時,它們無時無刻都得合併或交換張量——把每個人的梯度加總、收齊一塊激活的各個分片、廣播一個參數。集合通訊(collective)就是一種群體運算:每個 GPU 都參與,且結果取決於所有人。NCCL 就是在不管底下用什麼互連的情況下,高效實作這些集合運算的函式庫。
主力是全歸約(all-reduce):把一個張量跨所有 rank 加總,再把結果送回每個 rank;頻寬最優的標準實作是環狀全歸約(ring all-reduce)——先做 reduce-scatter,再沿著環做 all-gather——另有針對延遲敏感或多節點情況的樹狀與階層式變體。NCCL 也提供 all-gather、reduce-scatter、廣播與點對點傳送。它具備拓樸感知,會挑選能善用節點內快速 NVLink 與跨節點 InfiniBand 的環與樹,並跑在 CUDA 串流上,好讓通訊與運算重疊。
資料平行訓練每一步就是一次梯度全歸約;張量平行與序列平行是在每層內部做 all-gather 與 reduce-scatter;FSDP 與 ZeRO 把參數分片、再用 all-gather 即時重組。因此集合通訊的頻寬,以及能否把它藏在運算背後,往往是大規模訓練吞吐量的綁定限制。
T_{\mathrm{ring}} \approx 2\,\frac{N-1}{N}\cdot\frac{D}{B}
環狀全歸約每個 rank 約搬動 2(N-1)/N 倍的資料 D,除以連結頻寬 B,因此其時間幾乎與 GPU 數 N 無關——這正是它能擴展的關鍵性質。
又称
另见