[VLM] reuse pretokenized ids from preprocessed input for qwen-vl (#26116)
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user