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, 21:00 UTC
[VLM] Deprecate legacy input mapper for OOT multimodal models (#13979)
Signed-off-by: DarkLight1337 <tlleungac@connect.ust.hk>
Cyrus Leung committed
Feb 28, 2025 at 03:14 UTC
a2dd48c386f787cdfbe35099e0d273f19748dbb6
2 files changed
+32
-27
vllm/config.py
+23
-22
@@ -400,7 +400,7 @@ class ModelConfig:
400
else:
401
self.override_neuron_config = None
402
403
- supported_tasks, task = self._resolve_task(task, self.hf_config)
403
+ supported_tasks, task = self._resolve_task(task)
404
self.supported_tasks = supported_tasks
405
self.task: Final = task
406
if self.task in ("draft", "generate"):
@@ -418,6 +418,14 @@ class ModelConfig:
418
self._verify_cuda_graph()
419
self._verify_bnb_config()
420
421
+ @property
422
+ def registry(self):
423
+ return ModelRegistry
424
+
425
+ @property
426
+ def architectures(self) -> list[str]:
427
+ return getattr(self.hf_config, "architectures", [])
428
+
429
def maybe_pull_model_tokenizer_for_s3(self, model: str,
430
tokenizer: str) -> None:
431
"""
@@ -446,8 +454,7 @@ class ModelConfig:
454
def _init_multimodal_config(
455
self, limit_mm_per_prompt: Optional[Mapping[str, int]]
456
) -> Optional["MultiModalConfig"]:
449
- architectures = getattr(self.hf_config, "architectures", [])
450
- if ModelRegistry.is_multimodal_model(architectures):
457
+ if self.registry.is_multimodal_model(self.architectures):
458
return MultiModalConfig(limit_per_prompt=limit_mm_per_prompt or {})
459
460
if limit_mm_per_prompt:
@@ -480,16 +487,13 @@ class ModelConfig:
487
return None
488
489
def _init_attention_free(self) -> bool:
483
- architectures = getattr(self.hf_config, "architectures", [])
484
- return ModelRegistry.is_attention_free_model(architectures)
490
+ return self.registry.is_attention_free_model(self.architectures)
491
492
def _init_is_hybrid(self) -> bool:
487
- architectures = getattr(self.hf_config, "architectures", [])
488
- return ModelRegistry.is_hybrid_model(architectures)
493
+ return self.registry.is_hybrid_model(self.architectures)
494
495
def _init_has_inner_state(self) -> bool:
491
- architectures = getattr(self.hf_config, "architectures", [])
492
- return ModelRegistry.model_has_inner_state(architectures)
496
+ return self.registry.model_has_inner_state(self.architectures)
497
498
def _verify_tokenizer_mode(self) -> None:
499
tokenizer_mode = self.tokenizer_mode.lower()
@@ -507,9 +511,9 @@ class ModelConfig:
511
model_id = self.model
512
if get_pooling_config(model_id, self.revision):
513
return "embed"
510
- if ModelRegistry.is_cross_encoder_model(architectures):
514
+ if self.registry.is_cross_encoder_model(architectures):
515
return "score"
512
- if ModelRegistry.is_transcription_model(architectures):
516
+ if self.registry.is_transcription_model(architectures):
517
return "transcription"
518
519
suffix_to_preferred_task: List[Tuple[str, _ResolvedTask]] = [
@@ -522,7 +526,7 @@ class ModelConfig:
526
("EmbeddingModel", "embed"),
527
("RewardModel", "reward"),
528
]
525
- _, arch = ModelRegistry.inspect_model_cls(architectures)
529
+ _, arch = self.registry.inspect_model_cls(architectures)
530
531
for suffix, pref_task in suffix_to_preferred_task:
532
if arch.endswith(suffix) and pref_task in supported_tasks:
@@ -533,20 +537,19 @@ class ModelConfig:
537
def _resolve_task(
538
self,
539
task_option: Union[TaskOption, Literal["draft"]],
536
- hf_config: PretrainedConfig,
540
) -> Tuple[Set[_ResolvedTask], _ResolvedTask]:
541
if task_option == "draft":
542
return {"draft"}, "draft"
543
541
- architectures = getattr(hf_config, "architectures", [])
544
+ registry = self.registry
545
+ architectures = self.architectures
546
547
runner_support: Dict[RunnerType, bool] = {
548
# NOTE: Listed from highest to lowest priority,
549
# in case the model supports multiple of them
546
- "transcription":
547
- ModelRegistry.is_transcription_model(architectures),
548
- "generate": ModelRegistry.is_text_generation_model(architectures),
549
- "pooling": ModelRegistry.is_pooling_model(architectures),
550
+ "transcription": registry.is_transcription_model(architectures),
551
+ "generate": registry.is_text_generation_model(architectures),
552
+ "pooling": registry.is_pooling_model(architectures),
553
}
554
supported_runner_types_lst: List[RunnerType] = [
555
runner_type
@@ -755,8 +758,7 @@ class ModelConfig:
758
759
pipeline_parallel_size = parallel_config.pipeline_parallel_size
760
if pipeline_parallel_size > 1:
758
- architectures = getattr(self.hf_config, "architectures", [])
759
- if not ModelRegistry.is_pp_supported_model(architectures):
761
+ if not self.registry.is_pp_supported_model(self.architectures):
762
raise NotImplementedError(
763
"Pipeline parallelism is not supported for this model. "
764
"Supported models implement the `SupportsPP` interface.")
@@ -1023,8 +1025,7 @@ class ModelConfig:
1025
1026
@property
1027
def is_cross_encoder(self) -> bool:
1026
- architectures = getattr(self.hf_config, "architectures", [])
1027
- return ModelRegistry.is_cross_encoder_model(architectures)
1028
+ return self.registry.is_cross_encoder_model(self.architectures)
1029
1030
@property
1031
def use_mla(self) -> bool:
vllm/inputs/preprocess.py
+9
-5
@@ -236,11 +236,15 @@ class InputPreprocessor:
236
# updated to use the new multi-modal processor
237
can_process_multimodal = self.mm_registry.has_processor(model_config)
238
if not can_process_multimodal:
239
- logger.info_once(
240
- "Your model uses the legacy input pipeline instead of the new "
241
- "multi-modal processor. Please note that the legacy pipeline "
242
- "will be removed in a future release. For more details, see: "
243
- "https://github.com/vllm-project/vllm/issues/10114")
239
+ from vllm.model_executor.models.registry import _VLLM_MODELS
240
+ if not any(arch in _VLLM_MODELS
241
+ for arch in model_config.architectures):
242
+ logger.warning_once(
243
+ "Your model uses the legacy input pipeline, which will be "
244
+ "removed in an upcoming release. "
245
+ "Please upgrade to the new multi-modal processing pipeline "
246
+ "(https://docs.vllm.ai/en/latest/design/mm_processing.html)"
247
+ )
248
249
return can_process_multimodal
250