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, 23:45 UTC
[feature] add log non default args in LLM (#21680)
Signed-off-by: rongfu.leng <rongfu.leng@daocloud.io>
rongfu.leng committed
Jul 28, 2025 at 17:21 UTC
2cc571199b1446f376ee019fcafda19155fc6b71
4 files changed
+35
-13
vllm/entrypoints/llm.py
+4
-1
@@ -34,7 +34,8 @@ from vllm.entrypoints.score_utils import (ScoreContentPartParam,
34
_cosine_similarity,
35
_validate_score_input_lens,
36
get_score_prompt)
37
-from vllm.entrypoints.utils import _validate_truncation_size
37
+from vllm.entrypoints.utils import (_validate_truncation_size,
38
+ log_non_default_args)
39
from vllm.inputs import PromptType, SingletonPrompt, TextPrompt, TokensPrompt
40
from vllm.inputs.parse import parse_and_batch_prompt
41
from vllm.logger import init_logger
@@ -273,6 +274,8 @@ class LLM:
274
**kwargs,
275
)
276
277
+ log_non_default_args(engine_args)
278
+
279
# Create the Engine (autoselects V0 vs V1)
280
self.llm_engine = LLMEngine.from_engine_args(
281
engine_args=engine_args, usage_context=UsageContext.LLM_CLASS)
vllm/entrypoints/openai/api_server.py
+2
-3
@@ -48,8 +48,7 @@ from vllm.entrypoints.chat_utils import (load_chat_template,
48
resolve_mistral_chat_template)
49
from vllm.entrypoints.launcher import serve_http
50
from vllm.entrypoints.logger import RequestLogger
51
-from vllm.entrypoints.openai.cli_args import (log_non_default_args,
52
- make_arg_parser,
51
+from vllm.entrypoints.openai.cli_args import (make_arg_parser,
52
validate_parsed_serve_args)
53
# yapf conflicts with isort for this block
54
# yapf: disable
@@ -94,7 +93,7 @@ from vllm.entrypoints.openai.serving_transcription import (
93
OpenAIServingTranscription, OpenAIServingTranslation)
94
from vllm.entrypoints.openai.tool_parsers import ToolParserManager
95
from vllm.entrypoints.utils import (cli_env_setup, load_aware_call,
97
- with_cancellation)
96
+ log_non_default_args, with_cancellation)
97
from vllm.logger import init_logger
98
from vllm.reasoning import ReasoningParserManager
99
from vllm.transformers_utils.config import (
vllm/entrypoints/openai/cli_args.py
-9
@@ -255,15 +255,6 @@ def validate_parsed_serve_args(args: argparse.Namespace):
255
"--tool-call-parser")
256
257
258
-def log_non_default_args(args: argparse.Namespace):
259
- non_default_args = {}
260
- parser = make_arg_parser(FlexibleArgumentParser())
261
- for arg, default in vars(parser.parse_args([])).items():
262
- if default != getattr(args, arg):
263
- non_default_args[arg] = getattr(args, arg)
264
- logger.info("non-default args: %s", non_default_args)
265
-
266
-
258
def create_parser_for_docs() -> FlexibleArgumentParser:
259
parser_for_docs = FlexibleArgumentParser(
260
prog="-m vllm.entrypoints.openai.api_server")
vllm/entrypoints/utils.py
+29
@@ -3,6 +3,7 @@
3
4
import argparse
5
import asyncio
6
+import dataclasses
7
import functools
8
import os
9
import subprocess
@@ -13,10 +14,13 @@ from fastapi import Request
14
from fastapi.responses import JSONResponse, StreamingResponse
15
from starlette.background import BackgroundTask, BackgroundTasks
16
17
+from vllm.engine.arg_utils import EngineArgs
18
+from vllm.entrypoints.openai.cli_args import make_arg_parser
19
from vllm.entrypoints.openai.protocol import (ChatCompletionRequest,
20
CompletionRequest)
21
from vllm.logger import init_logger
22
from vllm.platforms import current_platform
23
+from vllm.utils import FlexibleArgumentParser
24
25
logger = init_logger(__name__)
26
@@ -295,3 +299,28 @@ def get_max_tokens(max_model_len: int, request: Union[ChatCompletionRequest,
299
for val in (default_max_tokens, max_tokens, max_output_tokens,
300
default_sampling_params.get("max_tokens"))
301
if val is not None)
302
+
303
+
304
+def log_non_default_args(args: Union[argparse.Namespace, EngineArgs]):
305
+ non_default_args = {}
306
+
307
+ # Handle argparse.Namespace
308
+ if isinstance(args, argparse.Namespace):
309
+ parser = make_arg_parser(FlexibleArgumentParser())
310
+ for arg, default in vars(parser.parse_args([])).items():
311
+ if default != getattr(args, arg):
312
+ non_default_args[arg] = getattr(args, arg)
313
+
314
+ # Handle EngineArgs instance
315
+ elif isinstance(args, EngineArgs):
316
+ default_args = EngineArgs() # Create default instance
317
+ for field in dataclasses.fields(args):
318
+ current_val = getattr(args, field.name)
319
+ default_val = getattr(default_args, field.name)
320
+ if current_val != default_val:
321
+ non_default_args[field.name] = current_val
322
+ else:
323
+ raise TypeError("Unsupported argument type. " \
324
+ "Must be argparse.Namespace or EngineArgs instance.")
325
+
326
+ logger.info("non-default args: %s", non_default_args)