Skip to content

Commit bd6e3cf

Browse files
committed
test(training): align optimizer fixtures with Muon setup
Signed-off-by: Chen Cui <chcui@nvidia.com>
1 parent b728726 commit bd6e3cf

8 files changed

Lines changed: 42 additions & 9 deletions

File tree

‎tests/functional_tests/training/muon_distributed_checkpoint.py‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
# Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved.
2+
13
"""Two-GPU numerical and save/resume regression for distributed optimizers.
24
35
Run with torch.distributed.run. Each case uses a fresh process; --compare checks

‎tests/unit_tests/data/megatron_mimo/test_loaders.py‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,9 +299,15 @@ def test_mimo_runtime_update_normalizes_zero_worker_provider_before_loader_const
299299
runtime_cfg.validation.eval_micro_batch_size = None
300300
runtime_cfg.profiling = None
301301
runtime_cfg.ddp.use_distributed_optimizer = False
302+
runtime_cfg.ddp.num_distributed_optimizer_instances = 1
302303
runtime_cfg.optimizer.use_distributed_optimizer = False
304+
runtime_cfg.optimizer.use_layer_wise_distributed_optimizer = False
305+
runtime_cfg.optimizer.optimizer = "adam"
306+
runtime_cfg.optimizer.overlap_param_gather_with_optimizer_step = False
303307
runtime_cfg.ddp.overlap_param_gather = False
304308
runtime_cfg.optimizer.overlap_param_gather = False
309+
runtime_cfg.ddp.reuse_grad_buf_for_mxfp8_param_ag = False
310+
runtime_cfg.optimizer.reuse_grad_buf_for_mxfp8_param_ag = False
305311

306312
megatron_mimo_runtime_config_update(runtime_cfg)
307313

‎tests/unit_tests/training/megatron_mimo/test_megatron_mimo_checkpointing.py‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,16 @@ def test_megatron_mimo_runtime_config_update_resolves_eval_batch_size_defaults()
5454
cfg.validation.eval_global_batch_size = None
5555
cfg.validation.eval_micro_batch_size = None
5656
cfg.profiling = None
57+
cfg.ddp.use_distributed_optimizer = False
58+
cfg.ddp.num_distributed_optimizer_instances = 1
59+
cfg.ddp.overlap_param_gather = False
60+
cfg.ddp.reuse_grad_buf_for_mxfp8_param_ag = False
61+
cfg.optimizer.optimizer = "adam"
62+
cfg.optimizer.use_distributed_optimizer = False
63+
cfg.optimizer.use_layer_wise_distributed_optimizer = False
64+
cfg.optimizer.overlap_param_gather = False
65+
cfg.optimizer.overlap_param_gather_with_optimizer_step = False
66+
cfg.optimizer.reuse_grad_buf_for_mxfp8_param_ag = False
5767

5868
megatron_mimo_runtime_config_update(cfg)
5969

‎tests/unit_tests/training/test_decentralized_pg.py‎

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -687,12 +687,12 @@ def test_setup_optimizer_passes_none_pg_collection_when_not_provided(
687687
assert call_kwargs["pg_collection"] is None
688688

689689
@patch("megatron.bridge.training.optim.get_model_config")
690-
@patch("megatron.bridge.training.optim.get_megatron_muon_optimizer")
690+
@patch("megatron.bridge.training.optim.get_megatron_optimizer")
691691
@patch("megatron.bridge.training.optim.OptimizerParamScheduler")
692692
def test_setup_optimizer_passes_pg_collection_to_muon_optimizer(
693-
self, mock_scheduler, mock_get_muon_optimizer, mock_get_model_config
693+
self, mock_scheduler, mock_get_optimizer, mock_get_model_config
694694
):
695-
"""Test that setup_optimizer passes pg_collection to muon optimizer."""
695+
"""Test that setup_optimizer passes pg_collection for Muon construction."""
696696
from megatron.core.optimizer import OptimizerConfig
697697

698698
from megatron.bridge.training.config import SchedulerConfig
@@ -703,7 +703,7 @@ def test_setup_optimizer_passes_pg_collection_to_muon_optimizer(
703703
mock_model = MagicMock()
704704
mock_pg_collection = MagicMock()
705705
mock_optimizer = MagicMock()
706-
mock_get_muon_optimizer.return_value = mock_optimizer
706+
mock_get_optimizer.return_value = mock_optimizer
707707

708708
optimizer_config = OptimizerConfig(optimizer="muon", lr=1e-3)
709709
scheduler_config = SchedulerConfig()
@@ -717,9 +717,10 @@ def test_setup_optimizer_passes_pg_collection_to_muon_optimizer(
717717
pg_collection=mock_pg_collection,
718718
)
719719

720-
# Verify pg_collection was passed to muon optimizer
721-
mock_get_muon_optimizer.assert_called_once()
722-
call_kwargs = mock_get_muon_optimizer.call_args[1]
720+
# Verify pg_collection was passed through the unified optimizer factory.
721+
mock_get_optimizer.assert_called_once()
722+
call_kwargs = mock_get_optimizer.call_args[1]
723+
assert call_kwargs["config"] is optimizer_config
723724
assert call_kwargs["pg_collection"] == mock_pg_collection
724725

725726
@patch("megatron.bridge.training.optim.get_model_config")

‎tests/unit_tests/training/test_gtp.py‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,11 @@ def test_distributed_model_build_obeys_gtp_lifecycle(mock_configure, mock_classi
324324
cfg = SimpleNamespace(
325325
model=model_config,
326326
ddp=object(),
327-
optimizer=SimpleNamespace(overlap_param_gather_with_optimizer_step=False),
327+
optimizer=SimpleNamespace(
328+
optimizer="adam",
329+
overlap_param_gather_with_optimizer_step=False,
330+
use_layer_wise_distributed_optimizer=False,
331+
),
328332
dist=DistributedInitConfig(
329333
use_megatron_fsdp=False,
330334
use_torch_fsdp2=False,

‎tests/unit_tests/training/test_optimizer_distribution.py‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
# Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved.
2+
13
"""Regression tests for optimizer selection, DDP layout and checkpoint state."""
24

35
from types import SimpleNamespace

‎tests/unit_tests/training/test_pg_collection_wiring.py‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,9 @@ def test_train_stops_nsys_profiler_when_skipped_iteration_reaches_profile_end(mo
116116
straggler=None,
117117
ddp=SimpleNamespace(use_megatron_fsdp=False, overlap_param_gather=False),
118118
optimizer=SimpleNamespace(
119+
optimizer="adam",
119120
use_distributed_optimizer=False,
121+
use_layer_wise_distributed_optimizer=False,
120122
optimizer_cuda_graph=False,
121123
),
122124
model=SimpleNamespace(
@@ -224,7 +226,9 @@ def test_train_stops_nsys_profiler_when_rerun_requests_exit(monkeypatch):
224226
straggler=None,
225227
ddp=SimpleNamespace(use_megatron_fsdp=False, overlap_param_gather=False),
226228
optimizer=SimpleNamespace(
229+
optimizer="adam",
227230
use_distributed_optimizer=False,
231+
use_layer_wise_distributed_optimizer=False,
228232
optimizer_cuda_graph=False,
229233
),
230234
model=SimpleNamespace(

‎tests/unit_tests/training/test_runtime_callbacks.py‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,11 @@ def _run_setup(
8989
set_level_for_all_loggers=False,
9090
),
9191
model=provider,
92-
optimizer=SimpleNamespace(overlap_param_gather_with_optimizer_step=False),
92+
optimizer=SimpleNamespace(
93+
optimizer="adam",
94+
overlap_param_gather_with_optimizer_step=False,
95+
use_layer_wise_distributed_optimizer=False,
96+
),
9397
optimizer_config_override_provider=None,
9498
peft=None,
9599
profiling=SimpleNamespace(),

0 commit comments

Comments
 (0)