|
22 | 22 | _get_kimi_k2_pipeline_layout, |
23 | 23 | kimi_k2_pretrain_config, |
24 | 24 | ) |
25 | | -from megatron.bridge.training.config import ConfigContainer |
| 25 | +from megatron.bridge.training.config import ConfigContainer, _validate_and_sync_distributed_optimizer_settings |
26 | 26 | from megatron.bridge.training.mixed_precision import MixedPrecisionConfig |
27 | 27 | from tests.unit_tests.recipes.recipe_test_utils import patch_recipe_module_global |
28 | 28 |
|
@@ -148,18 +148,33 @@ def test_pretrain_config_pipeline_split_settings(self): |
148 | 148 | assert cfg.model.num_layers_in_last_pipeline_stage is None |
149 | 149 |
|
150 | 150 | def test_pretrain_config_ddp_settings_for_muon(self): |
151 | | - """Test DDP settings configured for Muon optimizer.""" |
| 151 | + """The existing Kimi recipe retains compact, non-overlapped LayerWise Muon.""" |
152 | 152 | cfg = kimi_k2_pretrain_config() |
153 | 153 |
|
154 | | - # Muon requires these specific DDP settings |
155 | 154 | assert cfg.ddp.overlap_grad_reduce is True |
156 | | - assert cfg.ddp.overlap_param_gather is False # Muon needs this to be False |
| 155 | + assert cfg.ddp.overlap_param_gather is False |
| 156 | + assert cfg.comm_overlap.overlap_param_gather is False |
157 | 157 | assert cfg.ddp.check_for_nan_in_grad is True |
158 | | - assert cfg.ddp.use_distributed_optimizer is False # Muon needs this to be False |
| 158 | + assert cfg.ddp.use_distributed_optimizer is False |
159 | 159 | assert cfg.ddp.use_megatron_fsdp is False |
160 | 160 | assert cfg.ddp.grad_reduce_in_fp32 is True |
161 | 161 | assert cfg.ddp.average_in_collective is True |
162 | 162 | assert cfg.ddp.data_parallel_sharding_strategy == "no_shard" |
| 163 | + assert cfg.optimizer.optimizer == "dist_muon" |
| 164 | + assert cfg.optimizer.use_layer_wise_param_layout is False |
| 165 | + |
| 166 | + _validate_and_sync_distributed_optimizer_settings(cfg) |
| 167 | + |
| 168 | + assert cfg.optimizer.optimizer == "muon" |
| 169 | + assert cfg.optimizer.use_layer_wise_distributed_optimizer is True |
| 170 | + assert cfg.optimizer.use_distributed_optimizer is False |
| 171 | + assert cfg.ddp.use_distributed_optimizer is False |
| 172 | + assert cfg.optimizer.use_layer_wise_param_layout is False |
| 173 | + |
| 174 | + cfg.comm_overlap.finalize() |
| 175 | + cfg.comm_overlap.data_parallel_size = 16 |
| 176 | + overlap_cfg = cfg.comm_overlap._get_optimizer_overlap_cfgs(cfg.model) |
| 177 | + assert overlap_cfg.overlap_param_gather is False |
163 | 178 |
|
164 | 179 | def test_pretrain_config_dataset_configuration(self): |
165 | 180 | """Test dataset configuration.""" |
|
0 commit comments