[dev] moe(perf): Refactor CP layout - auto layout conversion - #5664
[dev] moe(perf): Refactor CP layout - auto layout conversion#5664yuzhongw-nvidia wants to merge 7 commits into
Conversation
6d8d4a5 to
1d81e8b
Compare
|
/claude review |
|
/claude strict-review |
Strict Review SummaryReviewed this CP-layout refactor with focus on correctness, training performance, and backward compatibility. Findings by severity: CRITICAL: 1, IMPORTANT: 0, SUGGESTION: 0 Most impactful finding
Overall assessmentThis is a well-structured, well-documented refactor that centralizes CP partition-mode ownership at the The zigzag↔contiguous conversion math (THD contiguous positions, freq offsets, SP gather/scatter path) traced consistently across Risk level: Low-to-moderate, contingent on fixing the one CRITICAL. It is a genuine correctness/loud-failure regression and will fail the existing unit test in CI. Everything else looked correct. |
89e9cd7 to
aff5947
Compare
|
/claude strict-review |
Strict Review SummaryReviewed the CP partition-mode refactor (zigzag to contiguous layout ownership moved from module-local conversions in GatedDeltaNet up to block/model-level scheduling). The core design is sound and the RoPE/THD index math checks out: I verified the contiguous THD freq_pos derivation, the exact-packed-freqs shift, and the fused-RoPE zigzag-only fallback. New public callers correctly use keyword args, so the inserted cp_partition_mode parameters do not break positional call sites. Findings by severity: CRITICAL: 1, IMPORTANT: 1, SUGGESTION: 2 Most impactful:
Risk assessment: High risk as-is. The CRITICAL finding is a hard break of the public HybridModel constructor that surfaces immediately in CI (unit tests omit the new arg). Once the default is corrected, the remaining items are low-risk cleanups. The standard non-hybrid/non-experimental GPT path is unaffected (source==target partition mode short-circuits with no extra work). Recommend re-running the hybrid + MTP unit suites after fixing the default. |
d161a8c to
905507b
Compare
|
/claude strict-review |
Strict Review SummaryReviewed the CP partition-mode refactor across RoPE utils, transformer/hybrid blocks, GPT/Hybrid models, and batch partitioning. The core design — a per-stage Findings by severity:
Most impactful:
Overall risk: Low–Moderate. No correctness defects found in the core CP conversion logic (SP gather/scatter symmetry, THD index computation, and RoPE freq mapping check out). The one IMPORTANT item is confined to example VLM code and is a graceful-degradation hazard rather than a core-path bug. Recommend addressing the silent-kwarg-drop before this pattern is copied to other bridges. Functional tests exercising contiguous CP with GDN + MTP + PP would strengthen confidence. |
3fded64 to
925a96b
Compare
|
Review summary — CP layout refactor Reviewed the full diff for implementation correctness, distributed correctness (TP/PP/SP/CP/EP), training-performance, and backward compatibility, then read the full source of the highest-risk changed files (rope_utils.py, conversion.py, gpt_model._postprocess, gated_delta_net.py, policy/routes/metadata, transformer_block.py, multi_token_prediction.py, the get_batch entrypoints, and the data/layout helpers). Overall this is a well-structured refactor: the split context_parallel_layout/ package has clear ownership boundaries, the route-tensor precompute + single-all-to-all conversion is a sound design, None-mode fast-paths are consistently guarded by cp_size > 1, and the layered validation (get_stage_entry_partition_mode -> per-layer get_required_cp_partition_mode_for_layer -> attention-level _validate_packed_seq_params_cp_partition_mode) fails loud on layout mismatches rather than silently mis-partitioning. I did not find a correctness bug in the layout conversion, the contiguous-RoPE branch, or the _postprocess loss round-trip (postprocess_to_input_converter is correctly initialized to None; the loss is converted back to the input layout at the boundary as documented). Findings
Counts: 0 Critical, 2 Important, 2 Suggestions. Key action items before merge:
No blocking correctness issues found. The two Important items are about numeric-baseline management and public-config compatibility rather than incorrect logic. Process-group usage: no new direct parallel_state.get_*_group() reads were introduced in megatron/core production code (the one get_context_parallel_group() in llava_model.py is pre-existing example-path code). |
5f9d723 to
649a782
Compare
|
Seems that it conflicts with |
68785ae to
d1c6752
Compare
3c77736 to
1b61965
Compare
e7c0639 to
4147c32
Compare
|
The auto mode is not in plan. Main works are transferred into #6387. |
What does this PR do?
Depends on: #6387
PR for main: #6233
Summary
This PR makes context-parallel token layout an explicit per-batch / per-layer contract instead of a single global
TransformerConfig.cp_partition_mode. The model can now keep the input batch layout, convert hidden states only at layout-sensitive layer boundaries, and restore model outputs to the expected input layout at the postprocess boundary.The main target is long-context hybrid training where different modules prefer different CP layouts:
PackedSeqParams.Key Changes
megatron.core.context_parallel_layoutas the shared CP-layout package:PackedSeqParams.TransformerConfig.cp_partition_modefor model-level planning. It is still validated if set, but model-level layout is inferred from module requirements and batch metadata.Compatibility / Limits
PackedSeqParams.cp_partition_modeis expected for CP > 1 model forwards. For now, GPT / Hybrid model forward paths can synthesize temporary metadata with a warning, but callers should pre-populate it. This warning path is intentionally not exercised by the updated unit tests.prebuild_thd_cp_partition_routes. Runtime fallback still exists with a warning for compatibility, but tests and pretrain batch paths prebuild the routes explicitly.discussion_r3691308680:_get_thd_freqs_on_this_cp_rankis not currently on an in-repo runtime call path after_apply_rotary_pos_emb_thdmoved to inlinefreq_poscomputation. It is kept withcp_partition_modehandling as a compatibility helper for external / bridge-like code that may still call it directly.Timeline
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.