@@ -113,7 +113,7 @@ def test_config_conversion_uses_model_config_path_only() -> None:
113113 assert isinstance (model_config , MuseGlimmerModelConfig )
114114 assert isinstance (model_config , HybridModelConfig )
115115 assert model_config .get_builder_cls () is MuseGlimmerModelBuilder
116- assert model_config .transformer_impl == "transformer_engine "
116+ assert model_config .transformer_impl == "local "
117117 assert model_config .num_layers == 4
118118 assert model_config .hidden_size == 64
119119 assert model_config .ffn_hidden_size == 128
@@ -209,7 +209,7 @@ def test_hybrid_attention_layers_use_full_transformer_flops() -> None:
209209@pytest .mark .parametrize (
210210 ("transformer_impl" , "expected_qkv" , "expected_attention" , "expected_norm" ),
211211 [
212- ("local" , ColumnParallelLinear , DotProductAttention , MuseGlimmerCenteredRMSNorm ),
212+ ("local" , ColumnParallelLinear , DotProductAttention , TENorm ),
213213 ("transformer_engine" , TEColumnParallelLinear , TEDotProductAttention , TENorm ),
214214 ],
215215)
@@ -358,6 +358,20 @@ def test_weightless_rms_norm_does_not_add_a_transformer_engine_parameter() -> No
358358 assert norm .state_dict () == {}
359359
360360
361+ def test_affine_norms_retain_a_local_fallback_without_transformer_engine () -> None :
362+ model_config = MuseGlimmerBridge ().hf_config_to_model_config (_tiny_hf_config ())
363+ config = model_config .transformer
364+
365+ with patch ("megatron.bridge.models.muse_glimmer.modeling_muse_glimmer.HAVE_TE" , False ):
366+ stack_spec = get_muse_glimmer_hybrid_stack_spec (config )
367+ final_norm = _standard_rms_norm (config , config .hidden_size , config .layernorm_epsilon )
368+ vision_model = MuseGlimmerVisionModel (model_config .vision , config )
369+
370+ assert stack_spec .submodules .attention_layer .submodules .input_layernorm is MuseGlimmerCenteredRMSNorm
371+ assert isinstance (final_norm , MuseGlimmerRMSNorm )
372+ assert isinstance (vision_model .ln_pre , torch .nn .LayerNorm )
373+
374+
361375def test_centered_norm_sharded_state_dict_identifies_tensor_parallel_replicas () -> None :
362376 config = MuseGlimmerBridge ().hf_config_to_model_config (_tiny_hf_config ()).transformer
363377 norm = MuseGlimmerCenteredRMSNorm (config , hidden_size = 4 )
@@ -403,11 +417,12 @@ def test_tiny_vision_model_preserves_expected_token_count() -> None:
403417 model_config = MuseGlimmerBridge ().hf_config_to_model_config (_tiny_hf_config ())
404418 model_config .transformer_impl = "local"
405419 vision_config = model_config .vision
406- model = MuseGlimmerVisionModel (vision_config , model_config .transformer )
407420 pixel_values = torch .randn (16 , 24 )
408421 grid_thw = torch .tensor ([[1 , 4 , 4 ]])
409422
410- output = model (pixel_values , grid_thw )
423+ with patch ("megatron.bridge.models.muse_glimmer.modeling_muse_glimmer.HAVE_TE" , False ):
424+ model = MuseGlimmerVisionModel (vision_config , model_config .transformer )
425+ output = model (pixel_values , grid_thw )
411426
412427 assert output .shape == (4 , 64 )
413428
@@ -460,14 +475,17 @@ def test_vision_layer_recomputation_is_training_only() -> None:
460475 model_config = MuseGlimmerBridge ().hf_config_to_model_config (_tiny_hf_config ())
461476 model_config .transformer_impl = "local"
462477 vision_config = model_config .vision
463- model = MuseGlimmerVisionModel (vision_config , model_config .transformer , recompute_layers = True )
464478 pixel_values = torch .randn (16 , 24 )
465479 grid_thw = torch .tensor ([[1 , 4 , 4 ]])
466480
467- with patch (
468- "megatron.bridge.models.muse_glimmer.modeling_muse_glimmer.torch_checkpoint" ,
469- side_effect = lambda function , * args , ** kwargs : function (* args ),
470- ) as checkpoint :
481+ with (
482+ patch ("megatron.bridge.models.muse_glimmer.modeling_muse_glimmer.HAVE_TE" , False ),
483+ patch (
484+ "megatron.bridge.models.muse_glimmer.modeling_muse_glimmer.torch_checkpoint" ,
485+ side_effect = lambda function , * args , ** kwargs : function (* args ),
486+ ) as checkpoint ,
487+ ):
488+ model = MuseGlimmerVisionModel (vision_config , model_config .transformer , recompute_layers = True )
471489 training_output = model (pixel_values , grid_thw )
472490 model .eval ()
473491 inference_output = model (pixel_values , grid_thw )
@@ -524,7 +542,9 @@ def test_builder_constructs_native_hybrid_model_on_cpu(tiny_hybrid_model: MuseGl
524542 assert "decoder.layers.0.self_attention.post_layernorm.weight" in names
525543 assert "decoder.layers.0.mlp.post_layernorm.weight" in names
526544 assert not any (name .startswith ("language_model." ) for name in names )
527- assert isinstance (model .decoder .final_norm , MuseGlimmerRMSNorm )
545+ assert isinstance (model .decoder .final_norm , TERMSNorm )
546+ assert isinstance (model .vision_tower .ln_pre , TELayerNorm )
547+ assert isinstance (model .vision_tower .layers [0 ].norm1 , TELayerNorm )
528548 assert names ["vision_tower.patch_embedder.patch_embedding.weight" ].dtype == torch .float32
529549 assert all (
530550 getattr (parameter , "average_gradients_across_tp_domain" , False )
0 commit comments