Skip to content

Integrate GTP with heterogeneous MIMO training - #6268

Closed
yashaswikarnati wants to merge 8 commits into
NVIDIA:mainfrom
yashaswikarnati:ykarnati/mimo-gtp-stacked-e2e
Closed

Integrate GTP with heterogeneous MIMO training#6268
yashaswikarnati wants to merge 8 commits into
NVIDIA:mainfrom
yashaswikarnati:ykarnati/mimo-gtp-stacked-e2e

Conversation

@yashaswikarnati

@yashaswikarnati yashaswikarnati commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Purpose

Integration-only draft for end-to-end review and validation. The production changes are split into:

The earlier draft #6249 remains untouched as a reference.

Acceptance

  • 20-layer heterogeneous Nemotron MIMO mock recipe
  • TP2/GTP8 and EP4/EGTP2
  • every allocated GPU active
  • 100 training iterations
  • distributed model and optimizer checkpoint at iteration 100
  • fresh-process load followed by iteration 101

Validation

  • Focused tests:
    • MIMO heterogeneous argument suite: 14 passed
    • generic checkpoint language-model hook: passed
    • 8-rank heterogeneous GTP topology test: passed on every rank
    • 8-rank BridgeCommunicator GTP data-lane test: passed on every rank
  • H100 end-to-end:
    • Transformer Engine 2.19.dev0 on every node
    • 6 nodes x 4 GPUs, with 24 allocated and 24 active ranks
    • encoder 8 ranks; language model 16 ranks
    • TP2/GTP8 and EP4/EGTP2
    • completed 100 training iterations
    • saved the distributed model and optimizer checkpoint at iteration 100
    • a fresh 24-rank process loaded iteration 100 and completed iteration 101
    • completed successfully with exit code 0

fanshiqing and others added 8 commits August 3, 2026 20:02
Signed-off-by: Shiqing Fan <shiqingf@nvidia.com>
- Thread pg_collection from TransformerLayer through Attention/MLP into the TE
  and core linear layers.
- Assert in finalize_model_grads when the config enables the axis but the group
  is missing, instead of treating it as "GTP inactive" and training on wrong
  gradients.
- Add test_gtp_custom_pgs.py: two TransformerBlocks, identical degrees
  (TP=1, CP=1, GTP_remat=2 over world=4), identical weights and input, one from
  the MPU groups and one from a custom collection with permuted gtp_remat rank
  membership. Output and gradients must match; verified it fails without the
  plumbing.

Signed-off-by: Shiqing Fan <shiqingf@nvidia.com>
Signed-off-by: Shiqing Fan <shiqingf@nvidia.com>
hasattr() is always True on ProcessGroupCollection: __getattr__ returns None for
declared-but-unset fields. resolve_gtp_remat_group() gated its MPU fallback on
hasattr, so the fallback was unreachable.

  * A collection omitting gtp_remat resolved to None -> weights silently built
    UNSHARDED under GTP. Check `attr in vars(...)` instead.
  * Add test_pg_collection_without_gtp_remat_falls_back_to_mpu. The existing test
    always set gtp_remat explicitly, so it could not catch this.

Signed-off-by: Shiqing Fan <shiqingf@nvidia.com>
Signed-off-by: ykarnati <ykarnati@nvidia.com>
Signed-off-by: ykarnati <ykarnati@nvidia.com>
Signed-off-by: ykarnati <ykarnati@nvidia.com>
Signed-off-by: ykarnati <ykarnati@nvidia.com>
@copy-pr-bot

copy-pr-bot Bot commented Aug 4, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants