[Main] Numerical fix for moe single grouped weight with fp8 fp4 primary weight and grad norm spikes#5487
[Main] Numerical fix for moe single grouped weight with fp8 fp4 primary weight and grad norm spikes#5487zhongbozhu wants to merge 18 commits into
Conversation
|
This PR has been automatically converted to draft because all PRs must start as drafts. When you are ready for review, click Ready for Review to begin the review process. This will:
See the contribution guide for more details. |
20f6379 to
9df8f4e
Compare
|
/ok to test 9df8f4e |
Signed-off-by: Zhongbo Zhu <zhongboz@nvidia.com>
Signed-off-by: Zhongbo Zhu <zhongboz@nvidia.com>
Signed-off-by: Zhongbo Zhu <zhongboz@nvidia.com>
Signed-off-by: Zhongbo Zhu <zhongboz@nvidia.com>
Signed-off-by: Zhongbo Zhu <zhongboz@nvidia.com>
Signed-off-by: Zhongbo Zhu <zhongboz@nvidia.com>
Signed-off-by: Zhongbo Zhu <zhongboz@nvidia.com>
…ight Signed-off-by: Zhongbo Zhu <zhongboz@nvidia.com>
9df8f4e to
7973f73
Compare
Signed-off-by: zhongboz <zhongboz@nvidia.com>
Signed-off-by: Zhongbo Zhu <zhongboz@nvidia.com>
Signed-off-by: Zhongbo Zhu <zhongboz@nvidia.com>
Signed-off-by: Zhongbo Zhu <zhongboz@nvidia.com>
Signed-off-by: zhongboz <zhongboz@nvidia.com>
Signed-off-by: Zhongbo Zhu <zhongboz@nvidia.com>
Signed-off-by: zhongboz <zhongboz@nvidia.com>
Signed-off-by: zhongboz <zhongboz@nvidia.com>
|
/claude review |
There was a problem hiding this comment.
LGTM — extends MoE single-grouped-weight support to FP8/MXFP8/NVFP4 primary weights and fixes the grad-norm-spike bug (no_grad param sync + dispatch-state reset), backed by a thorough numerical parity + checkpoint + train-eval-train regression suite. One cosmetic vocal_size typo noted inline in the test (harmless, used consistently).
| sys.argv = ["test_moe_single_grouped_weight_numerics.py"] | ||
| args = parse_args() | ||
| args.num_layers = 1 | ||
| args.vocal_size = 1024 |
There was a problem hiding this comment.
Typo: vocal_size should be vocab_size. It's harmless here since the attribute is set and read consistently (line 164 sets it, line 135 reads it into GPTModel(vocab_size=...)), but it reads confusingly. If you rename it, update both this line and line 135 together.



What does this PR do ?
Mirrors: #5464
TODOs:
Unit tests with numerical checks passed, pending E2E validation.
test_single_grouped_mxfp8_train_eval_train_matches_train_onlyis a newly introduced test targeting to test thereuse_grad_buff_for_mxfp8_param_agrigorously, like adding checks fortrain-eval-trainswitches.Unit test coverage matrix:
bf16=Truefp8=Nonefp4=Nonegradient_accumulation_fusion=Falsebf16=Truefp8=Nonefp4=Nonegradient_accumulation_fusion=Truebf16=Truefp8="e4m3"fp8_recipe="mxfp8"fp8_param_gather=Falsereuse_grad_buf_for_mxfp8_param_ag=Falsegradient_accumulation_fusion=Falsebf16=Truefp8="e4m3"fp8_recipe="mxfp8"fp8_param_gather=Falsereuse_grad_buf_for_mxfp8_param_ag=Falsegradient_accumulation_fusion=Truebf16=Truefp8="e4m3"fp8_recipe="mxfp8"fp8_param_gather=Truereuse_grad_buf_for_mxfp8_param_ag=Truegradient_accumulation_fusion=Falsebf16=Truefp8="e4m3"fp8_recipe="mxfp8"fp8_param_gather=Truereuse_grad_buf_for_mxfp8_param_ag=Truegradient_accumulation_fusion=Truebf16=Truefp4="e2m1"fp4_recipe="nvfp4"fp4_param_gather=Falsegradient_accumulation_fusion=Falsebf16=Truefp4="e2m1"fp4_recipe="nvfp4"fp4_param_gather=Falsegradient_accumulation_fusion=Truebf16=Truefp4="e2m1"fp4_recipe="nvfp4"fp4_param_gather=Truegradient_accumulation_fusion=Falsebf16=Truefp4="e2m1"fp4_recipe="nvfp4"fp4_param_gather=Truegradient_accumulation_fusion=TrueEnv: 1 x gb200 node, 4 GPUs, the unit test only uses 2 parallel ranks.
Command:
Issue tracking
For PRs from open-source community contributors:
Linked issue:
Contribution process
Pre-checks
Code review
Feel free to message or comment @NVIDIA/mcore-oncall to help accelerate your merge into main. The less complex your PR is, the faster it will be approved and merged!
All PRs start as draft. If you open a non-draft PR, it will be automatically converted to draft.
Step 1: Mark PR as "Ready for Review"
.github/CODEOWNERS.Final Review might get declined if these requirements are not fulfilled.
Step 2: Final Review
For PRs that change
megatron/core, once all expert reviewers have approved, theFinal Reviewlabel is applied automatically and final reviewers are assigned.For PRs outside
megatron/core, this step is skipped.Step 3: Approved
Once all required reviewers have approved, the
Approvedlabel is applied automatically.Merge
Any member of mcore-engineers will be able to merge your PR.