网络层 开放阅读

MPI

Message Passing Interface

概念 ID
message-passing-interface
更新时间
2026-05-29
来源数量
待补

MPI(Message Passing Interface)

3 秒看懂

MPI 是分布式并行计算的标准化通信协议层——定义了一套”谁给谁发什么消息”的 API 规范。大模型训练中梯度同步(AllReduce)、流水线并行(Send/Recv)、MoE 专家路由(All-to-All)等核心通信操作,底层均源于 MPI 定义的通信原语。

3 分钟产业解释

为什么 MPI 对 AI 产业至关重要?

当你看到”GPT-4 使用了数万张 GPU 训练”这句话时,一个关键问题浮出水面:这些 GPU 之间如何高效地交换数据?

MPI 正是回答这个问题的”元协议”。

产业定位:

  • HPC 时代(1994—至今): MPI 是超算领域事实上的标准编程接口,全球 Top500 超算几乎全部支持 MPI。
  • AI 时代(2016—至今): MPI 的通信原语被提炼、GPU 化后,渗透进每一款深度学习框架。NVIDIA NCCL、Gloo(PyTorch 默认后端)、Horovod 等框架的集体通信语义,均可追溯到 MPI 规范。

一句话产业逻辑: MPI 不是某个公司的产品,而是一份公开规范(类似 HTTP 之于 Web),它定义了并行计算中”消息传递”的语法和语义。任何涉及多节点协同的计算——从天气预报到万亿参数模型训练——都离不开 MPI 及其衍生技术栈。

15 分钟专家深入

MPI 在 AI 训练技术栈中的位置

┌─────────────────────────────────────────────────┐
│              AI Training Frameworks              │
│         (PyTorch / JAX / DeepSpeed / Megatron)    │
├─────────────────────────────────────────────────┤
│          集体通信库 (Collective Libraries)          │
│     NCCL (NVIDIA GPU)  │  Gloo (CPU/GPU)          │
│     oneCCL (Intel)     │  MPI 实现 (OpenMPI等)     │
├─────────────────────────────────────────────────┤
│          通信运行时 / 抽象层                        │
│     UCX / libfabric / GASNet                      │
├─────────────────────────────────────────────────┤
│          硬件传输层                                 │
│  InfiniBand (RDMA) │ RoCE │ NVLink │ NVSwitch     │
│  PCIe │ 以太网 │ Slingshot (HPE)                   │
└─────────────────────────────────────────────────┘

核心通信原语分类

1. 点对点通信(Point-to-Point)

原语语义AI 训练中的典型用途
MPI_Send / MPI_Recv阻塞式发送/接收Pipeline 并行中相邻 stage 的微批次传递
MPI_Isend / MPI_Irecv非阻塞式(异步)计算-通信重叠(overlap),隐藏通信延迟
MPI_Sendrecv同时发送和接收Pipeline 并行中双向数据交换

2. 集体通信(Collective)——AI 训练的命脉

原语语义AI 训练中的典型用途
MPI_Allreduce全归约(所有进程得到全局聚合结果)数据并行梯度同步,最核心操作
MPI_Allgather全收集(每个进程收集所有进程的数据)张量并行中切分权重的聚合
MPI_Scatter / MPI_Gather分发/收集数据加载分发
MPI_Broadcast广播模型参数、超参分发
MPI_AlltoAll全交换(每个进程向每个进程发送不同数据)MoE 专家路由 dispatch/combine
MPI_Reduce_scatter归约后分散Megatron 张量并行中 AllReduce 的拆解实现
MPI_Barrier同步屏障阶段性同步、调试

AllReduce 的核心算法

数据并行训练中,每个 GPU 计算本地梯度后,需要通过 AllReduce 得到全局梯度均值。Ring AllReduce 是最经典的实现:

假定 N 个 GPU,每个持有大小为 D 的梯度向量

