計算機網絡通信中最重要兩個衡量指標主要是 帶寬 和 延遲。分佈式訓練中需要傳輸大量的網絡模型參數,網絡通信至關重要。
AI集羣通信實現方式
AI集羣是由多臺包含CPU、內存、GPU的服務器組成,需要考慮機器內通信和機器間通信。
機器內通信通常包括共享內存、PCIe、NVLink等方式,機器間主要通過TCP/IP網絡和RDMA網絡(直連模式)。
機器內通信
同一機器內:
- CPU之間可以通過共享內存來實現
- CPU和GPU 可以通過PCIE\NVLink
- GPU之間,可以通過NVLink直連
機器間通信
機器間通信,主要通過TCP/IP網絡,但是用網絡,需要過CPU,有延時損耗,現在最新的方方案是用RDMA直連網絡。
通信協調硬件
- GPU與GPU 通過nvlink,GPU和CPU也通過NVLink綠色線
- CPU通過總線共享內存
- 服務器之間,通過RDMA網卡
PCIE
PCIe 5.0 最高速率是32G
NVLink
Nv爲了解決PCIE速度不高的問題,研發了NVLink解決方案,支持CPU和GPU互聯,GPU互聯。啓用 NVLink 的系統中,CPU 發起的事務(如控制和配置)仍然通過 PCIe 連接。
保留 PCIe 編程模型,同時在連接帶寬方面提供巨大的優勢。
RDMA
RDMA主要特性:
• CPU Offload:無需CPU干預,遠程主機CPU緩存(cache)不會被訪問的內存內容所填充
• Kernel Bypass:專有 Verbs interface ,應用程序可以直接在用戶態執行數據傳輸
• Zero Copy:每個應用程序都能直接訪問集羣中的設備的虛擬內存
我們可以通過下面的圖來對比,左邊藍色是傳統TCP/IP,右邊是RDMA,通過直連技術可以不經過內存區域拷貝。
RDMA,公司用的RoCE方案。
通信協調軟件
MPI
通用接口,可調用 Open-MPI, MVAPICH2, Intel MPI等。
MPI(Message Passing Interface)定義了多個原語的消息傳遞接口,這一接口主要被用於多進程間的通信。MPI 系統通信方式是建立在點對點通信之上。而集合通訊是建立在端到端通信的基礎上,在一組進程內的通訊原語。
NCCL
NCCL 架構和工作流程:
NVIDIA AI 庫依賴 NCCL 提供編程抽象,通過高級拓撲檢測、通用路徑搜索和針對 NVIDIA 架構優化的算法,針對每個平臺和拓撲進行高度調整。 NCCL API 從 CPU 啓動,GPU執行,在 GPU 內存之間移動或交換數據。最後利用 NVLink 聚合多個高速 NIC 的帶寬。
Pytorch中,MPI和NCCL 對比,MPI主要是CPU,NCCL是GPU:
總結
硬件通過PCIe、NVLink、RDMA來針對不同場景實現硬件通信,軟件主要是MPI和NCCL。
參考
DeepLearningSystem/03.communication.pdf at main · chenzomi12/DeepLearningSystem (github.com)