Fix EVS crash when using video_embeds inputs in Qwen2.5-VL (#29232)

Signed-off-by: zitian.zhao <zitian.zhao@tencentmusic.com>
Co-authored-by: Cyrus Leung <tlleungac@connect.ust.hk>
This commit is contained in:
ZiTian Zhao 2025-11-22 22:48:59 +08:00 committed by GitHub
parent ae66818379
commit d84d8f4429
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -230,6 +230,9 @@ class Qwen2_5_VLVideoEmbeddingInputs(TensorSchema):
- hidden_size must match the hidden size of language model backbone.
- video_grid_thw shape: (num_videos, 3) in (grid_t, grid_h, grid_w)
format
- second_per_grid_ts: The video time interval (in seconds) for each
grid along the temporal dimension in the 3D position IDs. Returned
when `videos` is not `None`.
"""
type: Literal["video_embeds"]
@ -244,6 +247,11 @@ class Qwen2_5_VLVideoEmbeddingInputs(TensorSchema):
TensorShape("nv", 3),
]
second_per_grid_ts: Annotated[
torch.Tensor | None,
TensorShape("nv"),
] = None
Qwen2_5_VLVideoInputs: TypeAlias = (
Qwen2_5_VLVideoPixelInputs | Qwen2_5_VLVideoEmbeddingInputs
@ -1311,6 +1319,7 @@ class Qwen2_5_VLForConditionalGeneration(
type="video_embeds",
video_embeds=video_embeds,
video_grid_thw=video_grid_thw,
second_per_grid_ts=second_per_grid_ts,
)
def _process_image_input(
@ -1422,7 +1431,13 @@ class Qwen2_5_VLForConditionalGeneration(
# Cast to long to match the original code
# https://github.com/huggingface/transformers/blob/41980ce93e775f6c88500c51c8db7946fc6a2add/src/transformers/models/qwen2_5_vl/modular_qwen2_5_vl.py#L491 # noqa
second_per_grid_ts = video_input["second_per_grid_ts"].long()
second_per_grid_ts = video_input.get("second_per_grid_ts")
if second_per_grid_ts is None:
raise ValueError(
"second_per_grid_ts is required when video_pruning_rate > 0 "
"is enabled for video inputs, including the video_embeds path."
)
second_per_grid_ts = second_per_grid_ts.long()
tokens_per_second = self.config.vision_config.tokens_per_second
video_embeds_out = []