diff --git a/tensorrt_llm/_torch/models/modeling_laguna.py b/tensorrt_llm/_torch/models/modeling_laguna.py index a03114ea38c7..ce170899f899 100644 --- a/tensorrt_llm/_torch/models/modeling_laguna.py +++ b/tensorrt_llm/_torch/models/modeling_laguna.py @@ -14,6 +14,7 @@ # limitations under the License. """Laguna / Laguna-XS model for TensorRT-LLM PyTorch backend.""" +import math from typing import Dict, List, Optional, Type import torch @@ -304,7 +305,14 @@ def _build_rope_from_flat_dict(config, rp_dict: dict) -> RopeParams: rp.beta_slow = float(rp_dict.get("beta_slow", 1.0)) attention_factor = rp_dict.get("attention_factor") if attention_factor is not None: - rp.mscale = float(attention_factor) + attention_factor = float(attention_factor) + # attention_factor is the FINAL YaRN scaling (HF semantics). + # create_sinusoidal_positions_yarn applies get_mscale(factor, rp.mscale) + # = 0.1*rp.mscale*ln(factor)+1 (mscale_all_dim=0), so setting mscale to the + # final value routes it through the log twice. Invert to reproduce it exactly. + rp.mscale = ( + ((attention_factor - 1.0) / (0.1 * math.log(rp.scale))) if rp.scale > 1 else 1.0 + ) rp.original_max_positions = int( rp_dict.get("original_max_position_embeddings", config.max_position_embeddings) )