Skip to content

Commit 49440fc

Browse files
authored
fix(recipe): give Moonlight-16B 8-chunk pipeline layouts 27 decoder layers (#6359)
Signed-off-by: Pruthviraj Prakash <pruprakash@nvidia.com>
1 parent 7911a42 commit 49440fc

2 files changed

Lines changed: 40 additions & 2 deletions

File tree

‎src/megatron/bridge/recipes/moonlight/h100/moonlight_16b.py‎

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,9 +138,15 @@ def _get_moonlight_pipeline_layout(pp_size: int, vp_size: int | None):
138138
(1, 1): None,
139139
(2, 1): [["embedding"] + ["decoder"] * 14, ["decoder"] * 13 + ["loss"]],
140140
(4, 1): [["embedding"] + ["decoder"] * 7] + [["decoder"] * 7] * 2 + [["decoder"] * 6 + ["loss"]],
141-
(8, 1): [["embedding"] + ["decoder"] * 4] + [["decoder"] * 4] * 6 + [["decoder"] * 3 + ["loss"]],
141+
(8, 1): [["embedding"] + ["decoder"] * 4]
142+
+ [["decoder"] * 4] * 2
143+
+ [["decoder"] * 3] * 4
144+
+ [["decoder"] * 3 + ["loss"]],
142145
(2, 2): [["embedding"] + ["decoder"] * 7] + [["decoder"] * 7] * 2 + [["decoder"] * 6 + ["loss"]],
143-
(4, 2): [["embedding"] + ["decoder"] * 4] + [["decoder"] * 4] * 6 + [["decoder"] * 3 + ["loss"]],
146+
(4, 2): [["embedding"] + ["decoder"] * 4]
147+
+ [["decoder"] * 4] * 2
148+
+ [["decoder"] * 3] * 4
149+
+ [["decoder"] * 3 + ["loss"]],
144150
}
145151
vp_size = 1 if vp_size is None else vp_size
146152
if (pp_size, vp_size) not in map_pp_vp_to_layout:

‎tests/unit_tests/recipes/test_moonlight_recipes.py‎

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -531,6 +531,38 @@ def test_moonlight_pipeline_layout_tracks_supported_runner_override(monkeypatch:
531531
assert cfg.model.moe_hybridep_pad_uneven_dispatch_inputs is True
532532

533533

534+
_MOONLIGHT_16B_NUM_LAYERS = 27
535+
536+
537+
def _supported_moonlight_pp_vp_layouts():
538+
"""Return every (pp, vp, layout) the Moonlight-16B layout helper supports."""
539+
from megatron.bridge.recipes.moonlight.h100.moonlight_16b import _get_moonlight_pipeline_layout
540+
541+
supported = []
542+
for pp in range(1, 17):
543+
for vp in range(1, 9):
544+
try:
545+
layout = _get_moonlight_pipeline_layout(pp, vp)
546+
except ValueError:
547+
continue
548+
if layout is not None:
549+
supported.append((pp, vp, layout))
550+
return supported
551+
552+
553+
def test_moonlight_pipeline_layouts_match_model_depth():
554+
"""Every supported Moonlight-16B pipeline layout must pass MCore layout validation."""
555+
from megatron.core.transformer.pipeline_parallel_layer_layout import PipelineParallelLayerLayout
556+
557+
supported = _supported_moonlight_pp_vp_layouts()
558+
assert supported
559+
560+
for pp, vp, layout in supported:
561+
parsed = PipelineParallelLayerLayout(layout, pipeline_model_parallel_size=pp)
562+
assert parsed.virtual_pipeline_model_parallel_size == vp, (pp, vp)
563+
parsed.validate_layer_layout(num_layers=_MOONLIGHT_16B_NUM_LAYERS, mtp_num_layers=None)
564+
565+
534566
def test_moonlight_16b_peft_convergence_contract(monkeypatch: pytest.MonkeyPatch):
535567
"""Test the exact 4-GPU LoRA convergence contract and frozen base."""
536568
from megatron.bridge.peft.lora import LoRA

0 commit comments

Comments
 (0)