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 8, 16:30 UTC
[UX] Add `--language-model-only` for hybrid models (#34120)
Signed-off-by: Roger Wang <hey@rogerw.io>
Roger Wang committed
Feb 9, 2026 at 06:57 UTC
64a9c2528b1487fbfefa333cb1b246a57cddd4b2
3 files changed
+19
-3
vllm/config/model.py
+3
@@ -297,6 +297,7 @@ class ModelConfig:
297
multimodal_config: MultiModalConfig | None = None
298
"""Configuration for multimodal model. If `None`, this will be inferred
299
from the architecture of `self.model`."""
300
+ language_model_only: InitVar[bool] = False
301
limit_mm_per_prompt: InitVar[dict[str, int | dict[str, int]] | None] = None
302
enable_mm_embeds: InitVar[bool | None] = None
303
media_io_kwargs: InitVar[dict[str, dict[str, Any]] | None] = None
@@ -411,6 +412,7 @@ class ModelConfig:
412
def __post_init__(
413
self,
414
# Multimodal config init vars
415
+ language_model_only: bool,
416
limit_mm_per_prompt: dict[str, int | dict[str, int]] | None,
417
enable_mm_embeds: bool | None,
418
media_io_kwargs: dict[str, dict[str, Any]] | None,
@@ -576,6 +578,7 @@ class ModelConfig:
578
mm_encoder_tp_mode = "weights"
579
580
mm_config_kwargs = dict(
581
+ language_model_only=language_model_only,
582
limit_per_prompt=limit_mm_per_prompt,
583
enable_mm_embeds=enable_mm_embeds,
584
media_io_kwargs=media_io_kwargs,
vllm/config/multimodal.py
+11
-3
@@ -54,8 +54,12 @@ DummyOptions: TypeAlias = (
54
class MultiModalConfig:
55
"""Controls the behavior of multimodal models."""
56
57
+ language_model_only: bool = False
58
+ """If True, disables all multimodal inputs by setting all modality limits
59
+ to 0. Equivalent to setting --limit-mm-per-prompt to 0 for every
60
+ modality."""
61
limit_per_prompt: dict[str, DummyOptions] = Field(default_factory=dict)
58
- """The maximum number of input items and options allowed per
62
+ """The maximum number of input items and options allowed per
63
prompt for each modality.
64
Defaults to 999 for each modality.
65
@@ -63,11 +67,11 @@ class MultiModalConfig:
67
{"image": 16, "video": 2}
68
69
Configurable format (with options):
66
- {"video": {"count": 1, "num_frames": 32, "width": 512, "height": 512},
70
+ {"video": {"count": 1, "num_frames": 32, "width": 512, "height": 512},
71
"image": {"count": 5, "width": 512, "height": 512}}
72
73
Mixed format (combining both):
70
- {"image": 16, "video": {"count": 1, "num_frames": 32, "width": 512,
74
+ {"image": 16, "video": {"count": 1, "num_frames": 32, "width": 512,
75
"height": 512}}
76
"""
77
enable_mm_embeds: bool = False
@@ -215,6 +219,7 @@ class MultiModalConfig:
219
the final hidden states.
220
"""
221
factors: list[Any] = [
222
+ self.language_model_only,
223
self.mm_encoder_attn_backend.name
224
if self.mm_encoder_attn_backend is not None
225
else None,
@@ -228,6 +233,9 @@ class MultiModalConfig:
233
Get the maximum number of input items allowed per prompt
234
for the given modality (backward compatible).
235
"""
236
+ if self.language_model_only:
237
+ return 0
238
+
239
limit_data = self.limit_per_prompt.get(modality)
240
241
if limit_data is None:
vllm/engine/arg_utils.py
+5
@@ -454,6 +454,7 @@ class EngineArgs:
454
allow_deprecated_quantization: bool = ModelConfig.allow_deprecated_quantization
455
enforce_eager: bool = ModelConfig.enforce_eager
456
disable_custom_all_reduce: bool = ParallelConfig.disable_custom_all_reduce
457
+ language_model_only: bool = MultiModalConfig.language_model_only
458
limit_mm_per_prompt: dict[str, int | dict[str, int]] = get_field(
459
MultiModalConfig, "limit_per_prompt"
460
)
@@ -975,6 +976,9 @@ class EngineArgs:
976
title="MultiModalConfig",
977
description=MultiModalConfig.__doc__,
978
)
979
+ multimodal_group.add_argument(
980
+ "--language-model-only", **multimodal_kwargs["language_model_only"]
981
+ )
982
multimodal_group.add_argument(
983
"--limit-mm-per-prompt", **multimodal_kwargs["limit_per_prompt"]
984
)
@@ -1291,6 +1295,7 @@ class EngineArgs:
1295
skip_tokenizer_init=self.skip_tokenizer_init,
1296
enable_prompt_embeds=self.enable_prompt_embeds,
1297
served_model_name=self.served_model_name,
1298
+ language_model_only=self.language_model_only,
1299
limit_mm_per_prompt=self.limit_mm_per_prompt,
1300
enable_mm_embeds=self.enable_mm_embeds,
1301
interleave_mm_strings=self.interleave_mm_strings,