@tduncan / Nvidia-Optimization-Stack-VLLM Mirror · read-only / commits / 7108934142
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, 04:45 UTC

[Frontend] speed up import time of vllm.config (#18036)

Signed-off-by: David Xia <david@davidxia.com>

David Xia committed Jun 25, 2025 at 00:41 UTC 7108934142801dad2fd8ac42aec8b1699e37ff5d
1 file changed +27 -17
vllm/config.py
+27 -17
@@ -27,19 +27,13 @@ from pydantic import (ConfigDict, SkipValidation, TypeAdapter, field_validator,
27 from pydantic.dataclasses import dataclass
28 from safetensors.torch import _TYPES as _SAFETENSORS_TO_TORCH_DTYPE
29 from torch.distributed import ProcessGroup, ReduceOp
30 -from transformers import PretrainedConfig
30 from typing_extensions import Self, deprecated, runtime_checkable
31
32 import vllm.envs as envs
33 from vllm import version
34 from vllm.compilation.inductor_pass import CallableInductorPass, InductorPass
35 from vllm.logger import init_logger
37 -from vllm.model_executor.layers.quantization import (QUANTIZATION_METHODS,
38 - QuantizationMethods,
39 - get_quantization_config)
40 -from vllm.model_executor.models import ModelRegistry
36 from vllm.platforms import current_platform
42 -from vllm.tracing import is_otel_available, otel_import_error_traceback
37 from vllm.transformers_utils.config import (
38 ConfigFormat, get_config, get_hf_image_processor_config,
39 get_hf_text_config, get_pooling_config,
@@ -48,32 +42,49 @@ from vllm.transformers_utils.config import (
42 try_get_tokenizer_config, uses_mrope)
43 from vllm.transformers_utils.s3_utils import S3Model
44 from vllm.transformers_utils.utils import is_s3, maybe_model_redirect
45 +# yapf conflicts with isort for this block
46 +# yapf: disable
47 from vllm.utils import (DEFAULT_MAX_NUM_BATCHED_TOKENS,
48 MULTIMODAL_MODEL_MAX_NUM_BATCHED_TOKENS,
49 POOLING_MODEL_MAX_NUM_BATCHED_TOKENS, GiB_bytes,
54 - LayerBlockType, common_broadcastable_dtype,
50 + LayerBlockType, LazyLoader, common_broadcastable_dtype,
51 cuda_device_count_stateless, get_cpu_memory,
52 get_open_port, is_torch_equal_or_newer, random_uuid,
53 resolve_obj_by_qualname)
54
55 +# yapf: enable
56 +
57 if TYPE_CHECKING:
58 from _typeshed import DataclassInstance
59 from ray.util.placement_group import PlacementGroup
60 + from transformers.configuration_utils import PretrainedConfig
61
62 + import vllm.model_executor.layers.quantization as me_quant
63 + import vllm.model_executor.models as me_models
64 from vllm.executor.executor_base import ExecutorBase
65 + from vllm.model_executor.layers.quantization import QuantizationMethods
66 from vllm.model_executor.layers.quantization.base_config import (
67 QuantizationConfig)
68 from vllm.model_executor.model_loader import BaseModelLoader
69 from vllm.model_executor.model_loader.tensorizer import TensorizerConfig
70
71 ConfigType = type[DataclassInstance]
72 + HfOverrides = Union[dict, Callable[[type], type]]
73 else:
74 PlacementGroup = Any
75 + PretrainedConfig = Any
76 ExecutorBase = Any
77 QuantizationConfig = Any
78 + QuantizationMethods = Any
79 BaseModelLoader = Any
80 TensorizerConfig = Any
81 ConfigType = type
82 + HfOverrides = Union[dict[str, Any], Callable[[type], type]]
83 +
84 + me_quant = LazyLoader("model_executor", globals(),
85 + "vllm.model_executor.layers.quantization")
86 + me_models = LazyLoader("model_executor", globals(),
87 + "vllm.model_executor.models")
88
89 logger = init_logger(__name__)
90
@@ -100,9 +111,6 @@ _TASK_RUNNER: dict[_ResolvedTask, RunnerType] = {
111 for task in tasks
112 }
113
103 -HfOverrides = Union[dict[str, Any], Callable[[PretrainedConfig],
104 - PretrainedConfig]]
105 -
114
115 @runtime_checkable
116 class SupportsHash(Protocol):
@@ -648,7 +656,7 @@ class ModelConfig:
656
657 @property
658 def registry(self):
651 - return ModelRegistry
659 + return me_models.ModelRegistry
660
661 @property
662 def architectures(self) -> list[str]:
@@ -859,14 +867,15 @@ class ModelConfig:
867 return quant_cfg
868
869 def _verify_quantization(self) -> None:
862 - supported_quantization = QUANTIZATION_METHODS
870 + supported_quantization = me_quant.QUANTIZATION_METHODS
871 optimized_quantization_methods = [
872 "fp8", "marlin", "modelopt", "gptq_marlin_24", "gptq_marlin",
873 "awq_marlin", "fbgemm_fp8", "compressed-tensors", "experts_int8",
874 "quark", "modelopt_fp4", "bitblas", "gptq_bitblas"
875 ]
876 if self.quantization is not None:
869 - self.quantization = cast(QuantizationMethods, self.quantization)
877 + self.quantization = cast(me_quant.QuantizationMethods,
878 + self.quantization)
879
880 # Parse quantization method from the HF model config, if available.
881 quant_cfg = self._parse_quant_hf_config()
@@ -900,14 +909,14 @@ class ModelConfig:
909
910 # Detect which checkpoint is it
911 for name in quantization_methods:
903 - method = get_quantization_config(name)
912 + method = me_quant.get_quantization_config(name)
913 quantization_override = method.override_quantization_method(
914 quant_cfg, self.quantization)
915 if quantization_override is not None:
916 # Raise error if the override is not custom (custom would
917 # be in QUANTIZATION_METHODS but not QuantizationMethods)
918 # and hasn't been added to the overrides list.
910 - if (name in get_args(QuantizationMethods)
919 + if (name in get_args(me_quant.QuantizationMethods)
920 and name not in overrides):
921 raise ValueError(
922 f"Quantization method {name} is an override but "
@@ -1417,7 +1426,7 @@ class ModelConfig:
1426 @property
1427 def is_v1_compatible(self) -> bool:
1428 architectures = getattr(self.hf_config, "architectures", [])
1420 - return ModelRegistry.is_v1_compatible(architectures)
1429 + return me_models.ModelRegistry.is_v1_compatible(architectures)
1430
1431 @property
1432 def is_matryoshka(self) -> bool:
@@ -2376,7 +2385,7 @@ class SpeculativeConfig:
2385 according to the log probability settings in SamplingParams."""
2386
2387 # Draft model configuration
2379 - quantization: Optional[QuantizationMethods] = None
2388 + quantization: Optional[me_quant.QuantizationMethods] = None
2389 """Quantization method that was used to quantize the draft model weights.
2390 If `None`, we assume the model weights are not quantized. Note that it only
2391 takes effect when using the draft model-based speculative method."""
@@ -3624,6 +3633,7 @@ class ObservabilityConfig:
3633 and "," in self.collect_detailed_traces[0]):
3634 self._parse_collect_detailed_traces()
3635
3636 + from vllm.tracing import is_otel_available, otel_import_error_traceback
3637 if not is_otel_available() and self.otlp_traces_endpoint is not None:
3638 raise ValueError(
3639 "OpenTelemetry is not available. Unable to configure "