Ring AllReduce 步骤(两阶段):
┌──────────────────────────────────────────┐
│ 阶段 1: Reduce-Scatter                     │
│   - 将 D 分成 N 段                         │
│   - N-1 步,每步每个 GPU 向环中下一 GPU      │
│     发送一个分段并接收前驱的一个分段          │
│   - 每步传输量: D/N                         │
│   - 结束后,每个 GPU 持有一个分段的完整归约值  │
├──────────────────────────────────────────┤
│ 阶段 2: AllGather                          │
│   - N-1 步,方向相同                        │
│   - 每步传输量: D/N                         │
│   - 结束后,每个 GPU 持有全部 N 段的归约值    │
└──────────────────────────────────────────┘

总传输量 = 2 × (N-1)/N × D ≈ 2D(当 N 较大时)
每个 GPU 总通信量与 N 无关,仅与 D 成正比 → 良好扩展性

带宽最优性: Ring AllReduce 达到了理论下界——在带宽受限场景下不可再优化。但在延迟受限场景(小消息)中,Tree-based 或 Recursive Halving-Doubling 算法更优。

MPI 与 NCCL 的关系

这是理解 AI 通信栈的关键:

维度MPINCCL
性质开放标准规范(任何人可实现)NVIDIA 私有实现
设计目标通用 HPC 并行通信GPU 集群集体通信优化
硬件感知通用(CPU 为主,需适配 GPU)深度 GPU 感知(NVLink、NVSwitch、InfiniBand)
通信模型以 CPU 线程为通信主体从 CPU 发起,在 GPU stream 上异步执行
拓扑发现有限自动探测 NVLink/NVSwitch/PCIe/IB 拓扑,优化路径
在 AI 中的角色早期后端(Horovod);仍在用PyTorch DDP 默认后端;主流选择

关键洞察: NCCL 并非”替代” MPI,而是在 GPU AI 训练这个特定场景下,将 MPI 集体通信语义用 GPU-native 方式重新实现。NCCL 的 ncclAllReduce 语义与 MPI_Allreduce 等价,但实现路径完全不同——NCCL 会在 GPU 上启动通信 kernel,直接通过 GPUDirect RDMA 写入远端 GPU 显存,绕过 CPU。

MPI 的实现生态

实现性质备注
OpenMPI开源社区驱动,广泛用于学术和工业
MPICH开源ANL 主导,是许多商业实现的基线
Intel MPI(oneAPI MPI)商业/免费Intel 优化,常与 Slurm 配合
MVAPICH开源OSU 主导,InfiniBand 优化出色
Cray MPICH商业Cray/Slingshot 平台
NVIDIA HPC-X商业套件包含 OpenMPI + UCX + NCCL

技术原理

通信模型

MPI 采用 SPMD(Single Program Multiple Data) 模型:

┌───────────────────────────────────────────────┐
│  同一个程序在 N 个进程上并行执行                   │
│  每个进程有唯一的 rank (0 ~ N-1)                 │
│  进程间通过显式消息传递交换数据                     │
│  共享状态仅通过通信建立                            │
└───────────────────────────────────────────────┘

核心语义要素:

  1. Communicator(通信域): 定义进程组及其通信上下文。MPI_COMM_WORLD 包含所有进程。

  2. Rank(进程编号): 通信域内唯一标识。

  3. Tag(消息标签): 用于消息匹配过滤。

  4. Blocking vs Non-blocking:

    • 阻塞:调用返回时缓冲区可安全复用
    • 非阻塞:立即返回 handle,需 MPI_Wait / MPI_Test 完成确认
    • MPI-3 引入非阻塞集体通信MPI_Iallreduce 等),对计算-通信重叠至关重要
  5. Derived Datatypes: 允许定义非连续内存布局的复合数据类型,减少 packing/unpacking 开销。

关键机制详解

(1)RMA(Remote Memory Access)—— MPI-2/3

也称 "单边通信"(One-Sided Communication)

MPI_Put:   本地进程直接写入远端进程的内存窗口
MPI_Get:   本地进程直接读取远端进程的内存窗口
MPI_Accumulate: 远端原子累加

窗口 = MPI_Win_create() 注册的共享内存区域

优势: 减少远端 CPU 参与(需 RDMA 支持)
AI 场景: 参数服务器架构中可直接更新远端梯度

(2)进程拓扑

