大模型训练通信要解决哪些问题?(个人总结)

结构图

加速通信

  • 减少给定操作的通信量
    • 低精度训练
    • 先量化再通信
      • DeepSeek V3 dispatch 时先把 BF16 量化到 FP8,通信量减少一半。但因为 combine 通信中带有规约,所以不适合用 FP8。
      • MegaScale-MoE 在 AllGather 派发器的 combine 阶段用 (a) 量化到 FP8 + (b) AlltoAll + (c) FP32 累加器规约 来代替原先的 ReduceScatter 通信,通信量减少一半、loss 正常。ReduceScatter 时每个 rank 只需要收到自己分区的所有数据并完成规约即可(不像 AllGather 接口需要所有数据),用 AlltoAll + 接收后本地规约也能替代。
    • 通信去重
      • DeepEP
  • 减少通信
    • 尽可能使用效率更高的并行方式,比如用 Ulysses SP 代替 TP 可以从理论上大大降低通信。

保持计算流忙碌

  • 通信计算重叠
    • Megatron-LM 现在对 DP/TP/CP/PP/EP 均有通信重叠功能
      • 部分选项依赖 CUDA_DEVICE_MAX_CONNECTIONS
      • 部分选项依赖交错 1F1B 调度
      • Megatron CP 的通信计算重叠强制打开、无选项可以关闭
      • Megatron 1F1B + EP A2A overlap 是 2025.8 才加入的新功能,但在 2025.3 已有人提出
    • DualPipe 用前反向两个微批次的前后向来重叠
  • 负载均衡
    • DP/PP 负载均衡
      • ByteScale 的工作很有启发性
      • Ernie 4.5 也做了 DP 上的子序列重排
    • EP 负载均衡
      • token drop、辅助 loss、expert bias
      • 专家动态调整,这一类工作很多
      • 样本动态调整,如 NetMoE
    • CP 负载均衡
      • Ulysses SP
      • Megatron CP 未考虑子序列打包的问题,ByteScale 做了一些处理
  • 消除卡间同步
    • ZeroBubble 后校验