Skip to content

fix: NVRx async compatibility and defer resiliency import - #4420

Merged
asolergi-nv merged 11 commits into
NVIDIA:mainfrom
sbak5:sbak/nvrx_compat_main
Apr 23, 2026
Merged

fix: NVRx async compatibility and defer resiliency import#4420
asolergi-nv merged 11 commits into
NVIDIA:mainfrom
sbak5:sbak/nvrx_compat_main

Conversation

@sbak5

@sbak5 sbak5 commented Apr 22, 2026

Copy link
Copy Markdown
Contributor

What does this PR do ?

This PR tightens Megatron’s NVRx async checkpoint integration and removes
unnecessary resiliency dependencies from non-NVRx paths.

Summary:

  • require the NVRx async checkpointing symbols Megatron actually depends on
  • remove the local MCore fallback for CachedMetadataFileSystemReader
  • route async save helpers through async-strategy-specific modules
  • defer in-process restart imports until the feature is enabled
  • avoid eager type-only NVRx imports at module import time
  • fail fast on async signature mismatches instead of silently filtering kwargs

Validated with:

  • PyPI nvidia-resiliency-ext showing expected incompatibility on old async APIs
  • compatible NVRx commits including 15a851565a4ce846c04431ecb0cf09903ab4837e and
    1c7f1a8ea60599a28835b0caf6353550a38d2db8
  • sync save with and without nvidia-resiliency-ext installed
  • normal training imports when in-process restart is not enabled

⚠️ For major changes (either in lines of code or in its impact), please make sure to first share a design doc with the team. If you're unsure what's the best way to do so, contact the @mcore-oncall.

Contribution process

Pre-checks

  • I have added relevant unit tests
  • I have added relevant functional tests
  • I have added proper typing to my code Typing guidelines
  • I have added relevant documentation
  • I have run the autoformatter.sh on my PR

Code review

Feel free to message or comment the @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"

  1. When your PR is ready, click Ready for Review.
  2. An oncall reviewer is auto-assigned and expert reviewers are notified based on your changes.
    • Some PRs may jump straight to step 2. This is determined by .github/CODEOWNERS.

⚠️ Only mark as ready once merge-conflicts are resolved and the CI is passing.
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, the Final Review label 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 Approved label is applied automatically.

Merge

Any member of mcore-engineers will be able to merge your PR.

For MRs into `dev` branch The proposed review process for `dev` branch is under active discussion.

MRs are mergable after one approval by either eharper@nvidia.com or zijiey@nvidia.com.

@sbak5
sbak5 requested review from a team as code owners April 22, 2026 08:01
@copy-pr-bot

copy-pr-bot Bot commented Apr 22, 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.

@svcnvidia-nemo-ci
svcnvidia-nemo-ci marked this pull request as draft April 22, 2026 08:02
@github-actions

Copy link
Copy Markdown
Contributor

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:

  1. Add the oncall reviewer (optional reviewer)
  2. Add required review teams based on your changes

See the contribution guide for more details.

@sbak5

sbak5 commented Apr 22, 2026

Copy link
Copy Markdown
Contributor Author

/ok to test 9891c42

@svcnvidia-nemo-ci svcnvidia-nemo-ci added this to the Core 0.16 milestone Apr 22, 2026
@sbak5

sbak5 commented Apr 22, 2026

Copy link
Copy Markdown
Contributor Author

/ok to test e4de738

@sbak5 sbak5 added the core_r0.17.0 Auto-cherrypick to release branch. Apply before merge; cherrypick happens after merge. label Apr 22, 2026
@dimapihtar

Copy link
Copy Markdown
Contributor

/ok to test eb2b9ea

@dimapihtar
dimapihtar marked this pull request as ready for review April 22, 2026 16:40
@svcnvidia-nemo-ci
svcnvidia-nemo-ci requested a review from a team April 22, 2026 16:40
@dimapihtar dimapihtar added the Expert Review [deprecated] Apply this label to indicate that your PR is ready for expert review. label Apr 22, 2026

@dimapihtar dimapihtar left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Thank you!

@asolergi-nv

Copy link
Copy Markdown
Contributor

/claude review


