晶片層 開放閱讀

NCCL

NVIDIA Collective Communications Library

概念 ID
nvidia-collective-communications-library
更新時間
2026-05-29
來源數量
待補

NCCL(NVIDIA Collective Communications Library)

3 秒看懂

NCCL 是 NVIDIA 的 GPU 集合通訊庫,負責在多 GPU、多節點之間高效完成資料同步(AllReduce、AllGather 等),是分散式 GPU 訓練的”通訊底座”——幾乎所有主流深度學習架構的多卡訓練都依賴它。

3 分鐘產業解釋

核心問題:為什麼需要 NCCL?

當模型規模超過單 GPU 視訊記憶體容量,或訓練資料量需要並行處理時,必須將計算拆分到多張 GPU 上。拆分之後,各 GPU 之間需要頻繁交換梯度、啟用值或模型引數——這就是集合通訊(Collective Communication)的職責。

┌─────────────────────────────────────────────────────┐
│                   分散式訓練場景                      │
│                                                     │
│   ┌──────┐    梯度同步     ┌──────┐                 │
│   │ GPU0 │◄═══════════════►│ GPU1 │                 │
│   └──────┘                 └──────┘                 │
│       ▲                         ▲                   │
│       │     NCCL 在此層工作     │                   │
│       ▼                         ▼                   │
│   ┌──────┐                 ┌──────┐                 │
│   │ GPU2 │◄═══════════════►│ GPU3 │                 │
│   └──────┘                 └──────┘                 │
│                                                     │
│   底層互連: NVLink / NVSwitch / PCIe / InfiniBand   │
└─────────────────────────────────────────────────────┘

NCCL 解決什麼?

痛點NCCL 的解決方案
手動管理多 GPU 通訊拓撲復雜自動檢測拓撲、選擇最優通訊路徑
不同互連(NVLink/PCIe/IB)API 不同統一抽象層,透明適配底層硬體
通訊與計算無法重疊支援非同步操作,允許計算-通訊 overlap
跨節點擴充套件困難原生支援多節點 InfiniBand/RoCE

15 分鐘專家深入

NCCL 在技術棧中的位置

┌─────────────────────────────────────────────────────────────┐
│                     應用層                                    │
│   PyTorch (DDP/FSDP)  |  TensorFlow  |  DeepSpeed  |  Megatron│
└────────────────────────────┬──────────────────────────────────┘


┌─────────────────────────────────────────────────────────────┐
│                   集合通訊庫層                                │
│         ┌─────────────────────────────────┐                  │
│         │            NCCL                 │ ◄── 本文主角      │
│         └─────────────────────────────────┘                  │
│         Gloo (Meta)  |  MPI (OpenMPI)  |  MSCCL (微軟)       │
└────────────────────────────┬──────────────────────────────────┘


┌─────────────────────────────────────────────────────────────┐
│                    硬體互連層                                 │
│   NVLink/NVSwitch (機內)  |  InfiniBand/RoCE (跨節點)        │
│          PCIe (通用備選)   |  TCP/IP (最低保障)               │
└─────────────────────────────────────────────────────────────┘

核心集合通訊原語

NCCL 實現的標準集合通訊操作:

操作語義典型應用場景
AllReduce所有節點得到全域性歸約結果資料並行梯度同步
AllGather所有節點收集到所有分片張量並行引數匯聚
ReduceScatter歸約後分散到各節點分散式最佳化器狀態分片
Broadcast一對多分發模型初始化同步
Reduce多對一歸約損失值彙總
All-to-All全交換MoE 路由分發/匯聚
Send/Recv點對點通訊Pipeline 並行階段間傳輸

NCCL 的關鍵設計特徵

1. 通訊-計算重疊(Computation-Communication Overlap)

時間軸 ─────────────────────────────────────────────►

傳統方式(序列):
[======計算======][===通訊===][======計算======][===通訊===]

NCCL 支援的方式(重疊):
[======計算======][======計算======]
             [===通訊===][===通訊===]

            通訊啟動後立即返回,GPU 計算繼續

NCCL 提供非同步 API,通訊操作啟動後立即返回控制權,允許 GPU 同時進行計算。通過 CUDA Stream 可實現細粒度排程。

2. 多通道並行(Multi-Channel Parallelism)

NCCL 將單個集合通訊操作拆分到多個”通道”上並行執行。每個通道可以繫結到不同的底層硬體路徑(如不同的 NVLink 鏈路或 InfiniBand QP),充分利用聚合頻寬。

AllReduce 操作

    ├── Channel 0 ──► NVLink Lane 0/IB QP 0
    ├── Channel 1 ──► NVLink Lane 1/IB QP 1
    ├── Channel 2 ──► NVLink Lane 2/IB QP 2
    └── ...

3. 拓撲自動發現與演算法選擇

NCCL 在初始化時:

  • 檢測節點內 GPU 互連拓撲(NVLink/NVSwitch/PCIe 直連/PCIe 經 CPU)
  • 檢測節點間網路拓撲(IB/RoCE/TCP)
  • 根據拓撲、訊息大小、GPU 數量自動選擇通訊演算法(Ring、Tree、CollNet 等)

4. 集合通訊演算法(定性描述)

演算法特點適用場景
Ring(環形)頻寬利用率高,延遲與 GPU 數成正比大訊息、機內通訊
Tree(樹形)延遲對數級,頻寬利用率較低小訊息、延遲敏感
CollNet專為跨節點最佳化,結合網路硬體特性多節點大訊息

具體演算法選擇策略由 NCCL 內部根據 profile 自動決定,使用者可設定環境變數微調。


技術原理(深入機制)

NCCL 的初始化與連線建立

ncclCommInitRank(&comm, nranks, id, rank)


    ┌────────────────┐
    │  Bootstrap     │ ◄── 通過 Socket/MPI 交換 NCCL unique ID
    │  (引導連線)    │     建立控制通道
    └───────┬────────┘


    ┌────────────────┐
    │  拓撲探測       │ ◄── 查詢 NVLink/NVSwitch/PCIe 拓撲
    │                │     查詢 IB/RoCE 裝置
    └───────┬────────┘


    ┌────────────────┐
    │  通道分配       │ ◄── 為每個通訊方向分配 Channel
    │                │     繫結到具體硬體路徑
    └───────┬────────┘


    ┌────────────────┐
    │  連線建立       │ ◄── 註冊記憶體 (CUDA IPC / IB MR)
    │  (Transport)    │     交換地址資訊
    └───────┬────────┘


       comm 就緒,可發起集合操作

AllReduce 的 Ring 演算法原理(以 4 GPU 為例)

Ring AllReduce 分為兩個階段:ReduceScatter + AllGather

4 個 GPU,資料分成 4 塊: [D0][D1][D2][D3]

階段 1: ReduceScatter (3 輪)
──────────────────────────────
Round 1: GPU0→GPU1, GPU1→GPU2, GPU2→GPU3, GPU3→GPU0
         每個 GPU 傳送自己的 chunk,接收並累加
Round 2: 同上方向,繼續傳遞累加
Round 3: 每個 GPU 持有一個 chunk 的完整歸約結果

階段 2: AllGather (3 輪)
──────────────────────────────
Round 1-3: 反向傳遞,所有 GPU 收集到所有歸約後的 chunk

結果: 所有 GPU 持有完整的歸約後資料

頻寬效率:Ring AllReduce 的理論頻寬利用率為 (N-1)/N(N 為 GPU 數),在 GPU 數量足夠多時接近 100%。

NCCL 的傳輸層抽象

NCCL 定義了 Transport 抽象層,支援多種底層傳輸機制:

┌─────────────────────────────────────────┐
│           NCCL 集合操作層                 │
│   (AllReduce, AllGather, ReduceScatter)  │
└──────────────────┬──────────────────────┘

┌──────────────────▼──────────────────────┐
│           NCCL Transport 層              │
│                                         │
│  ┌─────────┐ ┌─────────┐ ┌──────────┐  │
│  │  P2P    │ │  SHM    │ │   NET    │  │
│  │(NVLink) │ │(共享記憶體)│ │(IB/RoCE) │  │
│  └─────────┘ └─────────┘ └──────────┘  │
│  ┌─────────┐                           │
│  │ CollNet │ ◄── 集合網路加速(SHARP等)│
│  └─────────┘                           │
└─────────────────────────────────────────┘
  • P2P:GPU 直接訪問(NVLink、PCIe P2P)
  • SHM:通過 CPU 共享記憶體(同一節點內 PCIe 不直連的情況)
  • NET:通過主機網路棧(InfiniBand Verbs、RoCE、TCP)
  • CollNet:利用網路側集合加速(如 Mellanox SHARP)

與 CUDA Runtime 的整合

// 典型使用模式(虛擬碼)
cudaStream_t stream;
cudaStreamCreate(&stream);

// 發起非同步 AllReduce
ncclAllReduce(
    sendbuff,        // 傳送緩衝區(GPU 視訊記憶體)
    recvbuff,        // 接收緩衝區(GPU 視訊記憶體)
    count,           // 元素數量
    ncclFloat,       // 資料型別
    ncclSum,         // 歸約操作
    comm,            // NCCL 通訊器
    stream           // CUDA Stream(非同步執行)
);

// 通訊在後臺進行,CPU/GPU 可繼續其他工作
// ...

// 需要結果時同步
cudaStreamSynchronize(stream);

技術演進史