MPI 提供虚拟拓扑映射:
- MPI_Cart_create: 笛卡尔网格拓扑
- MPI_Graph_create: 图拓扑

用途: 将逻辑通信模式映射到物理拓扑
例: 2D mesh 的 AllReduce 可按行列分别执行
对 AI: 多维并行(DP × TP × PP)的通信域划分

(3)MPI+X 混合编程模型

现代 AI 训练栈的实际架构:

MPI (进程管理/粗粒度通信)
  + CUDA/GPU kernels (计算)
  + NCCL (GPU 集体通信)
  + OpenMP (CPU 多线程)
  + UCX (统一通信框架)

MPI 的角色已从 "计算+通信" 转为:
  ① 进程启动与管理 (PMIx/PMI)
  ② CPU 侧控制平面通信
  ③ 与 NCCL 等 GPU 库共存的基础设施

技术演进史

时间里程碑意义
1992MPI 论坛成立统一 HPC 分布式编程的努力开始
1994MPI-1.0 发布点对点通信 + 集体通信基础框架
1997MPI-2.0动态进程管理、单边通信(RMA)、并行 I/O
~2009MVAPICH2 GPU-aware早期 GPU-aware MPI 尝试
2012MPI-3.0非阻塞集体通信、改进的 RMA、大计数支持
~2017Horovod 发布Uber 开源,MPI 作为 DL 分布式训练后端进入 AI 领域
~2016—2017NCCL 1.x/2.xNVIDIA GPU-native 集体通信,逐步成为 AI 训练主流
~2019OpenMPI + UCX统一通信后端,支持 GPU-aware + RDMA
2021MPI-4.0大消息支持(>2GB)、改进的持久化通信、会话(Sessions)模型
~2022—至今MPI 在 AI 中角色转型从”直接通信层”转向”进程管理+基础设施”,NCCL/RCCL/Gloo 承担 GPU 集体通信

技术路线对比

AI 训练中主要通信后端对比

维度MPI 实现 (OpenMPI/MPICH)NCCLGloooneCCL (Intel)
硬件适用CPU 为主,GPU-aware 可选NVIDIA GPUCPU + GPU (有限)Intel GPU/CPU
点对点✅ 完整✅ 提供❌ 不提供
集体通信✅ 完整✅ 专精 AllReduce/AllGather 等✅ 基础
GPU 原生需 GPUDirect 支持✅ 深度集成 NVLink/NVSwitch/IB有限有限
拓扑优化有限✅ 自动探测最优路径有限
可扩展性数十万进程级验证万级 GPU千级万级
在 PyTorch 中需手动指定 backend默认 DDP 后端CPU 默认后端XPU 后端
易用性需 mpirun 启动torchrun 启动即可内置需配置

AllReduce 实现算法对比

算法通信复杂度(带宽)延迟复杂度适用场景
Ring AllReduce2(N-1)/N × DO(N)大消息、带宽受限
Recursive Halving-Doubling2(1-1/N) × DO(log N)中等消息
Tree-based2(N-1)×D(根进程,O(N·D))O(log N)小消息、延迟受限
Double Binary Tree2D × (1+o(1))O(log N)NCCL 默认优化之一

上下游

上游(MPI 依赖的技术层)

硬件层:
├── CPU: x86 (Intel/AMD), ARM (Ampere/Fujitsu A64FX)
├── 互联:
│   ├── InfiniBand (NVIDIA Mellanox) — HPC + AI 主力
│   ├── RoCE v2 — 数据中心以太网 RDMA
│   ├── Slingshot (HPE/Cray)
│   ├── NVLink / NVSwitch — GPU 间直连(NCCL 更直接利用)
│   └── 以太网 — 回退方案
├── RDMA 库: libibverbs, RDMA Core
└── 统一通信框架: UCX (Unified Communication X)
    └── MPI 实现越来越多构建在 UCX 之上

下游(使用 MPI 或其原语的系统)

