A high-throughput and memory-efficient inference and serving engine for LLMs
Mirrored from https://github.com/tduncan-lum/Nvidia-Optimization-Stack---VLLM.git
Synced Nov 15, 17:15 UTC
[Bugfix] Fix `mm_hashes` forgetting to be passed (#15668)
Signed-off-by: DarkLight1337 <tlleungac@connect.ust.hk>
Cyrus Leung committed
Mar 28, 2025 at 13:51 UTC
8693e47e6ab52c1219323141d9b0eba89c4143b7
6 files changed
+15
-10
vllm/inputs/preprocess.py
+2
@@ -528,6 +528,7 @@ class InputPreprocessor:
528
prompt_token_ids=decoder_inputs_to_override[
529
"prompt_token_ids"],
530
mm_kwargs=inputs["mm_kwargs"],
531
+ mm_hashes=inputs["mm_hashes"],
532
mm_placeholders=inputs["mm_placeholders"],
533
)
534
else:
@@ -536,6 +537,7 @@ class InputPreprocessor:
537
prompt=inputs["prompt"],
538
prompt_token_ids=inputs["prompt_token_ids"],
539
mm_kwargs=inputs["mm_kwargs"],
540
+ mm_hashes=inputs["mm_hashes"],
541
mm_placeholders=inputs["mm_placeholders"],
542
)
543
elif inputs["type"] == "token":
vllm/model_executor/models/llava.py
+2
@@ -868,6 +868,7 @@ class MantisMultiModalProcessor(LlavaMultiModalProcessor):
868
mm_items = self._to_mm_items(mm_data)
869
mm_item_counts = mm_items.get_all_counts()
870
mm_kwargs = result["mm_kwargs"]
871
+ mm_hashes = result["mm_hashes"]
872
873
# We reimplement the functionality of MLlavaProcessor from
874
# https://github.com/TIGER-AI-Lab/Mantis.git
@@ -916,6 +917,7 @@ class MantisMultiModalProcessor(LlavaMultiModalProcessor):
917
prompt=prompt,
918
prompt_token_ids=prompt_ids,
919
mm_kwargs=mm_kwargs,
920
+ mm_hashes=mm_hashes,
921
mm_placeholders=mm_placeholder_ranges,
922
)
923
vllm/model_executor/models/mllama.py
+1
-1
@@ -1378,7 +1378,7 @@ class MllamaForConditionalGeneration(nn.Module, SupportsMultiModal,
1378
# Because attn_metadata.encoder_seq_lens only counts the last
1379
# group of images for each sample, which is used to cheat the
1380
# block manager to allocate blocks for those images only.
1381
- # See input_processor_for_mllama() for more details.
1381
+ # See MllamaMultiModalProcessor for more details.
1382
num_tiles_tensor = kwargs.pop("num_tiles")
1383
num_tiles = [t.tolist() for t in num_tiles_tensor]
1384
num_tokens_per_tile = calc_token_per_chunk(self.image_size)
vllm/model_executor/models/phi4mm.py
+8
-8
@@ -28,7 +28,7 @@ from vllm.model_executor.models.llama import LlamaModel
28
from vllm.model_executor.models.module_mapping import MultiModelKeys
29
from vllm.model_executor.sampling_metadata import SamplingMetadata
30
from vllm.multimodal import MULTIMODAL_REGISTRY
31
-from vllm.multimodal.inputs import MultiModalInputs, NestedTensors
31
+from vllm.multimodal.inputs import MultiModalKwargs, NestedTensors
32
from vllm.sequence import IntermediateTensors, SequenceData
33
from vllm.transformers_utils.tokenizer import cached_tokenizer_from_config
34
@@ -1319,9 +1319,9 @@ def dummy_data_for_phi4mm(ctx: InputContext, seq_len: int,
1319
1320
1321
def input_mapper_for_phi4mm_audio(ctx: InputContext,
1322
- data: object) -> MultiModalInputs:
1322
+ data: object) -> MultiModalKwargs:
1323
"""
1324
- This function is used to create the MultiModalInputs for the Phi4MM
1324
+ This function is used to create the MultiModalKwargs for the Phi4MM
1325
(audio) model.
1326
Specifically, for audio, we extract the audio features from the sound
1327
file and create pairs of audio features and audio embed lengths (the
@@ -1338,13 +1338,13 @@ def input_mapper_for_phi4mm_audio(ctx: InputContext,
1338
data (object): Audio data.
1339
1340
Returns:
1341
- MultiModalInputs: Multi-modal inputs.
1341
+ MultiModalKwargs: Multi-modal inputs.
1342
"""
1343
if not isinstance(data, list):
1344
data = [data]
1345
1346
if len(data) == 0:
1347
- return MultiModalInputs()
1347
+ return MultiModalKwargs()
1348
1349
audio_features = []
1350
for audio_input in data:
@@ -1365,7 +1365,7 @@ def input_mapper_for_phi4mm_audio(ctx: InputContext,
1365
[single_audio_embed_size],
1366
)
1367
audio_features.append(single_audio_feature_audio_len_pair)
1368
- return MultiModalInputs({"audio_features": audio_features})
1368
+ return MultiModalKwargs({"audio_features": audio_features})
1369
1370
1371
def input_mapper_for_phi4mm_image(ctx: InputContext, data: object):
@@ -1373,7 +1373,7 @@ def input_mapper_for_phi4mm_image(ctx: InputContext, data: object):
1373
data = [data]
1374
# data: list of PIL images
1375
if len(data) == 0:
1376
- return MultiModalInputs()
1376
+ return MultiModalKwargs()
1377
hf_config = ctx.get_hf_config()
1378
vision_encoder_name = hf_config.img_processor
1379
if vision_encoder_name is None:
@@ -1385,7 +1385,7 @@ def input_mapper_for_phi4mm_image(ctx: InputContext, data: object):
1385
1386
image_input_dict = preprocess(data, dynamic_hd_size, vit_image_size,
1387
vit_patch_size)
1388
- return MultiModalInputs({
1388
+ return MultiModalKwargs({
1389
"pixel_values":
1390
image_input_dict["pixel_values"],
1391
"image_sizes":
vllm/model_executor/models/prithvi_geospatial_mae.py
+1
@@ -105,6 +105,7 @@ class PrithviGeoSpatialMAEMultiModalProcessor(BaseMultiModalProcessor):
105
prompt=prompt,
106
prompt_token_ids=[1],
107
mm_kwargs=MultiModalKwargs(mm_kwargs),
108
+ mm_hashes=None,
109
mm_placeholders={},
110
)
111
vllm/multimodal/inputs.py
+1
-1
@@ -743,7 +743,7 @@ class MultiModalInputs(TypedDict):
743
mm_kwargs: MultiModalKwargs
744
"""Keyword arguments to be directly passed to the model after batching."""
745
746
- mm_hashes: NotRequired[Optional["MultiModalHashDict"]]
746
+ mm_hashes: Optional["MultiModalHashDict"]
747
"""The hashes of the multi-modal data."""
748
749
mm_placeholders: MultiModalPlaceholderDict