時期發展階段關鍵特徵
早期(2016 前後)NCCL 1.x初版釋出,基礎 AllReduce,機內多卡
成長期(2017-2019)NCCL 2.x支援多節點、InfiniBand、拓撲感知
成熟期(2020-2022)NCCL 2.10+CollNet 支援、與網路硬體深度整合
當前(2023-至今)NCCL 2.18+針對大規模叢集最佳化、與 NVSwitch/NVLink 全互聯配合

⚠️ 注意:以上版本號和時間節點為基於公開資訊的定性描述,具體特性對應關係請參考 NVIDIA 官方釋出說明。

關鍵驅動力

  • 模型規模增長:從 ResNet (數十 M 引數) → GPT-3 (175B) → MoE 模型 (萬億級),對通訊吞吐需求指數級增長
  • 硬體互連演進:PCIe → NVLink → NVSwitch → NVLink Switch(跨節點),NCCL 需持續適配
  • 並行策略複雜化:從簡單資料並行 → 張量並行 + 流水線並行 + 專家並行,通訊模式更多樣

技術路線對比

維度NCCLGlooOpenMPIMSCCL
維護方NVIDIAMeta開源社群Microsoft
GPU 親和性深度繫結 NVIDIA GPUGPU 通用GPU 通用NVIDIA GPU(最佳化)
NVLink/NVSwitch 最佳化原生最優有限有限有最佳化
InfiniBand 支援原生深度整合有限原生支援有限
拓撲自動發現基礎有限基礎
通訊-計算重疊原生支援需架構層實現需架構層實現原生支援
生態鎖定NVIDIA 生態跨平台跨平台偏 NVIDIA
典型使用者PyTorch DDP/FSDP 預設PyTorch CPU 後端HPC 傳統領域研究/定製場景

簡要說明

  • Gloo:Meta 開發,跨平台性好,但在 NVIDIA 多卡場景下效能通常不如 NCCL
  • OpenMPI:HPC 傳統強項,GPU 支援需額外配置(UCX 等),靈活但複雜
  • MSCCL:微軟研究院專案,專注於通訊 kernel 的可程式設計最佳化,適合研究場景

上下游

上游:NCCL 依賴什麼

┌─────────────────────────────────────────────────────┐
│                  NCCL 依賴的軟硬體                     │
│                                                     │
│  軟體層:                                             │
│  ├─ CUDA Runtime / Driver                            │
│  ├─ ibverbs / RDMA Core (跨節點 IB/RoCE)             │
│  └─ GPUDirect RDMA (GPU 直接網絡卡訪問)                │
│                                                     │
│  硬體層:                                             │
│  ├─ NVIDIA GPU (計算 + 通訊)                         │
│  ├─ NVLink / NVSwitch (機內高速互連)                 │
│  ├─ ConnectX / BlueField (網絡卡/DPU)                 │
│  └─ InfiniBand / RoCE 網路基礎設施                   │
└─────────────────────────────────────────────────────┘

下游:誰在使用 NCCL

┌─────────────────────────────────────────────────────┐
│                  NCCL 的消費者                         │
│                                                     │
│  深度學習架構:                                        │
│  ├─ PyTorch DDP (DistributedDataParallel)           │
│  ├─ PyTorch FSDP (FullyShardedDataParallel)        │
│  ├─ TensorFlow MirroredStrategy / MultiWorker       │
│  ├─ JAX (pjit, 多 GPU 場景)                         │
│  └─ PaddlePaddle, OneFlow 等                        │
│                                                     │
│  訓練架構:                                            │
│  ├─ DeepSpeed (ZeRO, 3D 並行)                       │
│  ├─ Megatron-LM (張量並行 + 流水線並行)              │
│  ├─ ColossalAI                                      │
│  └─ 各廠商自研分散式訓練架構                          │
│                                                     │
│  推論架構:                                            │
│  ├─ TensorRT-LLM (張量並行推論)                      │
│  └─ vLLM (多 GPU 場景)                              │
└─────────────────────────────────────────────────────┘

關鍵指標

衡量 NCCL 效能的維度

指標含義最佳化目標
頻寬(Bus Bandwidth)實際資料吞吐量,通常以 GB/s 衡量趨近於硬體理論峰值
延遲(Latency)單次操作從發起到完成的時間儘可能低,尤其小訊息
演算法頻寬(Algo BW)演算法層面的有效頻寬與硬體頻寬的比值越接近 1 越好

影響效能的關鍵因素

NCCL 效能 = f(訊息大小, GPU 數量, 拓撲結構, 互連型別, 通道數, ...)
因素影響機制
訊息大小小訊息受延遲主導,大訊息受頻寬主導
拓撲結構全互聯 (NVSwitch) > 部分互聯 (NVLink) > PCIe
節點數跨節點通訊延遲/頻寬顯著高於機內
通道數通道數越多,並行度越高,但開銷也增大