AI 框架与库:
├── Horovod (Uber) — 最早将 MPI 引入 DL,支持 MPI/Gloo/NCCL 后端
├── PyTorch DDP — 默认 NCCL,但 Gloo 后端语义同 MPI
├── Megatron-LM (NVIDIA) — TP/PP/DP 并行通信
├── DeepSpeed (Microsoft) — ZeRO 通信模式
├── JAX pjit — 基于 XLA 的通信编译
├── Ray / Alpa — 自动并行
└── ColossalAI / FSDP — 各种并行策略

传统 HPC:
├── GROMACS, NAMD (分子动力学)
├── WRF (天气预报)
├── OpenFOAM (流体力学)
└── 各类 MPI-native 科学计算应用

编排与调度:
├── Slurm — MPI 作业启动的事实标准
├── PMIx — 进程管理接口(替代传统 mpirun 的 Launcher)
└── Kubernetes + MPI Operator — 云原生 MPI 部署

关键指标

评估 MPI 实现 / 网络通信性能的核心指标

指标含义典型量级(定性)影响
Latency(延迟)单次小消息端到端时间InfiniBand: 数微秒级;以太网: 数十微秒级影响小消息 collective 的尾部延迟
Bandwidth(带宽)最大单链路吞吐IB HDR: 200 Gb/s;IB NDR: 400 Gb/s;800G 以太网已出现决定大梯度 AllReduce 的传输时间
Injection Rate(注入率)网卡每秒发送消息数数千万 msgs/s(高端)影响小消息聚合场景
AllReduce 吞吐集体通信的实际带宽利用率理论链路带宽的 70%—95% 为良好取决于算法实现 + 网络拓扑
Message Size Threshold带宽优化 vs 延迟优化的切换点通常在数 KB 到数十 KB影响算法选择
GPU-Direct RDMA 效率GPU 显存 ↔ 网卡间直传效率消除 CPU 中转,延迟降低对 AI 训练尤为关键

与 AI 训练效率的关联

大模型训练中的通信时间占比(粗略定性估算):

小模型 + 低带宽网络:  通信时间可占 50%+
大模型 + 高带宽网络:  通信时间 ~10%-30%
MoE 模型:           All-to-All 通信可能成为瓶颈
Pipeline 并行:       bubble ratio 取决于 micro-batch 数和通信

供需与市场数据

直接市场

MPI 本身是开放标准,没有独立的”MPI 市场规模”。但其生态链涉及:

环节代表厂商/产品估算规模
HPC 超算互联(承载 MPI 的物理网络)NVIDIA InfiniBand, HPE Slingshot[行业估算] 全球 HPC 互联市场约数十亿美元/年
MPI 商业发行/支持Intel oneAPI MPI, NVIDIA HPC-X, Cray MPICH包含在 HPC 软件栈中,无独立估值
AI 训练集群网络与上重叠,AI 集群大量使用 IB[厂商财报] NVIDIA 网络部门(含 Mellanox)营收近年显著增长
UCX 开发与支持UCF (Unified Communication Framework) 社区开源主导

关键数据点

  • 全球 Top500 超算几乎全部使用某种 MPI 实现
  • NVIDIA 在 AI 训练集群互联市场占据主导地位(InfiniBand),其网络业务营收近年来随 AI 需求增长显著
  • [厂商财报] NVIDIA 数据中心业务(含 GPU + 网络)FY2024 营收约 475 亿美元(含 GPU 但网络占比较小,精确拆分未公开)
  • 新兴竞争: Ultra Ethernet Consortium(UEC)推动以太网在 AI/HPC 场景替代 InfiniBand,可能改变 MPI 底层传输格局

代表公司与资本映射

公司/组织与 MPI 的关系资本映射
NVIDIAHPC-X(含 OpenMPI)、NCCL 继承 MPI 语义、InfiniBand 网络NVDA(GPU + 网络)
InteloneAPI MPI(原 Intel MPI)、oneCCL、Omni-Path 互联INTC
HPE(含 Cray)Slingshot 互联、Cray MPICHHPE
AMDROCm 生态中的 RCCL(类 NCCL)、支持 OpenMPIAMD
MicrosoftDeepSpeed(使用 MPI 概念)、Azure HPCMSFT
GoogleGCP HPC + TPU 互联(非传统 MPI 但借鉴语义)、JAXGOOGL
AWSEFA(Elastic Fabric Adapter,支持 libfabric/UCX/MPI)、SageMaker 分布式训练AMZN
UCF 社区UCX、UCC(Unified Collective Communication)—— 新兴开源通信层无直接标的

