Skip to content

Commit 659355b

Browse files
committed
docs(model): run Nemotron 3.5 Lightning H100 long-context SFT on four nodes
The published two-node H100 sft_long_context command runs out of memory in iteration 2 on H100 80GB at the card's recipe-containing revision, so the leaf was never reproducible. Four nodes halve the distributed optimizer shard without changing the convergence contract (recipe GBS/MBS, sequence length, TP/CP/EP, recompute and precision are unchanged). Re-verify the leaf on nvcr.io/nvidia/nemo:26.08 at bcd2d13, record the measured metrics, update the audited token-slot fixture to 32 GPUs, and state in the card summary that every verified training leaf was measured at the card's bridge_commit. Extend the recipe-revision test to require each verified leaf's last_verified date to be no earlier than its bridge_commit's commit date. Signed-off-by: Pruthviraj Prakash <pruprakash@nvidia.com>
1 parent b0139f0 commit 659355b

6 files changed

Lines changed: 73 additions & 53 deletions

File tree

‎docs/_static/model-verification/catalog-v1.json‎

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6164,15 +6164,15 @@
61646164
"expert_parallel": "8",
61656165
"expert_tensor_parallel": "1",
61666166
"gpus_per_node": "8",
6167-
"nodes": "2",
6167+
"nodes": "4",
61686168
"recipe": "nemotron_3_5_lightning_sft_config",
61696169
"sequence_length": "32768",
61706170
"tensor_parallel": "2",
6171-
"total_gpus": 16
6171+
"total_gpus": 32
61726172
}
61736173
],
61746174
"commands": [
6175-
"./scripts/training/train.sh --nodes 2 --gpus-per-node 8 --recipe nemotron_3_5_lightning_sft_config --mode sft --dataset openmathinstruct2 --max_steps 100 --seq_length 32768 --lr 5e-6 --min_lr 0 --warmup_iters 10 --tensor_model_parallel_size 2 --context_parallel_size 2 --expert_tensor_parallel_size 1 --expert_model_parallel_size 8 --pretrained_checkpoint work/model-verification/nemotron-3.5-lightning/imported-megatron/iter_0000000 'dataset.hf_dataset.load_kwargs={revision:\"469216e3f46f4dacf476b382e192485ea51a143e\"}' dataset.enable_offline_packing=true 'dataset.offline_packing_specs={packed_sequence_size:32768,pad_seq_to_mult:4}' model.sequence_parallel=true model.cp_comm_type=p2p model.cross_entropy_loss_fusion=true model.calculate_per_token_loss=true model.recompute_granularity=full model.recompute_modules=null model.recompute_method=uniform model.recompute_num_layers=1 model.moe_router_force_load_balancing=false ddp.average_in_collective=false ddp.overlap_param_gather=false optimizer.overlap_param_gather=false scheduler.lr_decay_iters=100 validation.eval_iters=0 validation.eval_interval=0 checkpoint.load=null checkpoint.save_optim=false checkpoint.save_rng=false checkpoint.async_save=false --save_dir work/model-verification/nemotron-3.5-lightning-h100/long-sft-checkpoints --save_interval 50 logger.log_interval=1 logger.log_throughput=true logger.tensorboard_dir=null"
6175+
"./scripts/training/train.sh --nodes 4 --gpus-per-node 8 --recipe nemotron_3_5_lightning_sft_config --mode sft --dataset openmathinstruct2 --max_steps 100 --seq_length 32768 --lr 5e-6 --min_lr 0 --warmup_iters 10 --tensor_model_parallel_size 2 --context_parallel_size 2 --expert_tensor_parallel_size 1 --expert_model_parallel_size 8 --pretrained_checkpoint work/model-verification/nemotron-3.5-lightning/imported-megatron/iter_0000000 'dataset.hf_dataset.load_kwargs={revision:\"469216e3f46f4dacf476b382e192485ea51a143e\"}' dataset.enable_offline_packing=true 'dataset.offline_packing_specs={packed_sequence_size:32768,pad_seq_to_mult:4}' model.sequence_parallel=true model.cp_comm_type=p2p model.cross_entropy_loss_fusion=true model.calculate_per_token_loss=true model.recompute_granularity=full model.recompute_modules=null model.recompute_method=uniform model.recompute_num_layers=1 model.moe_router_force_load_balancing=false ddp.average_in_collective=false ddp.overlap_param_gather=false optimizer.overlap_param_gather=false scheduler.lr_decay_iters=100 validation.eval_iters=0 validation.eval_interval=0 checkpoint.load=null checkpoint.save_optim=false checkpoint.save_rng=false checkpoint.async_save=false --save_dir work/model-verification/nemotron-3.5-lightning-h100/long-sft-checkpoints --save_interval 50 logger.log_interval=1 logger.log_throughput=true logger.tensorboard_dir=null"
61766176
],
61776177
"dimensions": {},
61786178
"enabled_features": {
@@ -6181,15 +6181,15 @@
61816181
"sequence_packing": "offline"
61826182
},
61836183
"entry_id": "nemotron-3-5-lightning-sft-long-context-h100",
6184-
"expected_result": "Packed OpenMathInstruct-2 CP2 SFT completes exactly 100 finite-loss 32K steps with LM loss 0.4268321 -> 0.2650192 and MTP-1 loss 0.7322379 -> 0.4439273. All 100 steps have finite LM/MTP losses and no skipped or NaN iterations. Steps 91-100 average 40,863.010 ms / 188.950 TFLOP/s/GPU. Complete step-50 and step-100 checkpoints each contain 20 files, distributed metadata, saved run configuration and training state, with latest marker 100.\n",
6184+
"expected_result": "On four complete eight-H100 80GB nodes, packed OpenMathInstruct-2 CP2 SFT completes exactly 100 finite-loss 32K steps with LM loss 0.4268879 -> 0.2653436 and MTP-1 loss 0.7321755 -> 0.4469606. All 100 steps have finite LM/MTP losses and no skipped or NaN iterations. Steps 91-100 average 20,822.740 ms / 207.600 TFLOP/s/GPU. Complete step-50 and step-100 checkpoints each contain 36 files, distributed metadata, saved run configuration and training state, with latest marker 100. The two-node layout runs out of memory in iteration 2 on H100 80GB.\n",
61856185
"hardware": "H100",
6186-
"last_verified": "2026-08-03",
6186+
"last_verified": "2026-10-12",
61876187
"metrics": {
6188-
"final_loss": 0.2650192,
6189-
"initial_loss": 0.4268321,
6190-
"last_10_steps_model_tflops_per_gpu_avg": 188.95,
6191-
"last_10_steps_step_time_ms_avg": 40863.01,
6192-
"last_10_steps_tokens_per_second_per_gpu_avg": 6415.191
6188+
"final_loss": 0.2653436,
6189+
"initial_loss": 0.4268879,
6190+
"last_10_steps_model_tflops_per_gpu_avg": 207.6,
6191+
"last_10_steps_step_time_ms_avg": 20822.74,
6192+
"last_10_steps_tokens_per_second_per_gpu_avg": 6294.657
61936193
},
61946194
"precision": "bf16",
61956195
"source_pointer": "items.sft_long_context.H100",
@@ -6455,7 +6455,7 @@
64556455
"min_transformers_version": "5.8.1",
64566456
"slug": "nemotron-3.5-lightning",
64576457
"source_card": "examples/model_verification_cards/nemotron-3.5-lightning/card.yaml",
6458-
"summary": "Performance scope: pretrain_performance.H100 and pretrain_performance.GB200 use tuned canonical performance recipes; timing and throughput metrics from functional training items remain sanity checks rather than optimized performance results. The convergence pretraining recipes retain real tokenization, real data, natural routing, safety checks, and checkpointing while adopting the corresponding hardware performance recipe's execution stack. The H100 performance leaf uses BF16 Adam moments in a benchmark-only workload and is not convergence-comparable with FP32 optimizer-state runs. Nemotron 3.5 Lightning support verification covers conversion, inference, and training on H100 and GB200. Recipe names, work paths, and this verification-card path use the public Lightning name. The conversion and inference evidence used the 26.08 release-candidate software stack; the training evidence was measured in the public 26.08 base container at the recorded bridge_commit.\n",
6458+
"summary": "Performance scope: pretrain_performance.H100 and pretrain_performance.GB200 use tuned canonical performance recipes; timing and throughput metrics from functional training items remain sanity checks rather than optimized performance results. The convergence pretraining recipes retain real tokenization, real data, natural routing, safety checks, and checkpointing while adopting the corresponding hardware performance recipe's execution stack. The H100 performance leaf uses BF16 Adam moments in a benchmark-only workload and is not convergence-comparable with FP32 optimizer-state runs. Nemotron 3.5 Lightning support verification covers conversion, inference, and training on H100 and GB200. Recipe names, work paths, and this verification-card path use the public Lightning name. The conversion and inference evidence used the 26.08 release-candidate software stack; every verified training leaf was measured in the public 26.08 base container at the card's default bridge_commit, with the H100 long-context SFT leaf on four eight-GPU nodes.\n",
64596459
"title": "nemotron_3_5_lightning"
64606460
},
64616461
{

‎docs/fern/versions/nightly/pages/models/nemotron/nemotron3.5-lightning.mdx‎

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -608,30 +608,30 @@ Choose a workflow, precision, and exact recorded combination. The command and ex
608608
<dl class="verification-model-detail-meta">
609609
<div><dt>Hardware</dt><dd>H100</dd></div>
610610
<div><dt>Precision</dt><dd>BF16</dd></div>
611-
<div><dt>Last verified</dt><dd>2026-08-03</dd></div>
611+
<div><dt>Last verified</dt><dd>2026-10-12</dd></div>
612612
</dl>
613613
<section class="verification-recorded-metrics">
614614
<h5>Recorded metrics</h5>
615615
<dl class="verification-metric-list">
616616
<div>
617617
<dt>Initial loss</dt>
618-
<dd>0.4268321</dd>
618+
<dd>0.4268879</dd>
619619
</div>
620620
<div>
621621
<dt>Final loss</dt>
622-
<dd>0.2650192</dd>
622+
<dd>0.2653436</dd>
623623
</div>
624624
<div>
625625
<dt>Step time · last 10 avg</dt>
626-
<dd>40,863.010 ms</dd>
626+
<dd>20,822.740 ms</dd>
627627
</div>
628628
<div>
629629
<dt>Model throughput · last 10 avg</dt>
630-
<dd>188.950 TFLOP/s/GPU</dd>
630+
<dd>207.600 TFLOP/s/GPU</dd>
631631
</div>
632632
<div>
633633
<dt>Token throughput · last 10 avg</dt>
634-
<dd>6,415.191 tokens/s/GPU</dd>
634+
<dd>6,294.657 tokens/s/GPU</dd>
635635
</div>
636636
</dl>
637637
</section>
@@ -642,12 +642,12 @@ Choose a workflow, precision, and exact recorded combination. The command and ex
642642
<span>Command</span>
643643
<button type="button" class="verification-copy-command">Copy</button>
644644
</div>
645-
<pre><code class="language-bash">./scripts/training/train.sh --nodes 2 --gpus-per-node 8 --recipe nemotron_3_5_lightning_sft_config --mode sft --dataset openmathinstruct2 --max_steps 100 --seq_length 32768 --lr 5e-6 --min_lr 0 --warmup_iters 10 --tensor_model_parallel_size 2 --context_parallel_size 2 --expert_tensor_parallel_size 1 --expert_model_parallel_size 8 --pretrained_checkpoint work/model-verification/nemotron-3.5-lightning/imported-megatron/iter_0000000 &#x27;dataset.hf_dataset.load_kwargs=&#123;revision:&quot;469216e3f46f4dacf476b382e192485ea51a143e&quot;&#125;&#x27; dataset.enable_offline_packing=true &#x27;dataset.offline_packing_specs=&#123;packed_sequence_size:32768,pad_seq_to_mult:4&#125;&#x27; model.sequence_parallel=true model.cp_comm_type=p2p model.cross_entropy_loss_fusion=true model.calculate_per_token_loss=true model.recompute_granularity=full model.recompute_modules=null model.recompute_method=uniform model.recompute_num_layers=1 model.moe_router_force_load_balancing=false ddp.average_in_collective=false ddp.overlap_param_gather=false optimizer.overlap_param_gather=false scheduler.lr_decay_iters=100 validation.eval_iters=0 validation.eval_interval=0 checkpoint.load=null checkpoint.save_optim=false checkpoint.save_rng=false checkpoint.async_save=false --save_dir work/model-verification/nemotron-3.5-lightning-h100/long-sft-checkpoints --save_interval 50 logger.log_interval=1 logger.log_throughput=true logger.tensorboard_dir=null</code></pre>
645+
<pre><code class="language-bash">./scripts/training/train.sh --nodes 4 --gpus-per-node 8 --recipe nemotron_3_5_lightning_sft_config --mode sft --dataset openmathinstruct2 --max_steps 100 --seq_length 32768 --lr 5e-6 --min_lr 0 --warmup_iters 10 --tensor_model_parallel_size 2 --context_parallel_size 2 --expert_tensor_parallel_size 1 --expert_model_parallel_size 8 --pretrained_checkpoint work/model-verification/nemotron-3.5-lightning/imported-megatron/iter_0000000 &#x27;dataset.hf_dataset.load_kwargs=&#123;revision:&quot;469216e3f46f4dacf476b382e192485ea51a143e&quot;&#125;&#x27; dataset.enable_offline_packing=true &#x27;dataset.offline_packing_specs=&#123;packed_sequence_size:32768,pad_seq_to_mult:4&#125;&#x27; model.sequence_parallel=true model.cp_comm_type=p2p model.cross_entropy_loss_fusion=true model.calculate_per_token_loss=true model.recompute_granularity=full model.recompute_modules=null model.recompute_method=uniform model.recompute_num_layers=1 model.moe_router_force_load_balancing=false ddp.average_in_collective=false ddp.overlap_param_gather=false optimizer.overlap_param_gather=false scheduler.lr_decay_iters=100 validation.eval_iters=0 validation.eval_interval=0 checkpoint.load=null checkpoint.save_optim=false checkpoint.save_rng=false checkpoint.async_save=false --save_dir work/model-verification/nemotron-3.5-lightning-h100/long-sft-checkpoints --save_interval 50 logger.log_interval=1 logger.log_throughput=true logger.tensorboard_dir=null</code></pre>
646646
</div>
647647
</section>
648648
<section class="verification-expected-result">
649649
<h5>Expected result</h5>
650-
<p>Packed OpenMathInstruct-2 CP2 SFT completes exactly 100 finite-loss 32K steps with LM loss 0.4268321 -&gt; 0.2650192 and MTP-1 loss 0.7322379 -&gt; 0.4439273. All 100 steps have finite LM/MTP losses and no skipped or NaN iterations. Steps 91-100 average 40,863.010 ms / 188.950 TFLOP/s/GPU. Complete step-50 and step-100 checkpoints each contain 20 files, distributed metadata, saved run configuration and training state, with latest marker 100.</p>
650+
<p>On four complete eight-H100 80GB nodes, packed OpenMathInstruct-2 CP2 SFT completes exactly 100 finite-loss 32K steps with LM loss 0.4268879 -&gt; 0.2653436 and MTP-1 loss 0.7321755 -&gt; 0.4469606. All 100 steps have finite LM/MTP losses and no skipped or NaN iterations. Steps 91-100 average 20,822.740 ms / 207.600 TFLOP/s/GPU. Complete step-50 and step-100 checkpoints each contain 36 files, distributed metadata, saved run configuration and training state, with latest marker 100. The two-node layout runs out of memory in iteration 2 on H100 80GB.</p>
651651
</section>
652652
</article>
653653
<article id="nemotron-3-5-lightning-sft-long-context-gb200" class="verification-model-detail" data-entry-detail="nemotron-3-5-lightning-sft-long-context-gb200" tabindex="-1">

‎docs/models/nemotron/nemotron3.5-lightning.md‎

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -618,30 +618,30 @@ Choose a workflow, precision, and exact recorded combination. The command and ex
618618
<dl class="verification-model-detail-meta">
619619
<div><dt>Hardware</dt><dd>H100</dd></div>
620620
<div><dt>Precision</dt><dd>BF16</dd></div>
621-
<div><dt>Last verified</dt><dd>2026-08-03</dd></div>
621+
<div><dt>Last verified</dt><dd>2026-10-12</dd></div>
622622
</dl>
623623
<section class="verification-recorded-metrics">
624624
<h5>Recorded metrics</h5>
625625
<dl class="verification-metric-list">
626626
<div>
627627
<dt>Initial loss</dt>
628-
<dd>0.4268321</dd>
628+
<dd>0.4268879</dd>
629629
</div>
630630
<div>
631631
<dt>Final loss</dt>
632-
<dd>0.2650192</dd>
632+
<dd>0.2653436</dd>
633633
</div>
634634
<div>
635635
<dt>Step time · last 10 avg</dt>
636-
<dd>40,863.010 ms</dd>
636+
<dd>20,822.740 ms</dd>
637637
</div>
638638
<div>
639639
<dt>Model throughput · last 10 avg</dt>
640-
<dd>188.950 TFLOP/s/GPU</dd>
640+
<dd>207.600 TFLOP/s/GPU</dd>
641641
</div>
642642
<div>
643643
<dt>Token throughput · last 10 avg</dt>
644-
<dd>6,415.191 tokens/s/GPU</dd>
644+
<dd>6,294.657 tokens/s/GPU</dd>
645645
</div>
646646
</dl>
647647
</section>
@@ -652,12 +652,12 @@ Choose a workflow, precision, and exact recorded combination. The command and ex
652652
<span>Command</span>
653653
<button type="button" class="verification-copy-command">Copy</button>
654654
</div>
655-
<pre><code class="language-bash">./scripts/training/train.sh --nodes 2 --gpus-per-node 8 --recipe nemotron_3_5_lightning_sft_config --mode sft --dataset openmathinstruct2 --max_steps 100 --seq_length 32768 --lr 5e-6 --min_lr 0 --warmup_iters 10 --tensor_model_parallel_size 2 --context_parallel_size 2 --expert_tensor_parallel_size 1 --expert_model_parallel_size 8 --pretrained_checkpoint work/model-verification/nemotron-3.5-lightning/imported-megatron/iter_0000000 &#x27;dataset.hf_dataset.load_kwargs={revision:&quot;469216e3f46f4dacf476b382e192485ea51a143e&quot;}&#x27; dataset.enable_offline_packing=true &#x27;dataset.offline_packing_specs={packed_sequence_size:32768,pad_seq_to_mult:4}&#x27; model.sequence_parallel=true model.cp_comm_type=p2p model.cross_entropy_loss_fusion=true model.calculate_per_token_loss=true model.recompute_granularity=full model.recompute_modules=null model.recompute_method=uniform model.recompute_num_layers=1 model.moe_router_force_load_balancing=false ddp.average_in_collective=false ddp.overlap_param_gather=false optimizer.overlap_param_gather=false scheduler.lr_decay_iters=100 validation.eval_iters=0 validation.eval_interval=0 checkpoint.load=null checkpoint.save_optim=false checkpoint.save_rng=false checkpoint.async_save=false --save_dir work/model-verification/nemotron-3.5-lightning-h100/long-sft-checkpoints --save_interval 50 logger.log_interval=1 logger.log_throughput=true logger.tensorboard_dir=null</code></pre>
655+
<pre><code class="language-bash">./scripts/training/train.sh --nodes 4 --gpus-per-node 8 --recipe nemotron_3_5_lightning_sft_config --mode sft --dataset openmathinstruct2 --max_steps 100 --seq_length 32768 --lr 5e-6 --min_lr 0 --warmup_iters 10 --tensor_model_parallel_size 2 --context_parallel_size 2 --expert_tensor_parallel_size 1 --expert_model_parallel_size 8 --pretrained_checkpoint work/model-verification/nemotron-3.5-lightning/imported-megatron/iter_0000000 &#x27;dataset.hf_dataset.load_kwargs={revision:&quot;469216e3f46f4dacf476b382e192485ea51a143e&quot;}&#x27; dataset.enable_offline_packing=true &#x27;dataset.offline_packing_specs={packed_sequence_size:32768,pad_seq_to_mult:4}&#x27; model.sequence_parallel=true model.cp_comm_type=p2p model.cross_entropy_loss_fusion=true model.calculate_per_token_loss=true model.recompute_granularity=full model.recompute_modules=null model.recompute_method=uniform model.recompute_num_layers=1 model.moe_router_force_load_balancing=false ddp.average_in_collective=false ddp.overlap_param_gather=false optimizer.overlap_param_gather=false scheduler.lr_decay_iters=100 validation.eval_iters=0 validation.eval_interval=0 checkpoint.load=null checkpoint.save_optim=false checkpoint.save_rng=false checkpoint.async_save=false --save_dir work/model-verification/nemotron-3.5-lightning-h100/long-sft-checkpoints --save_interval 50 logger.log_interval=1 logger.log_throughput=true logger.tensorboard_dir=null</code></pre>
656656
</div>
657657
</section>
658658
<section class="verification-expected-result">
659659
<h5>Expected result</h5>
660-
<p>Packed OpenMathInstruct-2 CP2 SFT completes exactly 100 finite-loss 32K steps with LM loss 0.4268321 -&gt; 0.2650192 and MTP-1 loss 0.7322379 -&gt; 0.4439273. All 100 steps have finite LM/MTP losses and no skipped or NaN iterations. Steps 91-100 average 40,863.010 ms / 188.950 TFLOP/s/GPU. Complete step-50 and step-100 checkpoints each contain 20 files, distributed metadata, saved run configuration and training state, with latest marker 100.
660+
<p>On four complete eight-H100 80GB nodes, packed OpenMathInstruct-2 CP2 SFT completes exactly 100 finite-loss 32K steps with LM loss 0.4268879 -&gt; 0.2653436 and MTP-1 loss 0.7321755 -&gt; 0.4469606. All 100 steps have finite LM/MTP losses and no skipped or NaN iterations. Steps 91-100 average 20,822.740 ms / 207.600 TFLOP/s/GPU. Complete step-50 and step-100 checkpoints each contain 36 files, distributed metadata, saved run configuration and training state, with latest marker 100. The two-node layout runs out of memory in iteration 2 on H100 80GB.
661661
</p>
662662
</section>
663663
</article>

0 commit comments

Comments
 (0)