Skip to content

Commit 2cc5711

Browse files
authored
[feature] add log non default args in LLM (#21680)
Signed-off-by: rongfu.leng <[email protected]>
1 parent a4ed731 commit 2cc5711

File tree

4 files changed

+35
-13
lines changed

4 files changed

+35
-13
lines changed

vllm/entrypoints/llm.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@
3434
_cosine_similarity,
3535
_validate_score_input_lens,
3636
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)
3839
from vllm.inputs import PromptType, SingletonPrompt, TextPrompt, TokensPrompt
3940
from vllm.inputs.parse import parse_and_batch_prompt
4041
from vllm.logger import init_logger
@@ -273,6 +274,8 @@ def __init__(
273274
**kwargs,
274275
)
275276

277+
log_non_default_args(engine_args)
278+
276279
# Create the Engine (autoselects V0 vs V1)
277280
self.llm_engine = LLMEngine.from_engine_args(
278281
engine_args=engine_args, usage_context=UsageContext.LLM_CLASS)

vllm/entrypoints/openai/api_server.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,7 @@
4848
resolve_mistral_chat_template)
4949
from vllm.entrypoints.launcher import serve_http
5050
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,
5352
validate_parsed_serve_args)
5453
# yapf conflicts with isort for this block
5554
# yapf: disable
@@ -94,7 +93,7 @@
9493
OpenAIServingTranscription, OpenAIServingTranslation)
9594
from vllm.entrypoints.openai.tool_parsers import ToolParserManager
9695
from vllm.entrypoints.utils import (cli_env_setup, load_aware_call,
97-
with_cancellation)
96+
log_non_default_args, with_cancellation)
9897
from vllm.logger import init_logger
9998
from vllm.reasoning import ReasoningParserManager
10099
from vllm.transformers_utils.config import (

vllm/entrypoints/openai/cli_args.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -255,15 +255,6 @@ def validate_parsed_serve_args(args: argparse.Namespace):
255255
"--tool-call-parser")
256256

257257

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-
267258
def create_parser_for_docs() -> FlexibleArgumentParser:
268259
parser_for_docs = FlexibleArgumentParser(
269260
prog="-m vllm.entrypoints.openai.api_server")

vllm/entrypoints/utils.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import argparse
55
import asyncio
6+
import dataclasses
67
import functools
78
import os
89
import subprocess
@@ -13,10 +14,13 @@
1314
from fastapi.responses import JSONResponse, StreamingResponse
1415
from starlette.background import BackgroundTask, BackgroundTasks
1516

17+
from vllm.engine.arg_utils import EngineArgs
18+
from vllm.entrypoints.openai.cli_args import make_arg_parser
1619
from vllm.entrypoints.openai.protocol import (ChatCompletionRequest,
1720
CompletionRequest)
1821
from vllm.logger import init_logger
1922
from vllm.platforms import current_platform
23+
from vllm.utils import FlexibleArgumentParser
2024

2125
logger = init_logger(__name__)
2226

@@ -295,3 +299,28 @@ def get_max_tokens(max_model_len: int, request: Union[ChatCompletionRequest,
295299
for val in (default_max_tokens, max_tokens, max_output_tokens,
296300
default_sampling_params.get("max_tokens"))
297301
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)

0 commit comments

Comments
 (0)