@tduncan / Nvidia-Optimization-Stack-VLLM Mirror · read-only / commits / 64a9c2528b
Fork 0

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,