已开启
[Bug]: training demo loses indexed data flow after pretrained model integration #332
MengXY107创建于  8月14日
MengXY107
MengXY107成员
8月14日 创建

Checklist

🐛 Describe the bug

trainer_dev 依次合入 PR1154、PR1155 和 PR1159 后,examples/training_demo/train.yaml 没有保留 PR1154 引入的 indexed data flow:

  1. PR1154 为 training demo 接入 LLM data transform、indexed mock dataset、indexed dataloader 和 get_batch。
  2. PR1155 为验证 TP+FSDP optimizer sharding spec,临时将 demo 改为 tiny Llama、TP=2/FSDP=2、DummyDataset 和 identity transform。
  3. PR1159 恢复 Qwen3-30B-A3B 预训练权重加载、8 卡 FSDP、Muon、activation checkpoint 和健壮化 run.sh,但保留了 PR1155 的临时 DummyDataset 数据链路。

因此当前默认 demo 虽然可以覆盖预训练模型加载和 FSDP 训练,却不再覆盖 Trainer 的标准 indexed dataset 构建、数据变换、dataloader 与 get_batch 链路。

当前实际配置为:

  • train_iters=2、eval_iters=0;
  • IdentityDataTransform;
  • DummyDataset;
  • legacy components.data.dataloader.DataLoader;
  • 未配置 get_batch。

本问题与 PR1155 修复的 optimizer layout 问题相互独立。PR1155 的 fully_shard/param.py、resolver、UT 和 accuracy 看护已经合入;PR1157 revert 已关闭且未进入 trainer_dev,本问题不应重复修改这些文件。

Expected behavior

training demo 应组合保留 PR1154 与 PR1159 的能力:

  • 保留 PR1159 的 Qwen3-30B-A3B 预训练权重加载、8 卡 FSDP、Muon、activation checkpoint 和 run.sh;
  • 恢复 PR1154 的 build_llm_data_transform;
  • 恢复 build_llm_dataset 的 indexed mock data 配置;
  • 恢复 hyper_models.components.datasets.DataLoader;
  • 恢复 build_llm_get_batch;
  • 恢复 train_iters=10、eval_iters=1。

修复范围应限制为 examples/training_demo/train.yaml,不修改 fully_shard/param.py、resolver 或 PR1155 的测试文件。

Additional context

  • 关联总 RFC:#326。
  • 提议配置已在 8×Ascend NPU 上完成 Qwen3-30B-A3B、FSDP=8、Muon 的 10/10 steps 验证,命令退出码为 0。
  • 最终 step:loss=0.00582964,grad_norm=0.859375;峰值显存 40.18 GB。
  • 全量 UT 结果为 4123 passed, 207 skipped, 21 failed, 106 subtests passed;21 项失败均可在相同 upstream/trainer_dev 干净基线复现。

Environment info

  • 目标分支:trainer_dev@d253907a
  • 平台:PyTorch,HYPER_PARALLEL_PLATFORM=torch
  • 硬件:8×Ascend 910B
  • 模型:Qwen3-30B-A3B
  • 并行方式:8-way FSDP,TP=CP=EP=PP=1
  • 优化器:Muon
likedislike
MengXY107MengXY107成员
8月14日 关联了pull request:fix: restore indexed data flow in training demo
庄昭雄
庄昭雄
5 天前 评论:

按这六条核了一遍当前 master,结论是这条已经不能按原样执行了 —— 结构被后续重构换过,期望里提到的几个符号现在不存在。

先说路径:issue 写的是 examples/training_demo/train.yaml,这个文件现在没有,那个目录下是 train_parallel_online.yaml、train_parallel_offline.yaml、train_parallel_full_offline.yaml;而 run_parallel_* 脚本实际用的配置是 hyper_parallel/models/qwen3_moe/recipes/train.yaml。两个我都看了。

逐条:

期望 现状
保留 PR1159 的能力 在:qwen3_moe/recipes/train.yaml 仍是 Qwen3-30B-A3B + FSDP + Muon
恢复 build_llm_data_transform 已在:qwen3_moe/recipes/train.yaml:111、train_parallel_online.yaml:91
恢复 build_llm_dataset 的 indexed mock 配置 全仓 build_llm_dataset 0 次命中;现在是 build_online_text_dataset(:123 / :96)
恢复 hyper_models.components.datasets.DataLoader 现在是 hyper_parallel.data.batching.DynamicBatchDataLoader(:127 / :107)
恢复 build_llm_get_batch 全仓 0 次命中;get_batch: 这个键在,值是 ParallelBatch(:131-132 / :111-112)
train_iters=10、eval_iters=1 qwen3_moe/recipes/train.yaml:22 是 train_iters: 3;train_parallel_online.yaml:14 是 train_iters: 10、:16 是 eval_iters: 0

另外 issue 提到「当前实际配置为 IdentityDataTransform / DummyDataset / legacy dataloader / 未配置 get_batch」—— 这几项在现在的三个 demo yaml 里都搜不到,get_batch: 也已经配上了。

所以「按期望恢复」这件事做不了:build_llm_dataset 与 build_llm_get_batch 这两个名字已经不在代码里,照字面改会把现在的 online 数据集 + DynamicBatchDataLoader + ParallelBatch 结构换掉。eval_iters 期望 1、现在是 0 —— 这个我认为是有意的 smoke 配置(train_iters 也很小),不该照 issue 改。

如果这条的本意只是「demo 不要停在 PR1155 的临时 tiny-Llama/DummyDataset 形态」,那它已经达到了。要是你们认为还有哪一项没落地,麻烦指一下具体是哪一个 —— 我按现状重新看。

(没有实测跑 demo:那需要 8 卡与 Qwen3-30B-A3B 权重。上面全部是读配置与全仓检索的结果。)

likedislike