Add 1-node GB200 functional test for checkpoint load with load_optim=False - #6347
Draft
asolergi-nv wants to merge 1 commit into
Draft
Add 1-node GB200 functional test for checkpoint load with load_optim=False#6347asolergi-nv wants to merge 1 commit into
asolergi-nv wants to merge 1 commit into
Conversation
Numerical regressions that only surface when a checkpoint is loaded with the
optimizer state dropped are currently invisible to CI: every GB200 mr-github
test either trains from scratch or resumes with the optimizer intact. That is
the path post-training (SFT) and the MLPerf DeepSeek submission take, so a bug
there can pass the whole suite and still land.
This adds a single-node counterpart to the 2-node Nemotron 3.5 Lightning
nightly test that exercises exactly that path.
- TEST_TYPE frozen-start, so the run loads the frozen checkpoint from
${CHECKPOINT_LOAD_PATH} in one training run.
- --no-load-optim drops the optimizer state; --finetune resets the iteration
counter so the run logs steps 1..20 and the golden values line up.
- TP1/PP1/CP1/EP4 on 4 GPUs. The architecture is the 52-layer model scaled to
14 layers, keeping its 6:6:2 Mamba/MoE/attention ratio and both MTP depths.
- alltoall rather than the flex/HybridEP dispatcher: no GB200 1-node test uses
HybridEP, and its allgather does not survive the evaluation loop that this
test deliberately runs.
- eval-interval 10 < train-iters 20, so validation runs during training rather
than only at the end.
- the_pile shard00 + GPT-2 BPE, matching the other 1-node GB200 tests.
mtp_2 loss is added to the metric extractor and thresholds; the same two lines
appear in the Nemotron 3.5 Lightning nightly PR.
Validated on OCI GB200 through run_ci_test.sh with N_REPEAT=5: 5/5 repeats
passed against the golden values in 793 s. Two independent runs differ by
0.002% on lm loss and 1.65% on num-zeros, well inside tolerance.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually. Contributors can view more details about this message here. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What does this PR do?
Adds a 1-node / 4-GPU GB200 functional test that loads a checkpoint with the optimizer state dropped (
--no-load-optim) — the path post-training (SFT) and the MLPerf DeepSeek submission take.Why
Every GB200
mr-githubtest today either trains from scratch or resumes with the optimizer state intact. A numerical regression that only appears when a checkpoint is loaded without it can pass the entire unit and functional suite and still land in main. This closes that gap.Details
Derived from the 2-node Nemotron 3.5 Lightning nightly test (#6312), scaled to a single node:
TEST_TYPE: frozen-start— loads the frozen checkpoint from${CHECKPOINT_LOAD_PATH}in a single training run.--no-load-optimis what drops the optimizer state.--finetuneresets the iteration counter so the run logs steps 1..20 and the golden values line up; without it the extractor pads steps 1..N with"nan".MEMEM*EMEMEM*E/*E/*E), preserving its 6:6:2 Mamba/MoE/attention ratio and both MTP depths.alltoallrather than the flex/HybridEP dispatcher. No GB200 1-node test uses HybridEP, and its allgather does not survive the evaluation loop that this test deliberately runs (HYBRID-EP ALLGATHER TIMEOUT, reproduced on 2xGB200).eval-interval 10<train-iters 20, so validation runs during training rather than only at the end.mtp_2 lossis added to the metric extractor and toCHECK_THRESHOLDS. The same two lines also appear in #6312, so whichever lands second will have a trivial conflict.Validation
Run on OCI GB200 through the real
run_ci_test.shharness withN_REPEAT=5:lm loss,mtp_1 loss,mtp_2 loss,num-zeros,mem-allocated-bytes,mem-max-allocated-bytes.lm loss, 0.005% onmtp_2 lossand 1.65% onnum-zeros— well inside tolerance.iteration-timeis intentionally excluded fromMETRICS: its median varies ~3.6% run-to-run against a 5% tolerance, and 0 of the 58 existing GB200 1-node tests compare it.Issue tracking
Linked issue: N/A
Contribution process
Pre-checks