Skip to content

Commit 1fa26a9

Browse files
committed
Transformers v5.10
1 parent e2951fb commit 1fa26a9

6 files changed

Lines changed: 46 additions & 23 deletions

File tree

.github/workflows/test_openvino.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ jobs:
3939
"*quantization*",
4040
"*transformation*",
4141
]
42-
transformers-version: ["4.57.6", "5.3.0", "latest"]
42+
transformers-version: ["5.8.0", "latest"]
4343

4444
runs-on: ubuntu-22.04
4545

.github/workflows/test_openvino_slow.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ jobs:
3636
fail-fast: false
3737
matrix:
3838
os: ["ubuntu-22.04", "windows-2022"]
39-
transformers-version: ["4.57.6", "latest"]
39+
transformers-version: ["5.8.0", "latest"]
4040
include:
4141
- transformers-version: "main"
4242
os: "ubuntu-22.04"

optimum/exporters/openvino/convert.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1236,7 +1236,9 @@ def get_sd3_models_for_export(pipeline, exporter, int_dtype, float_dtype):
12361236
text_encoder = getattr(pipeline, "text_encoder", None)
12371237
if text_encoder is not None:
12381238
text_encoder.config.output_hidden_states = True
1239-
text_encoder.text_model.config.output_hidden_states = True
1239+
# `CLIPTextTransformer` removed since transformers v5.6
1240+
if hasattr(text_encoder, "text_model"):
1241+
text_encoder.text_model.config.output_hidden_states = True
12401242
text_encoder_config_constructor = TasksManager.get_exporter_config_constructor(
12411243
model=text_encoder,
12421244
exporter=exporter,
@@ -1298,7 +1300,9 @@ def get_sd3_models_for_export(pipeline, exporter, int_dtype, float_dtype):
12981300
text_encoder_2 = getattr(pipeline, "text_encoder_2", None)
12991301
if text_encoder_2 is not None:
13001302
text_encoder_2.config.output_hidden_states = True
1301-
text_encoder_2.text_model.config.output_hidden_states = True
1303+
# `CLIPTextTransformer` removed since transformers v5.6
1304+
if hasattr(text_encoder_2, "text_model"):
1305+
text_encoder_2.text_model.config.output_hidden_states = True
13021306
export_config_constructor = TasksManager.get_exporter_config_constructor(
13031307
model=text_encoder_2,
13041308
exporter=exporter,

optimum/exporters/openvino/model_patcher.py

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4714,6 +4714,10 @@ def gemma4_text_attention_forward(
47144714
) -> tuple:
47154715
from transformers.models.gemma4.modeling_gemma4 import apply_rotary_pos_emb as apply_rotary_pos_emb_gemma4
47164716

4717+
# since transformers >= v5.6 (PR #45788) `shared_kv_states` dict and is passed and `kv_shared_layer_index` removed
4718+
shared_kv_states = kwargs.pop("shared_kv_states", None)
4719+
legacy_shared_kv_states = hasattr(self, "kv_shared_layer_index")
4720+
47174721
input_shape = hidden_states.shape[:-1]
47184722
hidden_shape = (*input_shape, -1, self.head_dim)
47194723

@@ -4724,8 +4728,12 @@ def gemma4_text_attention_forward(
47244728
query_states = apply_rotary_pos_emb_gemma4(query_states, cos, sin, unsqueeze_dim=2)
47254729
query_states = query_states.transpose(1, 2)
47264730

4727-
if self.is_kv_shared_layer and past_key_values is not None:
4728-
key_states, value_states = past_key_values.shared_layers[self.kv_shared_layer_index]
4731+
if self.is_kv_shared_layer and (not legacy_shared_kv_states or past_key_values is not None):
4732+
if legacy_shared_kv_states:
4733+
key_states, value_states = past_key_values.shared_layers[self.kv_shared_layer_index]
4734+
else:
4735+
key_states, value_states = shared_kv_states[self.layer_type]
4736+
47294737
key_states = key_states.to(query_states.device)
47304738
value_states = value_states.to(query_states.device)
47314739
else:
@@ -4740,18 +4748,26 @@ def gemma4_text_attention_forward(
47404748
value_states = value_states.transpose(1, 2)
47414749

47424750
if past_key_values is not None:
4743-
cache_kwargs = {
4744-
"sin": sin,
4745-
"cos": cos,
4746-
"cache_position": cache_position,
4747-
"sliding_window": self.sliding_window,
4748-
}
4749-
if not self.is_kv_shared_layer:
4750-
key_states, value_states = past_key_values.update(key_states, value_states, self.layer_idx, cache_kwargs)
4751-
if self.store_full_length_kv:
4752-
if not hasattr(past_key_values, "shared_layers"):
4753-
past_key_values.shared_layers = {}
4754-
past_key_values.shared_layers[self.layer_idx] = key_states, value_states
4751+
if legacy_shared_kv_states:
4752+
cache_kwargs = {
4753+
"sin": sin,
4754+
"cos": cos,
4755+
"cache_position": cache_position,
4756+
"sliding_window": self.sliding_window,
4757+
}
4758+
if not self.is_kv_shared_layer:
4759+
key_states, value_states = past_key_values.update(
4760+
key_states, value_states, self.layer_idx, cache_kwargs
4761+
)
4762+
if self.store_full_length_kv:
4763+
if not hasattr(past_key_values, "shared_layers"):
4764+
past_key_values.shared_layers = {}
4765+
past_key_values.shared_layers[self.layer_idx] = key_states, value_states
4766+
else:
4767+
if not self.is_kv_shared_layer:
4768+
key_states, value_states = past_key_values.update(key_states, value_states, self.layer_idx)
4769+
if self.store_full_length_kv and shared_kv_states is not None:
4770+
shared_kv_states[self.layer_type] = key_states, value_states
47554771

47564772
attention_interface = gemma4_eager_attention_forward_patched
47574773

optimum/intel/openvino/modeling_visual_language.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2768,9 +2768,12 @@ def rot_pos_emb(self, grid_thw):
27682768
wpos_ids = wpos_ids.flatten()
27692769
pos_ids.append(torch.stack([hpos_ids, wpos_ids], dim=-1).repeat(t, 1))
27702770
pos_ids = torch.cat(pos_ids, dim=0)
2771-
max_grid_size = grid_thw[:, 1:].max()
2772-
rotary_pos_emb_full = self._rotary_pos_emb(max_grid_size)
2773-
rotary_pos_emb = rotary_pos_emb_full[pos_ids].flatten(1)
2771+
if is_transformers_version(">=", "5.9"):
2772+
rotary_pos_emb = self._rotary_pos_emb(pos_ids)
2773+
else:
2774+
max_grid_size = grid_thw[:, 1:].max()
2775+
rotary_pos_emb_full = self._rotary_pos_emb(max_grid_size)
2776+
rotary_pos_emb = rotary_pos_emb_full[pos_ids].flatten(1)
27742777
return rotary_pos_emb
27752778

27762779
def get_multimodal_embeddings(

setup.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@
2929
INSTALL_REQUIRE = [
3030
"torch>=2.1",
3131
"safetensors<0.8.0",
32-
"optimum~=2.2.0",
33-
"transformers>=4.57,<5.6",
32+
"optimum@git+https://github.com/huggingface/optimum.git@transformers-v5.10",
33+
"transformers>=5.8,<5.11",
3434
"setuptools",
3535
"huggingface-hub>=0.23.2,<2.0",
3636
"nncf>=2.19.0",

0 commit comments

Comments
 (0)