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 14, 05:30 UTC
[Chore] Separate out `vllm.utils.platform_utils.py` (#27374)
Signed-off-by: Jonathan <chenleejonathan@gmail.com>
Jonathan Chen committed
Oct 23, 2025 at 15:08 UTC
ca76486a16fbf9659a80e8b34b919e0065108f25
21 files changed
+79
-70
tests/kernels/core/test_uva.py
+1
-1
@@ -3,7 +3,7 @@
3
import pytest
4
import torch
5
6
-from vllm.utils import is_uva_available
6
+from vllm.utils.platform_utils import is_uva_available
7
from vllm.utils.torch_utils import get_cuda_view_from_cpu_tensor
8
9
CUDA_DEVICES = [f"cuda:{i}" for i in range(1 if torch.cuda.device_count() == 1 else 2)]
tests/v1/logits_processors/test_correctness.py
+1
-1
@@ -21,7 +21,7 @@ from tests.v1.sample.utils import (
21
from vllm.config import VllmConfig
22
from vllm.platforms import current_platform
23
from vllm.sampling_params import SamplingParams
24
-from vllm.utils import is_pin_memory_available
24
+from vllm.utils.platform_utils import is_pin_memory_available
25
from vllm.v1.sample.logits_processor import (
26
BatchUpdate,
27
BatchUpdateBuilder,
tests/v1/sample/test_sampler.py
+1
-1
@@ -7,7 +7,7 @@ import torch
7
8
from tests.v1.sample.utils import create_allowed_token_ids
9
from vllm.platforms import current_platform
10
-from vllm.utils import is_pin_memory_available
10
+from vllm.utils.platform_utils import is_pin_memory_available
11
from vllm.utils.torch_utils import make_tensor_with_pad
12
from vllm.v1.sample.logits_processor import LogitsProcessors
13
from vllm.v1.sample.metadata import SamplingMetadata
tests/v1/worker/test_gpu_input_batch.py
+1
-1
@@ -10,7 +10,7 @@ import torch
10
11
from vllm.platforms import current_platform
12
from vllm.sampling_params import SamplingParams
13
-from vllm.utils import is_pin_memory_available
13
+from vllm.utils.platform_utils import is_pin_memory_available
14
from vllm.utils.torch_utils import make_tensor_with_pad
15
from vllm.v1.pool.metadata import PoolingMetadata
16
from vllm.v1.sample.logits_processor import LogitsProcessors
vllm/device_allocator/cumem.py
+1
-1
@@ -18,7 +18,7 @@ from typing import Any
18
import torch
19
20
from vllm.logger import init_logger
21
-from vllm.utils import is_pin_memory_available
21
+from vllm.utils.platform_utils import is_pin_memory_available
22
23
logger = init_logger(__name__)
24
vllm/lora/lora_weights.py
+1
-1
@@ -8,7 +8,7 @@ import torch
8
import torch.types
9
10
from vllm.lora.peft_helper import PEFTHelper
11
-from vllm.utils import is_pin_memory_available
11
+from vllm.utils.platform_utils import is_pin_memory_available
12
13
14
class LoRALayerWeights:
vllm/lora/models.py
+1
-1
@@ -31,8 +31,8 @@ from vllm.model_executor.models import SupportsLoRA, supports_multimodal
31
from vllm.model_executor.models.interfaces import is_pooling_model
32
from vllm.model_executor.models.module_mapping import MultiModelKeys
33
from vllm.model_executor.models.utils import PPMissingLayer, WeightsMapper
34
-from vllm.utils import is_pin_memory_available
34
from vllm.utils.cache import LRUCache
35
+from vllm.utils.platform_utils import is_pin_memory_available
36
37
logger = init_logger(__name__)
38
vllm/model_executor/model_loader/utils.py
+1
-1
@@ -26,7 +26,7 @@ from vllm.model_executor.models.adapters import (
26
try_create_mm_pooling_model_cls,
27
)
28
from vllm.model_executor.models.interfaces import SupportsQuant, supports_multimodal
29
-from vllm.utils import is_pin_memory_available
29
+from vllm.utils.platform_utils import is_pin_memory_available
30
31
logger = init_logger(__name__)
32
vllm/model_executor/models/qwen2_5_vl.py
+1
-1
@@ -72,7 +72,7 @@ from vllm.multimodal.inputs import MultiModalFieldConfig, MultiModalKwargs
72
from vllm.multimodal.parse import MultiModalDataItems
73
from vllm.multimodal.processing import PromptReplacement, PromptUpdate
74
from vllm.sequence import IntermediateTensors
75
-from vllm.utils import is_pin_memory_available
75
+from vllm.utils.platform_utils import is_pin_memory_available
76
from vllm.utils.tensor_schema import TensorSchema, TensorShape
77
78
from .interfaces import (
vllm/model_executor/models/utils.py
+2
-2
@@ -22,8 +22,8 @@ from vllm.logger import init_logger
22
from vllm.model_executor.model_loader.weight_utils import default_weight_loader
23
from vllm.multimodal import NestedTensors
24
from vllm.sequence import IntermediateTensors
25
-from vllm.utils import (
26
- cdiv,
25
+from vllm.utils import cdiv
26
+from vllm.utils.platform_utils import (
27
is_pin_memory_available,
28
is_uva_available,
29
)
vllm/usage/usage_lib.py
+1
-1
@@ -21,7 +21,7 @@ import torch
21
import vllm.envs as envs
22
from vllm.connections import global_http_connection
23
from vllm.logger import init_logger
24
-from vllm.utils import cuda_get_device_properties
24
+from vllm.utils.platform_utils import cuda_get_device_properties
25
from vllm.utils.torch_utils import cuda_device_count_stateless
26
from vllm.version import __version__ as VLLM_VERSION
27
vllm/utils/__init__.py
+3
-50
@@ -27,12 +27,8 @@ from argparse import (
27
_ArgumentGroup,
28
)
29
from collections import defaultdict
30
-from collections.abc import (
31
- Callable,
32
- Sequence,
33
-)
34
-from concurrent.futures.process import ProcessPoolExecutor
35
-from functools import cache, partial, wraps
30
+from collections.abc import Callable
31
+from functools import partial, wraps
32
from typing import TYPE_CHECKING, Any, TypeVar
33
34
import cloudpickle
@@ -44,6 +40,7 @@ import yaml
40
import vllm.envs as envs
41
from vllm.logger import enable_trace_function_call, init_logger
42
from vllm.ray.lazy_utils import is_in_ray_actor
43
+from vllm.utils.platform_utils import cuda_is_initialized, xpu_is_initialized
44
45
_DEPRECATED_MAPPINGS = {
46
"cprofile": "profiling",
@@ -169,21 +166,6 @@ def round_down(x: int, y: int) -> int:
166
return (x // y) * y
167
168
172
-@cache
173
-def is_pin_memory_available() -> bool:
174
- from vllm.platforms import current_platform
175
-
176
- return current_platform.is_pin_memory_available()
177
-
178
-
179
-@cache
180
-def is_uva_available() -> bool:
181
- """Check if Unified Virtual Addressing (UVA) is available."""
182
- # UVA requires pinned memory.
183
- # TODO: Add more requirements for UVA if needed.
184
- return is_pin_memory_available()
185
-
186
-
169
# TODO: This function can be removed if transformer_modules classes are
170
# serialized by value when communicating between processes
171
def init_cached_hf_modules() -> None:
@@ -216,35 +198,6 @@ def enable_trace_function_call_for_thread(vllm_config: VllmConfig) -> None:
198
enable_trace_function_call(log_path)
199
200
219
-def cuda_is_initialized() -> bool:
220
- """Check if CUDA is initialized."""
221
- if not torch.cuda._is_compiled():
222
- return False
223
- return torch.cuda.is_initialized()
224
-
225
-
226
-def xpu_is_initialized() -> bool:
227
- """Check if XPU is initialized."""
228
- if not torch.xpu._is_compiled():
229
- return False
230
- return torch.xpu.is_initialized()
231
-
232
-
233
-def cuda_get_device_properties(
234
- device, names: Sequence[str], init_cuda=False
235
-) -> tuple[Any, ...]:
236
- """Get specified CUDA device property values without initializing CUDA in
237
- the current process."""
238
- if init_cuda or cuda_is_initialized():
239
- props = torch.cuda.get_device_properties(device)
240
- return tuple(getattr(props, name) for name in names)
241
-
242
- # Run in subprocess to avoid initializing CUDA as a side effect.
243
- mp_ctx = multiprocessing.get_context("fork")
244
- with ProcessPoolExecutor(max_workers=1, mp_context=mp_ctx) as executor:
245
- return executor.submit(cuda_get_device_properties, device, names, True).result()
246
-
247
-
201
def weak_bind(
202
bound_method: Callable[..., Any],
203
) -> Callable[..., None]:
vllm/utils/platform_utils.py
new
+54
@@ -0,0 +1,54 @@
1
+# SPDX-License-Identifier: Apache-2.0
2
+# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3
+
4
+import multiprocessing
5
+from collections.abc import Sequence
6
+from concurrent.futures.process import ProcessPoolExecutor
7
+from functools import cache
8
+from typing import Any
9
+
10
+import torch
11
+
12
+
13
+def cuda_is_initialized() -> bool:
14
+ """Check if CUDA is initialized."""
15
+ if not torch.cuda._is_compiled():
16
+ return False
17
+ return torch.cuda.is_initialized()
18
+
19
+
20
+def xpu_is_initialized() -> bool:
21
+ """Check if XPU is initialized."""
22
+ if not torch.xpu._is_compiled():
23
+ return False
24
+ return torch.xpu.is_initialized()
25
+
26
+
27
+def cuda_get_device_properties(
28
+ device, names: Sequence[str], init_cuda=False
29
+) -> tuple[Any, ...]:
30
+ """Get specified CUDA device property values without initializing CUDA in
31
+ the current process."""
32
+ if init_cuda or cuda_is_initialized():
33
+ props = torch.cuda.get_device_properties(device)
34
+ return tuple(getattr(props, name) for name in names)
35
+
36
+ # Run in subprocess to avoid initializing CUDA as a side effect.
37
+ mp_ctx = multiprocessing.get_context("fork")
38
+ with ProcessPoolExecutor(max_workers=1, mp_context=mp_ctx) as executor:
39
+ return executor.submit(cuda_get_device_properties, device, names, True).result()
40
+
41
+
42
+@cache
43
+def is_pin_memory_available() -> bool:
44
+ from vllm.platforms import current_platform
45
+
46
+ return current_platform.is_pin_memory_available()
47
+
48
+
49
+@cache
50
+def is_uva_available() -> bool:
51
+ """Check if Unified Virtual Addressing (UVA) is available."""
52
+ # UVA requires pinned memory.
53
+ # TODO: Add more requirements for UVA if needed.
54
+ return is_pin_memory_available()
vllm/v1/attention/backends/flashinfer.py
+2
-1
@@ -34,12 +34,13 @@ from vllm.model_executor.layers.quantization.utils.quant_utils import (
34
)
35
from vllm.platforms import current_platform
36
from vllm.triton_utils import tl, triton
37
-from vllm.utils import cdiv, is_pin_memory_available
37
+from vllm.utils import cdiv
38
from vllm.utils.flashinfer import (
39
can_use_trtllm_attention,
40
flashinfer_disable_q_quantization,
41
use_trtllm_attention,
42
)
43
+from vllm.utils.platform_utils import is_pin_memory_available
44
from vllm.v1.attention.backends.utils import (
45
AttentionCGSupport,
46
AttentionMetadataBuilder,
vllm/v1/kv_offload/worker/cpu_gpu.py
+1
-1
@@ -7,7 +7,7 @@ import torch
7
from vllm import _custom_ops as ops
8
from vllm.attention import AttentionBackend
9
from vllm.logger import init_logger
10
-from vllm.utils import is_pin_memory_available
10
+from vllm.utils.platform_utils import is_pin_memory_available
11
from vllm.v1.kv_offload.mediums import CPULoadStoreSpec, GPULoadStoreSpec
12
from vllm.v1.kv_offload.worker.worker import (
13
OffloadingHandler,
vllm/v1/pool/metadata.py
+1
-1
@@ -5,7 +5,7 @@ from dataclasses import dataclass
5
import torch
6
7
from vllm.pooling_params import PoolingParams
8
-from vllm.utils import is_pin_memory_available
8
+from vllm.utils.platform_utils import is_pin_memory_available
9
10
pin_memory = is_pin_memory_available()
11
vllm/v1/sample/ops/penalties.py
+1
-1
@@ -4,7 +4,7 @@
4
import torch
5
6
from vllm.model_executor.layers.utils import apply_penalties
7
-from vllm.utils import is_pin_memory_available
7
+from vllm.utils.platform_utils import is_pin_memory_available
8
from vllm.utils.torch_utils import make_tensor_with_pad
9
10
vllm/v1/sample/sampler.py
+1
-1
@@ -6,7 +6,7 @@ import torch
6
import torch.nn as nn
7
8
from vllm.config.model import LogprobsMode
9
-from vllm.utils import is_pin_memory_available
9
+from vllm.utils.platform_utils import is_pin_memory_available
10
from vllm.v1.outputs import LogprobsTensors, SamplerOutput
11
from vllm.v1.sample.metadata import SamplingMetadata
12
from vllm.v1.sample.ops.bad_words import apply_bad_words
vllm/v1/spec_decode/eagle.py
+1
-1
@@ -24,7 +24,7 @@ from vllm.model_executor.models.deepseek_v2 import DeepseekV32IndexerCache
24
from vllm.model_executor.models.llama_eagle3 import Eagle3LlamaForCausalLM
25
from vllm.multimodal import MULTIMODAL_REGISTRY
26
from vllm.platforms import current_platform
27
-from vllm.utils import is_pin_memory_available
27
+from vllm.utils.platform_utils import is_pin_memory_available
28
from vllm.v1.attention.backends.flash_attn import FlashAttentionMetadata
29
from vllm.v1.attention.backends.tree_attn import (
30
TreeAttentionMetadata,
vllm/v1/worker/gpu_model_runner.py
+1
-1
@@ -72,13 +72,13 @@ from vllm.tasks import GenerationTask, PoolingTask, SupportedTask
72
from vllm.utils import (
73
cdiv,
74
check_use_alibi,
75
- is_pin_memory_available,
75
length_from_prompt_token_ids_or_embeds,
76
round_up,
77
)
78
from vllm.utils.jsontree import json_map_leaves
79
from vllm.utils.mem_constants import GiB_bytes
80
from vllm.utils.mem_utils import DeviceMemoryProfiler
81
+from vllm.utils.platform_utils import is_pin_memory_available
82
from vllm.utils.torch_utils import (
83
get_dtype_size,
84
kv_cache_dtype_str_to_dtype,
vllm/v1/worker/tpu_model_runner.py
+2
-1
@@ -53,7 +53,8 @@ from vllm.multimodal.inputs import (
53
from vllm.multimodal.utils import group_mm_kwargs_by_modality
54
from vllm.sequence import IntermediateTensors
55
from vllm.tasks import GenerationTask, PoolingTask, SupportedTask
56
-from vllm.utils import LayerBlockType, cdiv, is_pin_memory_available, prev_power_of_2
56
+from vllm.utils import LayerBlockType, cdiv, prev_power_of_2
57
+from vllm.utils.platform_utils import is_pin_memory_available
58
from vllm.v1.attention.backends.pallas import (
59
TPU_STR_DTYPE_TO_TORCH_DTYPE,
60
PallasAttentionBackend,