投资映射思路

直接链路:
  MPI 规范 ──(物理承载)──> InfiniBand/高速网络 ──> NVIDIA (NVDA)
  MPI 规范 ──(GPU 化)──> NCCL/RCCL ──> NVIDIA (NVDA) / AMD (AMD)
  MPI 规范 ──(HPC 软件栈)──> HPE-Cray (HPE) / Intel (INTC)

间接链路:
  MPI 通信效率 ──> 训练效率 ──> 算力需求 ──> GPU 出货量
  更快互联 ──> 更大集群可用 ──> 更大规模训练 ──> 更多 GPU + 网络设备

投资逻辑

核心观点

1. MPI 是 AI 基础设施的”隐性关键层”

投资 AI 基础设施时,关注点通常在 GPU(NVIDIA/AMD)、存储、散热。但通信瓶颈正在成为大规模训练的核心约束——当 GPU 算力按 2x/代增长时,网络带宽的代际提升如果不匹配,通信占比将显著上升。

2. 通信效率 → 训练成本 → 算力需求

更高效的通信(更优的 AllReduce 实现、更快的互联)意味着:

  • 相同 GPU 数量下训练更快 → 单位 token 训练成本下降
  • 或者,相同时间内可训练更大模型 → 推动更大规模 GPU 集群需求

这形成了一个正反馈:通信越好 → 算力需求越大 → GPU 销量越高

3. 关注三个边际变化

边际变化内涵涉及标的
UEC(Ultra Ethernet)以太网联盟推动 AI 原生以太网标准,可能部分替代 InfiniBand博通 (AVGO)、Cisco、AMD、Meta 等 UEC 成员
UALinkGPU 间直连开放标准,对标 NVLinkAMD、Intel、Broadcom 等
UCX/UCC 开源生态统一通信层降低对单一厂商依赖利好 AMD/Intel 等非 NVIDIA 阵营

常见误读纠偏

❌ 误读 1:“MPI 已经过时了,AI 训练只用 NCCL”

纠偏: MPI 并未过时,而是在 AI 训练栈中角色发生了转变

  • 进程管理层面: 许多 AI 训练作业仍通过 mpirun 或基于 PMIx 的 launcher 启动
  • CPU 侧通信: 控制平面消息、元数据交换仍常走 MPI
  • NCCL 继承了 MPI 集体通信的语义设计: 说”NCCL 替代 MPI”不如说”NCCL 是 MPI 集体通信在 GPU 场景的 GPU-native 重实现”
  • HPC + AI 融合场景: 许多科学 AI(AI for Science)应用仍直接使用 MPI
  • Horovod 虽然热度下降,但 MPI 概念已内化到各框架中

❌ 误读 2:“AllReduce 就是 MPI AllReduce”

纠偏: AllReduce 是一个通用的集体通信操作语义,MPI 规范定义了其接口标准。但实际执行 AllReduce 的可能是完全不同的实现:

  • NCCL ncclAllReduce 在 GPU 上以通信 kernel 执行,利用 NVLink/NVSwitch/IB 直传
  • Gloo allreduce 使用 TCP 或 IB,CPU 侧为主
  • MPI MPI_Allreduce 传统 CPU 侧实现,或 GPU-aware 版本
  • 自定义框架内建: PyTorch FSDP 中 AllReduce 可能由 NCCL 执行,与 MPI 无直接关系

关键区分: MPI 定义了 AllReduce 的语义规范(输入、输出、数学运算),但不代表 AllReduce = MPI AllReduce。

❌ 误读 3:“MoE 中的 All-to-All 通信就是 MPI AlltoAll”

