@@ -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+
534566def 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