效能基準工具

  • NCCL Tests:NVIDIA 官方開源的基準測試套件
    • 包含 all_reduce_perfall_gather_perf
    • 測量不同訊息大小下的頻寬和延遲
  • 常用環境變數用於調優:
    • NCCL_DEBUG:除錯資訊級別
    • NCCL_ALGO:指定演算法(Ring/Tree/CollNet)
    • NCCL_TOPO_FILE:自定義拓撲檔案

供需與市場資料

⚠️ 說明:NCCL 本身是 NVIDIA 軟體棧的一部分,隨 CUDA 工具包免費提供。其”市場規模”體現在對 NVIDIA GPU 銷售的間接拉動上。

NCCL 的戰略價值

┌─────────────────────────────────────────────────────────┐
│              NCCL 的生態鎖定效應                          │
│                                                         │
│   NCCL 深度最佳化                                         │
│        │                                                │
│        ▼                                                │
│   NVIDIA GPU 多卡訓練效能最優 ◄── 競爭對手難以複製        │
│        │                                                │
│        ▼                                                │
│   架構預設使用 NCCL ◄── PyTorch/TF 預設 NCCL 後端        │
│        │                                                │
│        ▼                                                │
│   使用者生態依賴 NVIDIA ◄── 遷移成本極高                    │
│        │                                                │
│        ▼                                                │
│   GPU 銷售護城河                                         │
└─────────────────────────────────────────────────────────┘

相關市場參考資料

維度資料/估算來源
NVIDIA 資料中心 GPU 市場份額約 80%+ [行業估算]各機構報告口徑不同
NCCL 在 PyTorch 多卡訓練中的使用率接近 100%(NVIDIA GPU 場景)[行業共識]架構預設配置
大型模型訓練叢集 GPU 規模數千至數萬張 [廠商揭露]各公司公開資訊

競爭格局

競爭者/替代方案狀態
AMD ROCm + RCCLROCm 生態成熟度較低,RCCL 是 NCCL 的對應物
Intel oneAPI + oneCCLIntel GPU 市場份額極小,生態待建
Google TPU + 自研通訊TPU 生態封閉,僅限 Google Cloud
開源通用方案 (MPI+UCX)靈活但效能調優門檻高

代表公司與資本對映

直接相關

公司與 NCCL 的關係資本對映
NVIDIANCCL 開發維護方,生態核心NVDA(NASDAQ)
Mellanox/NVIDIA網路硬體 + SHARP 集合加速已被 NVDA 收購
MetaPyTorch DDP/FSDP 依賴 NCCL;Gloo 作為備選META(NASDAQ)

間接受益/依賴

公司關係
各大雲端廠商 (AWS/Azure/GCP)大規模 GPU 叢集依賴 NCCL 通訊
大型模型公司 (OpenAI/Anthropic/國內廠商)萬卡訓練的通訊底座
AI 晶片創業公司需要自研或適配類 NCCL 通訊庫

投資邏輯

核心觀點

NCCL 是 NVIDIA 軟體護城河的關鍵元件之一

┌─────────────────────────────────────────────────────────┐
│                   投資邏輯鏈                              │
│                                                         │
│  AI 訓練規模持續擴大                                      │
│        │                                                │
│        ▼                                                │
│  分散式通訊成為剛需                                       │
│        │                                                │
│        ▼                                                │
│  NCCL + NVLink/NVSwitch + IB 形成端到端最佳化閉環           │
│        │                                                │
│        ▼                                                │
│  競爭對手需同時複製:硬體 + 互連 + 通訊庫 + 生態           │
│        │                                                │
│        ▼                                                │
│  NVIDIA 護城河加深                                        │
└─────────────────────────────────────────────────────────┘

需要關注的風險點

風險說明
開源替代方案成熟如果 MPI+UCX 或其他方案在效能上追平
競爭對手生態突破AMD ROCm/RCCL 生態突破臨界規模
演算法層通訊最佳化演算法層面減少通訊需求(如 MoE、非同步訓練)
合規/出口管制特定市場 GPU 供應受限

常見誤讀糾偏

誤讀 1:NCCL 是一個”網路協議”

糾偏:NCCL 是一個使用者態通訊庫,不是網路協議。它執行在應用層,呼叫 CUDA、IB Verbs 等底層介面。NCCL 自身不定義網路協議,而是利用已有的 NVLink、PCIe、InfiniBand 等硬

source: 公開揭露與公開資料整理 本頁僅用於產業鏈學習、資訊檢索和研究輔助;不構成投資建議,不預測漲跌,不提供買賣、部位或目標價建議。
完整概念頁 複盤 13 節結構 公司投研頁 沿產業鏈找到受益公司 投資課 把概念轉成可跟蹤模型