[VLM] reuse pretokenized ids from preprocessed input for qwen-vl (#26116)

This commit is contained in:
Mick
2026-05-23 16:01:04 +08:00
committed by GitHub
parent 8b9fb13c4a
commit 19b60a4f9e
2 changed files with 110 additions and 24 deletions
@@ -381,6 +381,7 @@ class MultimodalProcessorOutput:
mm_items: List[MultimodalDataItem]
input_ids: Optional[List[int]] = None
padded_input_ids: Optional[List[int]] = None
# image
im_token_id: Optional[int] = None
@@ -414,6 +415,7 @@ class MultimodalProcessorOutput:
return MultimodalProcessorOutput(
mm_items=d["mm_items"],
input_ids=d.get("input_ids"),
padded_input_ids=d.get("padded_input_ids"),
im_token_id=d.get("im_token_id"),
im_start_id=d.get("im_start_id"),
im_end_id=d.get("im_end_id"),
@@ -430,6 +432,26 @@ class MultimodalProcessorOutput:
visible_frame_counts=d.get("visible_frame_counts"),
)
@staticmethod
def build_padded_input_ids(input_ids, mm_items: List[MultimodalDataItem]):
"""pad the input_ids with mm_items if it's not already padded"""
if input_ids is None or not mm_items:
return None
for item in mm_items:
if item.pad_value is None or item.offsets is None:
return None
if isinstance(input_ids, torch.Tensor):
padded_input_ids = input_ids.flatten().tolist()
else:
padded_input_ids = list(input_ids)
for item in mm_items:
for start, end in item.offsets:
padded_input_ids[start : end + 1] = [item.pad_value] * (end - start + 1)
return padded_input_ids
@dataclasses.dataclass
class MultimodalInputs:
@@ -437,6 +459,7 @@ class MultimodalInputs:
# items of data
mm_items: List[MultimodalDataItem]
padded_input_ids: Optional[List[int]] = None
image_pad_len: Optional[list] = None
num_image_tokens: Optional[int] = None
@@ -478,6 +501,7 @@ class MultimodalInputs:
ret = MultimodalInputs(
mm_items=mm_items,
padded_input_ids=obj.padded_input_ids,
)
assert isinstance(ret.mm_items, list)