🧹 Remove deprecated RotaryEmbedding parts in the Attention layers (#34858)
* update * style * fix missing args * remove last trace of old rope classes * remove deprecated copied from * fix copies * trigger CIs * post rebase clean-up * reverse mistral * cleanup after dropping commits * Add comment
This commit is contained in:
@@ -50,8 +50,6 @@ if is_torch_available():
|
||||
FalconModel,
|
||||
)
|
||||
from transformers.models.falcon.modeling_falcon import (
|
||||
FalconDynamicNTKScalingRotaryEmbedding,
|
||||
FalconLinearScalingRotaryEmbedding,
|
||||
FalconRotaryEmbedding,
|
||||
)
|
||||
|
||||
@@ -484,11 +482,12 @@ class FalconModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTesterMix
|
||||
|
||||
# Sanity check linear RoPE scaling
|
||||
# New position "x" should match original position with index "x/scaling_factor"
|
||||
linear_scaling_rope = FalconLinearScalingRotaryEmbedding(
|
||||
linear_scaling_rope = FalconRotaryEmbedding(
|
||||
head_dim,
|
||||
max_position_embeddings=config.max_position_embeddings,
|
||||
base=config.rope_theta,
|
||||
scaling_factor=scaling_factor,
|
||||
rope_type="linear",
|
||||
).to(torch_device)
|
||||
linear_cos_short, linear_sin_short = linear_scaling_rope(x, position_ids_short)
|
||||
linear_cos_long, linear_sin_long = linear_scaling_rope(x, position_ids_long)
|
||||
@@ -502,11 +501,12 @@ class FalconModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTesterMix
|
||||
# Sanity check Dynamic NTK RoPE scaling
|
||||
# Scaling should only be observed after a long input is fed. We can observe that the frequencies increase
|
||||
# with scaling_factor (or that `inv_freq` decreases)
|
||||
ntk_scaling_rope = FalconDynamicNTKScalingRotaryEmbedding(
|
||||
ntk_scaling_rope = FalconRotaryEmbedding(
|
||||
head_dim,
|
||||
max_position_embeddings=config.max_position_embeddings,
|
||||
base=config.rope_theta,
|
||||
scaling_factor=scaling_factor,
|
||||
rope_type="dynamic",
|
||||
).to(torch_device)
|
||||
ntk_cos_short, ntk_sin_short = ntk_scaling_rope(x, position_ids_short)
|
||||
ntk_cos_long, ntk_sin_long = ntk_scaling_rope(x, position_ids_long)
|
||||
|
||||
@@ -37,11 +37,7 @@ if is_torch_available():
|
||||
GPTNeoXForTokenClassification,
|
||||
GPTNeoXModel,
|
||||
)
|
||||
from transformers.models.gpt_neox.modeling_gpt_neox import (
|
||||
GPTNeoXDynamicNTKScalingRotaryEmbedding,
|
||||
GPTNeoXLinearScalingRotaryEmbedding,
|
||||
GPTNeoXRotaryEmbedding,
|
||||
)
|
||||
from transformers.models.gpt_neox.modeling_gpt_neox import GPTNeoXRotaryEmbedding
|
||||
|
||||
|
||||
class GPTNeoXModelTester:
|
||||
@@ -400,11 +396,12 @@ class GPTNeoXModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTesterMi
|
||||
|
||||
# Sanity check linear RoPE scaling
|
||||
# New position "x" should match original position with index "x/scaling_factor"
|
||||
linear_scaling_rope = GPTNeoXLinearScalingRotaryEmbedding(
|
||||
linear_scaling_rope = GPTNeoXRotaryEmbedding(
|
||||
head_dim,
|
||||
max_position_embeddings=config.max_position_embeddings,
|
||||
base=config.rotary_emb_base,
|
||||
scaling_factor=scaling_factor,
|
||||
rope_type="linear",
|
||||
).to(torch_device)
|
||||
linear_cos_short, linear_sin_short = linear_scaling_rope(x, position_ids_short)
|
||||
linear_cos_long, linear_sin_long = linear_scaling_rope(x, position_ids_long)
|
||||
@@ -418,11 +415,12 @@ class GPTNeoXModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTesterMi
|
||||
# Sanity check Dynamic NTK RoPE scaling
|
||||
# Scaling should only be observed after a long input is fed. We can observe that the frequencies increase
|
||||
# with scaling_factor (or that `inv_freq` decreases)
|
||||
ntk_scaling_rope = GPTNeoXDynamicNTKScalingRotaryEmbedding(
|
||||
ntk_scaling_rope = GPTNeoXRotaryEmbedding(
|
||||
head_dim,
|
||||
max_position_embeddings=config.max_position_embeddings,
|
||||
base=config.rotary_emb_base,
|
||||
scaling_factor=scaling_factor,
|
||||
rope_type="dynamic",
|
||||
).to(torch_device)
|
||||
ntk_cos_short, ntk_sin_short = ntk_scaling_rope(x, position_ids_short)
|
||||
ntk_cos_long, ntk_sin_long = ntk_scaling_rope(x, position_ids_long)
|
||||
|
||||
@@ -51,7 +51,7 @@ if is_torch_available():
|
||||
LlamaModel,
|
||||
LlamaTokenizer,
|
||||
)
|
||||
from transformers.models.llama.modeling_llama import LlamaLinearScalingRotaryEmbedding, LlamaRotaryEmbedding
|
||||
from transformers.models.llama.modeling_llama import LlamaRotaryEmbedding
|
||||
|
||||
|
||||
class LlamaModelTester:
|
||||
@@ -489,43 +489,6 @@ class LlamaModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTesterMixi
|
||||
with self.assertRaises(AssertionError):
|
||||
torch.testing.assert_close(yarn_sin_long, original_sin_long)
|
||||
|
||||
def test_rope_class_retrocompatibility(self):
|
||||
# Delete me when we remove compatibility for the old API :)
|
||||
config, _ = self.model_tester.prepare_config_and_inputs_for_common()
|
||||
scaling_factor = 10
|
||||
short_input_length = 10
|
||||
long_input_length = int(config.max_position_embeddings * 1.5)
|
||||
config.rope_scaling = {"type": "linear", "factor": 10}
|
||||
|
||||
# Inputs
|
||||
x = torch.randn(1, dtype=torch.float32, device=torch_device) # used exlusively to get the dtype and the device
|
||||
position_ids_short = torch.arange(short_input_length, dtype=torch.long, device=torch_device)
|
||||
position_ids_short = position_ids_short.unsqueeze(0)
|
||||
position_ids_long = torch.arange(long_input_length, dtype=torch.long, device=torch_device)
|
||||
position_ids_long = position_ids_long.unsqueeze(0)
|
||||
|
||||
# Old API -- under the hood, "type": "linear" is set and `LlamaRotaryEmbedding` is called
|
||||
old_api_rope = LlamaLinearScalingRotaryEmbedding(
|
||||
config.hidden_size // config.num_attention_heads,
|
||||
max_position_embeddings=config.max_position_embeddings,
|
||||
base=config.rope_theta,
|
||||
scaling_factor=scaling_factor,
|
||||
).to(torch_device)
|
||||
old_cos_short, old_sin_short = old_api_rope(x, position_ids_short)
|
||||
old_cos_long, old_sin_long = old_api_rope(x, position_ids_long)
|
||||
|
||||
# New API
|
||||
config.rope_scaling = {"type": "linear", "factor": scaling_factor}
|
||||
new_api_rope = LlamaRotaryEmbedding(config=config).to(torch_device)
|
||||
new_cos_short, new_sin_short = new_api_rope(x, position_ids_short)
|
||||
new_cos_long, new_sin_long = new_api_rope(x, position_ids_long)
|
||||
|
||||
# The results should match
|
||||
torch.testing.assert_close(old_cos_short, new_cos_short)
|
||||
torch.testing.assert_close(old_sin_short, new_sin_short)
|
||||
torch.testing.assert_close(old_cos_long, new_cos_long)
|
||||
torch.testing.assert_close(old_sin_long, new_sin_long)
|
||||
|
||||
def test_model_loading_old_rope_configs(self):
|
||||
def _reinitialize_config(base_config, new_kwargs):
|
||||
# Reinitialize the config with the new kwargs, forcing the config to go through its __init__ validation
|
||||
|
||||
@@ -46,11 +46,7 @@ if is_torch_available():
|
||||
PersimmonForTokenClassification,
|
||||
PersimmonModel,
|
||||
)
|
||||
from transformers.models.persimmon.modeling_persimmon import (
|
||||
PersimmonDynamicNTKScalingRotaryEmbedding,
|
||||
PersimmonLinearScalingRotaryEmbedding,
|
||||
PersimmonRotaryEmbedding,
|
||||
)
|
||||
from transformers.models.persimmon.modeling_persimmon import PersimmonRotaryEmbedding
|
||||
|
||||
|
||||
# Copied from tests.models.llama.test_modeling_llama.LlamaModelTester with Llama->Persimmon
|
||||
@@ -451,11 +447,12 @@ class PersimmonModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTester
|
||||
|
||||
# Sanity check linear RoPE scaling
|
||||
# New position "x" should match original position with index "x/scaling_factor"
|
||||
linear_scaling_rope = PersimmonLinearScalingRotaryEmbedding(
|
||||
linear_scaling_rope = PersimmonRotaryEmbedding(
|
||||
head_dim,
|
||||
max_position_embeddings=config.max_position_embeddings,
|
||||
base=config.rope_theta,
|
||||
scaling_factor=scaling_factor,
|
||||
rope_type="linear",
|
||||
).to(torch_device)
|
||||
linear_cos_short, linear_sin_short = linear_scaling_rope(x, position_ids_short)
|
||||
linear_cos_long, linear_sin_long = linear_scaling_rope(x, position_ids_long)
|
||||
@@ -469,11 +466,12 @@ class PersimmonModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTester
|
||||
# Sanity check Dynamic NTK RoPE scaling
|
||||
# Scaling should only be observed after a long input is fed. We can observe that the frequencies increase
|
||||
# with scaling_factor (or that `inv_freq` decreases)
|
||||
ntk_scaling_rope = PersimmonDynamicNTKScalingRotaryEmbedding(
|
||||
ntk_scaling_rope = PersimmonRotaryEmbedding(
|
||||
head_dim,
|
||||
max_position_embeddings=config.max_position_embeddings,
|
||||
base=config.rope_theta,
|
||||
scaling_factor=scaling_factor,
|
||||
rope_type="dynamic",
|
||||
).to(torch_device)
|
||||
ntk_cos_short, ntk_sin_short = ntk_scaling_rope(x, position_ids_short)
|
||||
ntk_cos_long, ntk_sin_long = ntk_scaling_rope(x, position_ids_long)
|
||||
|
||||
@@ -42,11 +42,7 @@ if is_torch_available():
|
||||
PhiForTokenClassification,
|
||||
PhiModel,
|
||||
)
|
||||
from transformers.models.phi.modeling_phi import (
|
||||
PhiDynamicNTKScalingRotaryEmbedding,
|
||||
PhiLinearScalingRotaryEmbedding,
|
||||
PhiRotaryEmbedding,
|
||||
)
|
||||
from transformers.models.phi.modeling_phi import PhiRotaryEmbedding
|
||||
|
||||
|
||||
class PhiModelTester:
|
||||
@@ -430,11 +426,12 @@ class PhiModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTesterMixin,
|
||||
|
||||
# Sanity check linear RoPE scaling
|
||||
# New position "x" should match original position with index "x/scaling_factor"
|
||||
linear_scaling_rope = PhiLinearScalingRotaryEmbedding(
|
||||
linear_scaling_rope = PhiRotaryEmbedding(
|
||||
head_dim,
|
||||
max_position_embeddings=config.max_position_embeddings,
|
||||
base=config.rope_theta,
|
||||
scaling_factor=scaling_factor,
|
||||
rope_type="linear",
|
||||
).to(torch_device)
|
||||
linear_cos_short, linear_sin_short = linear_scaling_rope(x, position_ids_short)
|
||||
linear_cos_long, linear_sin_long = linear_scaling_rope(x, position_ids_long)
|
||||
@@ -448,11 +445,12 @@ class PhiModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTesterMixin,
|
||||
# Sanity check Dynamic NTK RoPE scaling
|
||||
# Scaling should only be observed after a long input is fed. We can observe that the frequencies increase
|
||||
# with scaling_factor (or that `inv_freq` decreases)
|
||||
ntk_scaling_rope = PhiDynamicNTKScalingRotaryEmbedding(
|
||||
ntk_scaling_rope = PhiRotaryEmbedding(
|
||||
head_dim,
|
||||
max_position_embeddings=config.max_position_embeddings,
|
||||
base=config.rope_theta,
|
||||
scaling_factor=scaling_factor,
|
||||
rope_type="dynamic",
|
||||
).to(torch_device)
|
||||
ntk_cos_short, ntk_sin_short = ntk_scaling_rope(x, position_ids_short)
|
||||
ntk_cos_long, ntk_sin_long = ntk_scaling_rope(x, position_ids_long)
|
||||
|
||||
@@ -44,11 +44,7 @@ if is_torch_available():
|
||||
StableLmForTokenClassification,
|
||||
StableLmModel,
|
||||
)
|
||||
from transformers.models.stablelm.modeling_stablelm import (
|
||||
StableLmDynamicNTKScalingRotaryEmbedding,
|
||||
StableLmLinearScalingRotaryEmbedding,
|
||||
StableLmRotaryEmbedding,
|
||||
)
|
||||
from transformers.models.stablelm.modeling_stablelm import StableLmRotaryEmbedding
|
||||
|
||||
|
||||
# Copied from transformers.tests.models.persimmon.test_modeling_persimmon.PersimmonModelTester with Persimmon -> StableLm
|
||||
@@ -436,11 +432,12 @@ class StableLmModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTesterM
|
||||
|
||||
# Sanity check linear RoPE scaling
|
||||
# New position "x" should match original position with index "x/scaling_factor"
|
||||
linear_scaling_rope = StableLmLinearScalingRotaryEmbedding(
|
||||
linear_scaling_rope = StableLmRotaryEmbedding(
|
||||
head_dim,
|
||||
max_position_embeddings=config.max_position_embeddings,
|
||||
base=config.rope_theta,
|
||||
scaling_factor=scaling_factor,
|
||||
rope_type="linear",
|
||||
).to(torch_device)
|
||||
linear_cos_short, linear_sin_short = linear_scaling_rope(x, position_ids_short)
|
||||
linear_cos_long, linear_sin_long = linear_scaling_rope(x, position_ids_long)
|
||||
@@ -454,11 +451,12 @@ class StableLmModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTesterM
|
||||
# Sanity check Dynamic NTK RoPE scaling
|
||||
# Scaling should only be observed after a long input is fed. We can observe that the frequencies increase
|
||||
# with scaling_factor (or that `inv_freq` decreases)
|
||||
ntk_scaling_rope = StableLmDynamicNTKScalingRotaryEmbedding(
|
||||
ntk_scaling_rope = StableLmRotaryEmbedding(
|
||||
head_dim,
|
||||
max_position_embeddings=config.max_position_embeddings,
|
||||
base=config.rope_theta,
|
||||
scaling_factor=scaling_factor,
|
||||
rope_type="dynamic",
|
||||
).to(torch_device)
|
||||
ntk_cos_short, ntk_sin_short = ntk_scaling_rope(x, position_ids_short)
|
||||
ntk_cos_long, ntk_sin_long = ntk_scaling_rope(x, position_ids_long)
|
||||
|
||||
Reference in New Issue
Block a user