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