main.py 2.4 KB
Newer Older
1
# SPDX-License-Identifier: Apache-2.0
2
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3
"""The CLI entrypoints of vLLM
4

5
Note that all future modules must be lazily loaded within main
6
7
to avoid certain eager import breakage."""

8
import importlib.metadata
9
10
11
12
13
import sys

from vllm.logger import init_logger

logger = init_logger(__name__)
14
15
16


def main():
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
    import vllm.entrypoints.cli.benchmark.main
    import vllm.entrypoints.cli.collect_env
    import vllm.entrypoints.cli.openai
    import vllm.entrypoints.cli.run_batch
    import vllm.entrypoints.cli.serve
    from vllm.entrypoints.utils import VLLM_SUBCMD_PARSER_EPILOG, cli_env_setup
    from vllm.utils import FlexibleArgumentParser

    CMD_MODULES = [
        vllm.entrypoints.cli.openai,
        vllm.entrypoints.cli.serve,
        vllm.entrypoints.cli.benchmark.main,
        vllm.entrypoints.cli.collect_env,
        vllm.entrypoints.cli.run_batch,
    ]

33
    cli_env_setup()
34

35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
    # For 'vllm bench *': use CPU instead of UnspecifiedPlatform by default
    if len(sys.argv) > 1 and sys.argv[1] == "bench":
        logger.debug(
            "Bench command detected, must ensure current platform is not "
            "UnspecifiedPlatform to avoid device type inference error"
        )
        from vllm import platforms

        if platforms.current_platform.is_unspecified():
            from vllm.platforms.cpu import CpuPlatform

            platforms.current_platform = CpuPlatform()
            logger.info(
                "Unspecified platform detected, switching to CPU Platform instead."
            )

51
52
    parser = FlexibleArgumentParser(
        description="vLLM CLI",
53
        epilog=VLLM_SUBCMD_PARSER_EPILOG.format(subcmd="[subcommand]"),
54
    )
55
    parser.add_argument(
56
57
58
59
        "-v",
        "--version",
        action="version",
        version=importlib.metadata.version("vllm"),
60
    )
61
62
63
64
65
    subparsers = parser.add_subparsers(required=False, dest="subparser")
    cmds = {}
    for cmd_module in CMD_MODULES:
        new_cmds = cmd_module.cmd_init()
        for cmd in new_cmds:
66
            cmd.subparser_init(subparsers).set_defaults(dispatch_function=cmd.cmd)
67
68
69
70
71
72
73
74
75
76
77
78
79
            cmds[cmd.name] = cmd
    args = parser.parse_args()
    if args.subparser in cmds:
        cmds[args.subparser].validate(args)

    if hasattr(args, "dispatch_function"):
        args.dispatch_function(args)
    else:
        parser.print_help()


if __name__ == "__main__":
    main()