AllReduce 是分布式训练梯度同步的核心操作,让所有节点获得相同的全局归约结果。
核心定义
AllReduce = All(所有节点)+ Reduce(归约)
本质:所有节点先做归约操作(求和/平均/最大值),再将结果广播给所有节点。
多 GPU 训练场景
| 场景 | 梯度处理 |
|---|---|
| 单 GPU | 本地梯度直接更新参数 |
| 多 GPU | 需汇总所有 GPU 梯度后同步更新 |
基础版流程(3 GPU 示例)
初始:GPU0 梯度=1,GPU1=2,GPU2=3
- Reduce:主节点(GPU0)收集并求和 → G=6
- Broadcast:主节点广播 G=6 给所有 GPU
Ring AllReduce(优化版)
核心改进:无主节点瓶颈,通信量降至 1/N。
| |
| 特性 | 基础版 | Ring AllReduce |
|---|---|---|
| 主节点瓶颈 | 存在 | 无 |
| 通信量 | O(N²) | O(N) |
| 框架采用 | 较少 | PyTorch DDP、DeepSpeed |
应用场景
| 场景 | 作用 |
|---|---|
| DDP 训练 | 同步所有 GPU 梯度 |
| 大模型训练 | 分布式参数同步 |
| 特征融合 | 汇总多卡计算结果 |
| 集群统计 | 汇总损失值、精度 |
张芷铭的个人博客
Comments