From 9854dc904039eb9f5d51aac88fbdaf23b96e1da9 Mon Sep 17 00:00:00 2001 From: Reid <61492567+reidliu41@users.noreply.github.com> Date: Thu, 3 Jul 2025 22:22:16 +0800 Subject: [PATCH] [Frontend] improve vllm bench --help display (#20430) Signed-off-by: reidliu41 --- vllm/entrypoints/cli/benchmark/main.py | 5 +++++ vllm/entrypoints/cli/run_batch.py | 2 +- vllm/entrypoints/cli/serve.py | 2 +- vllm/entrypoints/utils.py | 15 +++++++++++---- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/vllm/entrypoints/cli/benchmark/main.py b/vllm/entrypoints/cli/benchmark/main.py index 8904a2468b3ce..a9e703cf88890 100644 --- a/vllm/entrypoints/cli/benchmark/main.py +++ b/vllm/entrypoints/cli/benchmark/main.py @@ -8,6 +8,8 @@ import typing from vllm.entrypoints.cli.benchmark.base import BenchmarkSubcommandBase from vllm.entrypoints.cli.types import CLISubcommand +from vllm.entrypoints.utils import (VLLM_SUBCMD_PARSER_EPILOG, + show_filtered_argument_or_group_from_help) if typing.TYPE_CHECKING: from vllm.utils import FlexibleArgumentParser @@ -45,6 +47,9 @@ class BenchmarkSubcommand(CLISubcommand): ) cmd_subparser.set_defaults(dispatch_function=cmd_cls.cmd) cmd_cls.add_cli_args(cmd_subparser) + show_filtered_argument_or_group_from_help(cmd_subparser, + ["bench", cmd_cls.name]) + cmd_subparser.epilog = VLLM_SUBCMD_PARSER_EPILOG return bench_parser diff --git a/vllm/entrypoints/cli/run_batch.py b/vllm/entrypoints/cli/run_batch.py index 61a34cbc3959f..86491678d7d24 100644 --- a/vllm/entrypoints/cli/run_batch.py +++ b/vllm/entrypoints/cli/run_batch.py @@ -60,7 +60,7 @@ class RunBatchSubcommand(CLISubcommand): ) run_batch_parser = make_arg_parser(run_batch_parser) show_filtered_argument_or_group_from_help(run_batch_parser, - "run-batch") + ["run-batch"]) run_batch_parser.epilog = VLLM_SUBCMD_PARSER_EPILOG return run_batch_parser diff --git a/vllm/entrypoints/cli/serve.py b/vllm/entrypoints/cli/serve.py index 23ac468ffa115..9e24b31e1aae6 100644 --- a/vllm/entrypoints/cli/serve.py +++ b/vllm/entrypoints/cli/serve.py @@ -97,7 +97,7 @@ class ServeSubcommand(CLISubcommand): "https://docs.vllm.ai/en/latest/configuration/serve_args.html") serve_parser = make_arg_parser(serve_parser) - show_filtered_argument_or_group_from_help(serve_parser, "serve") + show_filtered_argument_or_group_from_help(serve_parser, ["serve"]) serve_parser.epilog = VLLM_SUBCMD_PARSER_EPILOG return serve_parser diff --git a/vllm/entrypoints/utils.py b/vllm/entrypoints/utils.py index 50f810afb8ccd..5b085e5b79478 100644 --- a/vllm/entrypoints/utils.py +++ b/vllm/entrypoints/utils.py @@ -1,6 +1,7 @@ # SPDX-License-Identifier: Apache-2.0 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project +import argparse import asyncio import functools import os @@ -15,8 +16,8 @@ from vllm.logger import init_logger logger = init_logger(__name__) VLLM_SUBCMD_PARSER_EPILOG = ( - "Tip: Use `vllm [serve|run-batch] --help=` " - "to explore arguments from help.\n" + "Tip: Use `vllm [serve|run-batch|bench ] " + "--help=` to explore arguments from help.\n" " - To view a argument group: --help=ModelConfig\n" " - To view a single argument: --help=max-num-seqs\n" " - To search by keyword: --help=max\n" @@ -178,13 +179,19 @@ def _validate_truncation_size( return truncate_prompt_tokens -def show_filtered_argument_or_group_from_help(parser, subcommand_name): +def show_filtered_argument_or_group_from_help(parser: argparse.ArgumentParser, + subcommand_name: list[str]): import sys # Only handle --help= for the current subcommand. # Since subparser_init() runs for all subcommands during CLI setup, # we skip processing if the subcommand name is not in sys.argv. - if subcommand_name not in sys.argv: + # sys.argv[0] is the program name. The subcommand follows. + # e.g., for `vllm bench latency`, + # sys.argv is `['vllm', 'bench', 'latency', ...]` + # and subcommand_name is "bench latency". + if len(sys.argv) <= len(subcommand_name) or sys.argv[ + 1:1 + len(subcommand_name)] != subcommand_name: return for arg in sys.argv: