已关闭
[Bug][自提单]: hash router的tid2eid在独立FSDP封装下形状不匹配 #2475
lzy0920232创建于  7月30日关闭于  7月31日
lzy0920232成员
7月30日 创建

Checklist

🐞 问题详细描述

在 DeepSeek-V4 hash router 场景开启 FSDP 后,训练在首个 step 前的 FSDP lazy-init 阶段失败。

复现所需关键配置:

parallelism:
  data_parallel_shard: 2
  context_parallel: 4
  context_parallel_method: colossal
  tensor_parallel: 1
  expert_parallel: 8

模型配置中开启 hash router,actual_vocab_size=131072、moe_router_topk=4。8 卡启动训练后稳定复现:

File "hyper_parallel/platform/mindspore/fully_shard/state.py", line 297, in lazy_init
  hsdp_param.reset_sharded_param()
File "hyper_parallel/platform/mindspore/fully_shard/param.py", line 671, in reset_sharded_param
  self._validate_sharded_local_tensor_shape(local_tensor)
File "hyper_parallel/platform/mindspore/fully_shard/param.py", line 610, in _validate_sharded_local_tensor_shape
  raise AssertionError(
AssertionError: Expected sharded_size to be (16384, 4), got (131072, 4)

(131072, 4) 对应 hash router 的 tid2eid[actual_vocab_size, top_k] 查表参数。

PR #8581 将 FP32 router 从 transformer layer 中拆成独立 FSDP 单元:

fully_shard(router, **fsdp_config)

但独立封装时没有继承外层 layer FSDP policy 中对 tid2eid 的 replicate 约束,导致:

  1. tid2eid 先按 8 卡 FSDP 域切分为 (16384, 4);
  2. delayed initialization 阶段的 Router.reset_parameter() 通过 set_data() 写回完整 (131072, 4) 查表;
  3. FSDP lazy-init 校验本地 shard 形状时失败。

期望行为:

  • tid2eid 是 requires_grad=False 的确定性索引表,应在独立 router FSDP 单元中保持复制;
  • hash router + FSDP 场景可以正常进入训练;
  • 普通 MoE router 的参数切分、性能和显存不受影响。

修复 PR:#8619

详细的环境信息描述

  • 硬件:Ascend 910B2,8 卡
  • Python:3.11
  • MindSpore:2.10.0
  • CANN:9.1.0-beta.1
  • Hyper-Parallel:r1.0.0@fed8671b2d99405de064deb35be88d4145f9fe0d
  • MindFormers:master
  • 失败提交:d3a1aa34042e1903c60733309c9eb453f58b83db
  • 并行:FSDP2 + CP4 Colossal + EP8 + TP1

其他辅助信息

修复方案是在独立封装 router 时将存在的 router.tid2eid 加入 replicate_params,并增加 GPT FSDP wrapper 回归单测。

验证结果:

  • 定向单测:3 passed;
  • 8 卡 DSA2 + fused MHC:3/3 step,rc=0;
  • 4 卡 CP4 20-step:20/20 step,rc=0;
  • 修复前可运行基线与修复版平均 step time 差异 +0.41%,处于运行波动范围;
  • 最大单卡峰值显存未增加。

版本信息

  • 问题引入:PR #8581,提交 24fb1fa1f12068ebb93407c3f389d8729654f873
  • 修复 PR:#8619
  • 修复提交:da06dd923163ed96b98aae73ef17334f733ba2be

Thanks for contributing 🎉!

likedislike
Llzy0920232成员
7月30日 添加了label:bug
Llzy0920232成员
7月30日 问题后端类型 由 [] 改变为 [Ascend]
Llzy0920232成员
7月30日 关联分支 由 [] 改变为 [master]
Llzy0920232成员
7月30日 关联组件 由 [] 改变为 [B-SIG-MindFormers-Train]
Llzy0920232成员
7月30日 关联了pull request:【bugfix】【pynative】修复 hash router 在 FSDP 下参数形状不匹配
MindSpore-BotMindSpore-Bot成员
7月31日 关闭了 issue
MindSpore-BotMindSpore-Bot成员
7月31日 issue状态由 TODO 改变为 DONE