@@ -448,6 +448,7 @@ def provider_bridge(self, hf_pretrained: HFPreTrained) -> ModelProviderTarget:
448448 ModelProviderTarget: A configured model provider instance
449449 """
450450 from megatron .bridge .models .gpt_provider import GPTModelProvider
451+ from megatron .bridge .models .mla_provider import MLAModelProvider
451452
452453 hf_config = hf_pretrained .config
453454
@@ -458,22 +459,25 @@ def provider_bridge(self, hf_pretrained: HFPreTrained) -> ModelProviderTarget:
458459
459460 # Use specified provider class, defaulting to GPTModelProvider
460461 provider_class = self .PROVIDER_CLASS if self .PROVIDER_CLASS is not None else GPTModelProvider
462+ is_mla_provider = issubclass (provider_class , MLAModelProvider )
461463 # Filter kwargs to only fields the provider dataclass accepts, so that MLA-only None
462464 # values (q_lora_rank, kv_lora_rank, …) are silently dropped for non-MLA providers
463465 # while still being passed through for MLA providers that declare them as fields.
464466 valid_fields = provider_class .__dataclass_fields__
465467 provider = provider_class (** {k : v for k , v in provider_kwargs .items () if k in valid_fields })
466468
467- # All models that flow through the base provider_bridge use RoPE .
468- # YARN is already handled above (hf_config_to_provider_kwargs sets
469- # position_embedding_type="yarn"), so we only need to guard against
470- # overwriting it here. Every other rope_type value (None, "default",
471- # "llama3", "longrope", …) means plain RoPE .
469+ # Determine position_embedding_type from HF rope_scaling .
470+ # For GPT providers: rope_type=="yarn" → "yarn"; everything else → "rope".
471+ # For MLA providers: always "rope" — YaRN scaling parameters are applied
472+ # separately via mla_rope_params (rotary_scaling_factor, mscale, etc.) and
473+ # position_embedding_type="yarn" is not a valid MLA config value .
472474 hf_rope_scaling = getattr (hf_config , "rope_scaling" , None )
473475 rope_type = None
474476 if hf_rope_scaling :
475477 rope_type = hf_rope_scaling .get ("type" ) or hf_rope_scaling .get ("rope_type" )
476- if rope_type != "yarn" :
478+ if rope_type == "yarn" and not is_mla_provider :
479+ provider .position_embedding_type = "yarn"
480+ else :
477481 provider .position_embedding_type = "rope"
478482
479483 # Apply MLA rope params via setattr (for MLA models like DeepSeek, Kimi)
0 commit comments