纠偏: 语义上确实对应 MPI 的 MPI_AlltoAll,但实际实现通常不走 MPI

  • Megatron-MoE 等框架使用 NCCL 的 All-to-All 或自定义实现
  • MoE 的 All-to-All 特点是稀疏且动态(每次路由的 expert 分配不同),对通信模式的可预测性要求不同于传统 HPC 的 All-to-All
  • 实际优化常涉及 token 合并/拆分、capacity factor 控制等 MoE 特有的通信调度策略

学习路径

入门(1—2 天)

  1. 理解 MPI 的 SPMD 模型、rank、communicator 概念
  2. 掌握 Send/Recv/Isend/Irecv 点对点通信
  3. 掌握 Allreduce/Allgather/Broadcast/Scatter/Gather 五大集体操作
  4. 用 OpenMPI 或 MPICH 在单机多进程上跑 Hello World + 简单 AllReduce

进阶(1—2 周)

  1. 理解 Ring AllReduce 算法原理,手推通信量
  2. 学习 UCX 架构,理解 MPI 实现如何利用 RDMA
  3. 了解 GPU-aware MPI 的概念(GPUDirect RDMA/IPC)
  4. 对比 MPI AllReduce vs NCCL AllReduce 的实现差异
  5. 用 Horovod 或 PyTorch DDP(Gloo 后端)进行分布式训练

专家(持续)

  1. 阅读 MPI-3.0/4.0 规范文档(特别是 RMA 和 Sessions)
  2. 研究 NCCL 源码中的拓扑发现与算法选择逻辑
  3. 理解多维并行(DP × TP × PP × EP)中通信域的划分与调度
  4. 跟踪 UEC / UALink 等新兴互联标准对 MPI 生态的影响
  5. 实测不同 AllReduce 算法在不同消息规模和集群拓扑下的性能差异

推荐资源

  • 书籍: Using MPI (Gropp, Lusk, Skjellum) — 经典教材
  • 规范: MPI Forum 官网 (mpi-forum.org) — 标准文档
  • 实践: OSU Micro-Benchmarks (MVAPICH) — 测量 MPI 点对点/集体通信性能
  • AI 相关: NVIDIA NCCL 文档、Horovod 文档、Megatron-LM 源码
  • UCX: openucx.org — 理解现代 MPI 实现的底层

一句话总结

MPI 是并行计算通信的”TCP/IP”——它定义了分布式计算中消息传递的标准语义,而 AI 训练中的梯度同步、模型切分通信、MoE 路由等核心操作,本质上都是 MPI 集体通信原语在 GPU-native 环境中的继承与演进。


延伸阅读与来源

来源内容
MPI Forum (mpi-forum.org)MPI 标准规范 (MPI-1 ~ MPI-4)
Using MPI (Gropp, Lusk, Skjellum)MPI 编程经典教材
Parallel Programming with MPI (Pacheco)入门教材
NVIDIA NCCL 文档 (docs.nvidia.com/deeplearning/nccl)NCCL 架构与 API
OSU Micro-Benchmarks (mvapich.cse.ohio-state.edu/benchmarks/)MPI/NCCL 性能基准测试
Horovod 技术论文 (Sergeev & Del Balso, 2018)MPI 在 DL 分布式训练中的早期应用
UCX 项目 (openucx.org)统一通信框架,现代 MPI 实现基础
Megatron-LM 论文 (Shoeybi et al., 2019; Narayanan et al., 2021)张量并行 + 流水线并行的通信设计
Ultra Ethernet Consortium (ultraethernet.org)AI 原生以太网标准进展
NVIDIA 财报/投资者日材料网络业务营收数据(具体拆分视公开程度)

⚠️ 关于精确数字的说明: 本文涉及的市场数据、营收数据等如未标注具体来源,均为行业定性判断或公开常识性认知,不构成精确引用。网络性能数据因硬件型号、固件版本、集群配置差异显著,建议以实际 benchmark 为参考。

source: 公开披露与公开资料整理 本页仅用于产业链学习、信息检索和研究辅助;不构成投资建议,不预测涨跌,不提供买卖、仓位或目标价建议。
完整概念页 复盘 13 节结构 公司投研页 沿产业链找到受益公司 投资课 把概念转成可跟踪模型