@tduncan / Nvidia-Optimization-Stack-VLLM Mirror · read-only / commits / 56aafa8c0b
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 14, 05:30 UTC

[Misc] fix unique_filepath (#25732)

Signed-off-by: zjy0516 <riverclouds.zhu@qq.com> Co-authored-by: Luka Govedič <ProExpertProg@users.noreply.github.com>

Jiangyun Zhu committed Sep 27, 2025 at 00:56 UTC 56aafa8c0bb9cce3594d834b996a5352504b985e
2 files changed +42 -8
tests/utils_/test_utils.py
+21 -8
@@ -23,15 +23,16 @@ from vllm_test_utils.monitor import monitor
23 from vllm.config import ParallelConfig, VllmConfig, set_current_vllm_config
24 from vllm.transformers_utils.detokenizer_utils import (
25 convert_ids_list_to_tokens)
26 -from vllm.utils import (CacheInfo, FlexibleArgumentParser, LRUCache,
27 - MemorySnapshot, PlaceholderModule, StoreBoolean,
28 - bind_kv_cache, common_broadcastable_dtype,
29 - current_stream, deprecate_kwargs, get_open_port,
30 - get_tcp_uri, is_lossless_cast, join_host_port,
31 - make_zmq_path, make_zmq_socket, memory_profiling,
32 - merge_async_iterators, sha256, split_host_port,
33 - split_zmq_path, supports_kw, swap_dict_values)
26
27 +# isort: off
28 +from vllm.utils import (
29 + CacheInfo, FlexibleArgumentParser, LRUCache, MemorySnapshot,
30 + PlaceholderModule, bind_kv_cache, common_broadcastable_dtype,
31 + current_stream, deprecate_kwargs, get_open_port, get_tcp_uri,
32 + is_lossless_cast, join_host_port, make_zmq_path, make_zmq_socket,
33 + memory_profiling, merge_async_iterators, sha256, split_host_port,
34 + split_zmq_path, supports_kw, swap_dict_values, unique_filepath)
35 +# isort: on
36 from ..utils import create_new_process_for_each_test, error_on_warning
37
38
@@ -1032,3 +1033,15 @@ def test_load_config_file(tmp_path):
1033 # Assert that the processed arguments match the expected output
1034 assert processed_args == expected_args
1035 os.remove(str(config_file_path))
1036 +
1037 +
1038 +def test_unique_filepath():
1039 + temp_dir = tempfile.mkdtemp()
1040 + path_fn = lambda i: Path(temp_dir) / f"file_{i}.txt"
1041 + paths = set()
1042 + for i in range(10):
1043 + path = unique_filepath(path_fn)
1044 + path.write_text("test")
1045 + paths.add(path)
1046 + assert len(paths) == 10
1047 + assert len(list(Path(temp_dir).glob("*.txt"))) == 10
vllm/utils/__init__.py
+21
@@ -45,6 +45,7 @@ from concurrent.futures import ThreadPoolExecutor
45 from concurrent.futures.process import ProcessPoolExecutor
46 from dataclasses import dataclass, field
47 from functools import cache, lru_cache, partial, wraps
48 +from pathlib import Path
49 from types import MappingProxyType
50 from typing import (TYPE_CHECKING, Any, Callable, Generic, Literal, NamedTuple,
51 Optional, TextIO, TypeVar, Union, cast, overload)
@@ -3536,3 +3537,23 @@ def set_env_var(key, value):
3537 del os.environ[key]
3538 else:
3539 os.environ[key] = old
3540 +
3541 +
3542 +def unique_filepath(fn: Callable[[int], Path]) -> Path:
3543 + """
3544 + unique_filepath returns a unique path by trying
3545 + to include an integer in increasing order.
3546 +
3547 + fn should be a callable that returns a path that
3548 + includes the passed int at a fixed location.
3549 +
3550 + Note: This function has a TOCTOU race condition.
3551 + Caller should use atomic operations (e.g., open with 'x' mode)
3552 + when creating the file to ensure thread safety.
3553 + """
3554 + i = 0
3555 + while True:
3556 + p = fn(i)
3557 + if not p.exists():
3558 + return p
3559 + i += 1