已开启
[Bug]: dualmode Trainer FSDP optimizer layout loses TP global shape #330
MengXY107创建于  8月13日
MengXY107
MengXY107成员
8月13日 创建

Checklist

问题描述

dualmode Trainer 生产路径中,TP/EP 处理后的参数在进入 fully_shard 时是普通本地 Parameter,不再携带 DTensor 的 global shape。FSDP 参数管理若直接把传入参数的 local shape 当作 optimizer Layout 的 global shape,会造成元数据与 FSDP+TP/EP placements 不匹配。

Muon 根据错误的 optimizer layout 恢复 Newton-Schulz 输入形状时,会在 TP+FSDP 场景触发 shape is invalid for input of size 16384。多维 replicate mesh 下,异步 relay broadcast 若未等待前一维通信完成,还可能让后一维从尚未收到有效数据的 rank 继续广播,污染 optimizer 参数。

复现场景:8 卡 HSDP(2×2)+TP(2)、DP(2)+CP(2)+TP(2) 以及 HSDP+TP+EP MoE dualmode Trainer,用优化器执行参数更新并与 standalone 模型逐步对拍。

期望行为

FSDP 应根据 TPShardMetaInfo 中已知的 mesh 和 placements,从 TP/EP-local shape 恢复 logical global shape,再构造统一的 FSDP+TP/EP optimizer layout。Muon 应同时支持普通 Parameter 与 DTensor,并保证多维 replicate relay 的维度间数据依赖。

环境信息

  • 平台:PyTorch,HYPER_PARALLEL_PLATFORM=torch
  • 硬件:8×Ascend 910B
  • 目标分支:trainer_dev
  • 并行组合:HSDP+TP、DP+CP+TP、HSDP+TP+EP MoE
likedislike
MengXY107
MengXY107成员
8月13日 评论:

本次更改说明

修改背景:dualmode Trainer 的生产模式在 TP/EP 后把普通 local Parameter 交给 FSDP,参数本身不再包含 DTensor global shape。不能默认把传入 param.size() 当作最终 global shape,否则 optimizer layout 的 tensor metadata 与 FSDP+TP/EP placements 不一致,Muon reshape 会读取错误的预期形状。

本次更改点:

  • 在 Torch FSDP 参数管理中统一构造 optimizer sharding spec:原生 DTensor 复用原 global metadata;普通 TP/EP-local 参数利用 TPShardMetaInfo.mesh 和 placements 恢复 logical global shape;普通 FSDP 参数沿用本地输入 shape。
  • Muon 的 no-shard 路径复用统一的 local-tensor 访问逻辑,兼容普通 Parameter 和 DTensor。
  • 多维 replicate relay broadcast 严格执行前一维 wait 后再启动下一维,最后一维保留异步以继续重叠。
  • accuracy 用例增加 loss、grad norm、参数 gradient 日志以及 optimizer step 后 module 当前参数对拍。

迁移要求:master 分支的 fully_shard 实现也需要应用相同的 sharding spec 构造逻辑。迁移时应基于 master 自身的参数生命周期复用现有流程,不应直接假设传入参数 shape 是 global shape,也不应增加按模型或并行 case 分支的特例。

likedislike
MengXY107MengXY107成员
8月13日 关联了pull request:fix: restore optimizer layout for TP-sharded FSDP parameters
MengXY107MengXY107成员
8月17日 关联了pull request:FSDP代码重构&支持参数非均匀切分