Skip to content

Commit 407baf0

Browse files
authored
[ckpt] revert: clear incompatible saved pipeline layouts (#5838)
Signed-off-by: yaoyu-33 <yaoyu.094@gmail.com>
1 parent 0231561 commit 407baf0

2 files changed

Lines changed: 1 addition & 59 deletions

File tree

‎src/megatron/bridge/training/model_load_save.py‎

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,6 @@ def load_megatron_model(
458458
otherwise returns a dictionary containing the full, unsharded model state_dict.
459459
"""
460460
model_cfg, mlm_args = load_model_config(checkpoint_path)
461-
saved_pipeline_model_parallel_size = model_cfg.pipeline_model_parallel_size
462461
# If in single GPU environment, reset additional parallel settings
463462
model_cfg.tensor_model_parallel_size = 1
464463
model_cfg.pipeline_model_parallel_size = 1
@@ -483,16 +482,9 @@ def load_megatron_model(
483482
# Apply model-parallel overrides if provided
484483
if mp_overrides:
485484
for key, value in mp_overrides.items():
486-
if hasattr(model_cfg, key) and (value is not None or key == "pipeline_model_parallel_layout"):
485+
if hasattr(model_cfg, key) and value is not None:
487486
setattr(model_cfg, key, value)
488487

489-
if (
490-
"pipeline_model_parallel_size" in mp_overrides
491-
and model_cfg.pipeline_model_parallel_size != saved_pipeline_model_parallel_size
492-
and "pipeline_model_parallel_layout" not in mp_overrides
493-
):
494-
model_cfg.pipeline_model_parallel_layout = None
495-
496488
# A saved flexible layout describes PP/VPP stage ownership. It must not be
497489
# reinterpreted as virtual pipeline chunks after collapsing to one rank.
498490
if model_cfg.pipeline_model_parallel_size == 1 and model_cfg.virtual_pipeline_model_parallel_size is None:

‎tests/unit_tests/training/test_model_load_save.py‎

Lines changed: 0 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -310,56 +310,6 @@ def _built_layer_count(checkpoint_path, model_cfg, *args):
310310

311311
assert built_layer_count == provider.num_layers
312312

313-
@pytest.mark.parametrize(
314-
("mp_overrides", "expect_saved_layout"),
315-
[
316-
({"pipeline_model_parallel_size": 2}, True),
317-
({"pipeline_model_parallel_size": 4}, False),
318-
(
319-
{
320-
"pipeline_model_parallel_size": 2,
321-
"pipeline_model_parallel_layout": None,
322-
},
323-
False,
324-
),
325-
],
326-
ids=["same-pp", "changed-pp", "explicit-clear"],
327-
)
328-
@patch("megatron.bridge.training.model_load_save.build_and_load_model")
329-
@patch("megatron.bridge.training.model_load_save.load_model_config")
330-
def test_pipeline_override_does_not_reuse_incompatible_saved_layout(
331-
self,
332-
mock_load_model_config,
333-
mock_build_and_load_model,
334-
mp_overrides,
335-
expect_saved_layout,
336-
):
337-
"""A saved PP layout is retained only for a compatible requested topology."""
338-
provider = GPTModelProvider(
339-
num_layers=4,
340-
hidden_size=16,
341-
num_attention_heads=2,
342-
pipeline_model_parallel_size=2,
343-
pipeline_model_parallel_layout=[
344-
["embedding", "decoder", "decoder"],
345-
["decoder", "decoder", "loss"],
346-
],
347-
)
348-
mock_load_model_config.return_value = (provider, None)
349-
350-
def _finalized_layout(checkpoint_path, model_cfg, *args):
351-
model_cfg.finalize()
352-
return model_cfg.pipeline_model_parallel_layout
353-
354-
mock_build_and_load_model.side_effect = _finalized_layout
355-
356-
result = load_megatron_model("/ckpt", mp_overrides=mp_overrides)
357-
358-
if expect_saved_layout:
359-
assert isinstance(result, PipelineParallelLayerLayout)
360-
else:
361-
assert result is None
362-
363313
@patch("megatron.bridge.training.model_load_save.temporary_distributed_context")
364314
@patch("megatron.bridge.training.checkpointing._load_model_weights_from_checkpoint")
365315
@patch("megatron.bridge.utils.instantiate_utils.instantiate")

0 commit comments

Comments
 (0)