@tduncan / Nvidia-Optimization-Stack-VLLM Mirror · read-only / commits / a2dd48c386
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 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