- 分布式集合通信
- 一 基礎概念
- 分布式系統模型
- 節點與進程模型 多機多卡、多機多進程
- 通信模式
- 同步 、異步
- 集合通信定義
- 點對點通信 vs 集合通信
- 點對點通信
- 定義 :兩個節點之間的直接數據傳輸,通常基于專用鏈路或網絡路徑
- 通信范圍:僅涉及兩個節點(如A→B或B→A),支持雙向數據傳輸 1 2
- 示例 :電話呼叫、TCP/IP連接、MPI中的 MPI_Send 和 MPI_Recv
- 定義:一組節點(通信子)共同參與的全局操作,所有節點協同完成數據交換
- 通信范圍:涉及多個節點(如廣播、規約、全收集等),需所有節點同步調用函數
- 點對點通信
- 常見操作: Broadcast \ Reduce \ Allgather \AllReduce
- 點對點通信 vs 集合通信
- 性能指標
- 延遲 Latency
- 帶寬 Bandwidth
- 擴展性 Scalability
- 分布式系統模型
- 二 核心算法
- 廣播算法
- 洪泛算法(Simple Flooding)
- 基于樹的廣播(Tree-based Broadcast)
- 環形廣播(Ring Algorithm)
- 規約算法
- 線性規約(Linear Reduce)
- 二叉樹規約(Binary Tree Reduce)
- 全收集算法
- 循環全收集(Recursive DOUBLING Algorithm)
- 二叉樹全收集(Binary Tree Allgather)
- 全歸約算法
- 結合規約與廣播的Allreduce
- Ring-Allreduce算法(NVIDIA NCCL實現)
- 廣播算法
- 三 應用場景
- 分布式機器學習
- 梯度同步(Allreduce)
- 參數廣播(Broadcast)
- 科學計算
- 矩陣乘法中的通信優化
- 分布式FFT(快速傅里葉變換)
- 分布式存儲
- 數據分片與合并(Allgather)
- 一致性哈希與數據遷移
- 分布式機器學習
- 四 優化策略
- 通信與計算重疊
- 隱藏通信延遲的技術(Pipeline)
- 拓撲感知優化
- Mesh網絡與Ring網絡的通信策略
- 硬件拓撲映射(如GPU的NVLink)
- 混合算法
- 結合樹狀與環形結構的分層通信
- 動態調整算法(小規模用Ring,大規模用Tree)
- 通信與計算重疊
- 五 實踐工具與框架
- MPI(Message Passing Interface)
- MPI_Bcast、MPI_Reduce等函數
- NCCL(NVIDIA Collective Communications Library)
- GPU集合通信優化
- HCCL(Huawei Collective Communication Library)
- 華為Ascend芯片的集合通信實現
- PyTorch/TensorFlow
- 分布式訓練中的通信API
- HCCL與NCCL對比
- 維度 HCCL NCCL
- 適用硬件 華為昇騰AI處理器(NPU) NVIDIA GPU
- 通信算法 Mesh、Ring、HD、NHR、NB(自動選擇) Ring、Mesh、Bruck、Halving-Doubling等
- 傳輸優化 全硬化調度,SDMA/RDMA鏈路 多通道并行(block-level),NVLink/PCIe優化
- 流管理 主流+從流,Notify同步 CUDA Stream異步,多任務并發
- 容錯性 依賴硬件調度穩定性(需進一步擴展) 支持異步錯誤處理(ncclCommAbort)
- 生態支持 適配TensorFlow、PyTorch(單算子模式) 集成主流框架(PyTorch、TensorFlow等)
- 開源與定制 部分算法開源(Gitee),支持自定義開發 源代碼閉源,部分廠商基于其擴展(如BCCL)
- MPI(Message Passing Interface)
- 六 學習步驟
- 階段1:基礎入門
- 理解分布式系統模型
- 學習多機多卡(如GPU集群)的通信架構
- 掌握同步與異步通信的區別(例如:阻塞vs非阻塞API)
- 熟悉集合通信操作
- 實現簡單的點對點通信(如Send/Recv)
- 動手實現Broadcast和Reduce的基礎版本(例如:線性規約)
- 理解分布式系統模型
- 階段2:核心算法學習
- 廣播算法
- 實現洪泛算法,分析其缺點(如冗余通信)
- 學習樹狀廣播(如二叉樹廣播),優化通信復雜度
- 規約與全歸約
- 實現線性規約,理解其O(n)復雜度
- 優化為二叉樹規約,降低時間復雜度至O(logn)
- 結合廣播實現Allreduce(例如:先規約后廣播)
- 全收集算法
- 實現循環全收集(Recursive Doubling),分析其通信模式
- 對比樹狀全收集與環形全收集的性能差異
- 廣播算法
- 階段3:應用場景實踐
- 分布式機器學習案例
- 使用Allreduce實現梯度同步(如MNIST分布式訓練)
- 優化通信:對比同步Allreduce與異步參數更新
- 科學計算優化
- 實現分布式矩陣乘法,優化通信與計算比例
- 使用MPI_Alltoall實現數據分塊交換
- 性能調優
- 測試不同算法(Ring vs Tree)在不同節點數下的表現
- 使用NCCL或HCCL庫優化GPU通信
- 分布式機器學習案例
- 階段4:高級優化與擴展
- 通信與計算重疊
- 實現Pipeline技術,在通信時進行計算
- 使用異步API隱藏延遲(如Non-blocking MPI)
- 拓撲感知優化
- 分析服務器內Mesh網絡的通信策略(如NVIDIA的NVLink)
- 實現跨節點的Ring算法,減少網絡跳數
- 混合算法設計
- 結合樹狀與環形結構,設計分層通信策略
- 動態選擇算法(如小規模用Ring,大規模用Tree)
- 通信與計算重疊
- 階段5:工具與框架實戰
- MPI實踐
- 使用MPI實現Broadcast、Reduce和Allreduce
- 分析MPI的性能瓶頸(如通信延遲、帶寬限制)
- NCCL與HCCL
- 在GPU集群上使用NCCL優化Allreduce
- 對比不同框架(如NCCL vs PyTorch DCP)的性能
- 分布式框架集成
- 在PyTorch中實現分布式訓練,調用
- torch.distributed
- API
- 使用TensorFlow的MirroredStrategy進行參數同步
- MPI實踐
- 階段1:基礎入門
- 七 學習資源
- 書籍
- 《分布式系統:原理與范型》(原書第3版)
- 《MPI并行程序設計》
- 《深度學習系統優化》
- 書籍
- 八 實踐項目建議
- 初級項目
- 實現一個基于Socket的Broadcast算法
- 使用MPI實現Allreduce并測試不同節點數的性能
- 中級項目
- 優化Allreduce算法,結合樹狀與環形結構
- 在GPU集群上使用NCCL訓練ResNet模型
- 高級項目
- 設計一個混合通信策略(如Ring+Tree)并測試擴展性
- 實現分布式矩陣乘法,優化通信與計算比例
- 初級項目