Fix Ministral3 accuracy issue by aligning YaRN RoPE scaling with Transformers implementation (#31232)
Co-authored-by: Elizaveta Martirosian <elizaveta.martirosian@gmail.com> Co-authored-by: ronnie_zheng <zl19940307@163.com>
This commit is contained in:
co-authored by
Elizaveta Martirosian
ronnie_zheng
parent
8ed82afcc8
commit
495ae9aaa6
@@ -243,7 +243,14 @@ def get_rope(
|
|||||||
k: v
|
k: v
|
||||||
for k, v in rope_scaling.items()
|
for k, v in rope_scaling.items()
|
||||||
if k
|
if k
|
||||||
in ("extrapolation_factor", "attn_factor", "beta_fast", "beta_slow")
|
in (
|
||||||
|
"extrapolation_factor",
|
||||||
|
"attn_factor",
|
||||||
|
"beta_fast",
|
||||||
|
"beta_slow",
|
||||||
|
"mscale",
|
||||||
|
"mscale_all_dim",
|
||||||
|
)
|
||||||
}
|
}
|
||||||
extra_kwargs["truncate"] = rope_scaling.get("truncate", True)
|
extra_kwargs["truncate"] = rope_scaling.get("truncate", True)
|
||||||
if "mrope_section" in rope_scaling:
|
if "mrope_section" in rope_scaling:
|
||||||
|
|||||||
@@ -83,6 +83,8 @@ class YaRNScalingRotaryEmbedding(RotaryEmbedding):
|
|||||||
beta_fast: int = 32,
|
beta_fast: int = 32,
|
||||||
beta_slow: int = 1,
|
beta_slow: int = 1,
|
||||||
truncate: bool = True,
|
truncate: bool = True,
|
||||||
|
mscale: float = None,
|
||||||
|
mscale_all_dim: float = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
self.scaling_factor = scaling_factor
|
self.scaling_factor = scaling_factor
|
||||||
self.extrapolation_factor = extrapolation_factor
|
self.extrapolation_factor = extrapolation_factor
|
||||||
@@ -90,8 +92,18 @@ class YaRNScalingRotaryEmbedding(RotaryEmbedding):
|
|||||||
self.beta_fast = beta_fast
|
self.beta_fast = beta_fast
|
||||||
self.beta_slow = beta_slow
|
self.beta_slow = beta_slow
|
||||||
self.truncate = truncate
|
self.truncate = truncate
|
||||||
# Get n-d magnitude scaling corrected for interpolation
|
|
||||||
self.mscale = float(yarn_get_mscale_simple(self.scaling_factor) * attn_factor)
|
if mscale is not None and mscale_all_dim is not None:
|
||||||
|
# Match Hugging Face's YaRN RoPE scaling (supports mscale/mscale_all_dim)
|
||||||
|
self.mscale = float(
|
||||||
|
yarn_get_mscale(self.scaling_factor, mscale)
|
||||||
|
/ yarn_get_mscale(self.scaling_factor, mscale_all_dim)
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
# Get n-d magnitude scaling corrected for interpolation
|
||||||
|
self.mscale = float(yarn_get_mscale_simple(self.scaling_factor))
|
||||||
|
self.mscale *= attn_factor
|
||||||
|
|
||||||
super().__init__(
|
super().__init__(
|
||||||
head_size, rotary_dim, max_position_embeddings, base, is_neox_style, dtype
|
head_size, rotary_dim, max_position_embeddings, base, is_neox_style, dtype
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user