def get_save_and_finalize_callbacks(writer, save_state_dict_ret) -> NVRxAsyncRequest:
def get_save_and_finalize_callbacks(
writer, save_state_dict_ret, async_strategy: str = "nvrx"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Every other default in this PR was changed from "nvrx" to "mcore" (fully_parallel.py, torch.py:_get_filesystem_reader, torch.py:load, serialization.py), but this one was missed. All current callers pass the argument explicitly so it's not broken today, but a future caller relying on the default would silently get the nvrx path — which may fail if nvidia-resiliency-ext isn't installed.

Suggested change
writer, save_state_dict_ret, async_strategy: str = "nvrx"
writer, save_state_dict_ret, async_strategy: str = "mcore"

@claude claude Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Light review — one likely bug flagged inline (default value inconsistency on get_save_and_finalize_callbacks).

Test coverage: The new nvrx.py module adds has_nvrx_async_support() (with 8 symbol checks across 4 submodules) and make_nvrx_async_request(), but neither has direct unit tests. The only new test covers a single get_async_strategy error path. Consider adding tests for:

  • has_nvrx_async_support() returning False when individual symbols are missing (not just entire modules)
  • make_nvrx_async_request() constructing requests correctly for both mcore and nvrx AsyncRequest classes
  • The new init_persistent_async_worker signature-checking logic in async_utils.py

@asolergi-nv asolergi-nv left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fix default value!

@dimapihtar
dimapihtar requested a review from yaoyu-33 April 22, 2026 17:36
Comment thread megatron/core/dist_checkpointing/strategies/nvrx.py Outdated
@svcnvidia-nemo-ci svcnvidia-nemo-ci added the Final Review PR is in the "final review" stage label Apr 22, 2026
@sbak5

sbak5 commented Apr 22, 2026

Copy link
Copy Markdown
Contributor Author

/ok to test 805473a

@svcnvidia-nemo-ci svcnvidia-nemo-ci added Approved All necessary approvals have been made and removed Final Review PR is in the "final review" stage labels Apr 23, 2026
@asolergi-nv
asolergi-nv added this pull request to the merge queue Apr 23, 2026
@svcnvidia-nemo-ci

Copy link
Copy Markdown
Contributor

🔄 Merge queue validation started!

You can track the progress here: https://github.com/NVIDIA/Megatron-LM/actions/runs/24847833017

@svcnvidia-nemo-ci

Copy link
Copy Markdown
Contributor

🔄 Merge queue validation started!

You can track the progress here: https://github.com/NVIDIA/Megatron-LM/actions/runs/24850965249

@svcnvidia-nemo-ci

Copy link
Copy Markdown
Contributor

🔄 Merge queue validation started!

You can track the progress here: https://github.com/NVIDIA/Megatron-LM/actions/runs/24854872727

Merged via the queue into NVIDIA:main with commit 32275b2 Apr 23, 2026
350 of 354 checks passed
@asolergi-nv
asolergi-nv deleted the sbak/nvrx_compat_main branch April 23, 2026 20:10
yangbofun pushed a commit to xlm-research/Megatron-LM that referenced this pull request May 22, 2026
Co-authored-by: Dmytro Pykhtar <37850217+dimapihtar@users.noreply.github.com>
yhgalaxy pushed a commit to yhgalaxy/Megatron-LM that referenced this pull request Jun 17, 2026
Co-authored-by: Dmytro Pykhtar <37850217+dimapihtar@users.noreply.github.com>
Signed-off-by: yhgalaxy <yhgalaxy@outlook.com>
jon-barker pushed a commit to jon-barker/Megatron-LM that referenced this pull request Jul 10, 2026
Co-authored-by: Dmytro Pykhtar <37850217+dimapihtar@users.noreply.github.com>
Signed-off-by: Jon Barker <jbarker@aws-cmh-slurm-1-vscode-02.cm.cluster>
terminator123 pushed a commit to 021ai/Megatron-LM that referenced this pull request Aug 3, 2026
Co-authored-by: Dmytro Pykhtar <37850217+dimapihtar@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Approved All necessary approvals have been made complexity: medium core_r0.17.0 Auto-cherrypick to release branch. Apply before merge; cherrypick happens after merge. Expert Review [deprecated] Apply this label to indicate that your PR is ready for expert review. Run functional tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants