Skip to content

Commit 0a60424

Browse files
hmelloramd-xiaoyu12
authored andcommitted
[Docs] Reduce requirements for docs build (vllm-project#23651)
Signed-off-by: Harry Mellor <19981378+hmellor@users.noreply.github.com> Signed-off-by: Xiao Yu <xiao.yu@amd.com>
1 parent e698e2b commit 0a60424

File tree

4 files changed

+72
-59
lines changed

4 files changed

+72
-59
lines changed

docs/mkdocs/hooks/generate_argparse.py

Lines changed: 40 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,59 @@
11
# SPDX-License-Identifier: Apache-2.0
22
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3+
import importlib
34
import logging
45
import sys
56
from argparse import SUPPRESS, HelpFormatter
67
from pathlib import Path
78
from typing import Literal
89
from unittest.mock import MagicMock, patch
910

11+
from pydantic_core import core_schema
12+
13+
logger = logging.getLogger("mkdocs")
14+
1015
ROOT_DIR = Path(__file__).parent.parent.parent.parent
1116
ARGPARSE_DOC_DIR = ROOT_DIR / "docs/argparse"
1217

1318
sys.path.insert(0, str(ROOT_DIR))
14-
sys.modules["aiohttp"] = MagicMock()
15-
sys.modules["blake3"] = MagicMock()
1619
sys.modules["vllm._C"] = MagicMock()
1720

18-
from vllm.benchmarks import latency # noqa: E402
19-
from vllm.benchmarks import serve # noqa: E402
20-
from vllm.benchmarks import throughput # noqa: E402
21-
from vllm.engine.arg_utils import AsyncEngineArgs, EngineArgs # noqa: E402
22-
from vllm.entrypoints.cli.openai import ChatCommand # noqa: E402
23-
from vllm.entrypoints.cli.openai import CompleteCommand # noqa: E402
24-
from vllm.entrypoints.openai import cli_args # noqa: E402
25-
from vllm.entrypoints.openai import run_batch # noqa: E402
26-
from vllm.utils import FlexibleArgumentParser # noqa: E402
2721

28-
logger = logging.getLogger("mkdocs")
22+
class PydanticMagicMock(MagicMock):
23+
"""`MagicMock` that's able to generate pydantic-core schemas."""
24+
25+
def __get_pydantic_core_schema__(self, source_type, handler):
26+
return core_schema.any_schema()
27+
28+
29+
def auto_mock(module, attr, max_mocks=50):
30+
"""Function that automatically mocks missing modules during imports."""
31+
logger.info("Importing %s from %s", attr, module)
32+
for _ in range(max_mocks):
33+
try:
34+
# First treat attr as an attr, then as a submodule
35+
return getattr(importlib.import_module(module), attr,
36+
importlib.import_module(f"{module}.{attr}"))
37+
except importlib.metadata.PackageNotFoundError as e:
38+
raise e
39+
except ModuleNotFoundError as e:
40+
logger.info("Mocking %s for argparse doc generation", e.name)
41+
sys.modules[e.name] = PydanticMagicMock()
42+
43+
raise ImportError(
44+
f"Failed to import {module}.{attr} after mocking {max_mocks} imports")
45+
46+
47+
latency = auto_mock("vllm.benchmarks", "latency")
48+
serve = auto_mock("vllm.benchmarks", "serve")
49+
throughput = auto_mock("vllm.benchmarks", "throughput")
50+
AsyncEngineArgs = auto_mock("vllm.engine.arg_utils", "AsyncEngineArgs")
51+
EngineArgs = auto_mock("vllm.engine.arg_utils", "EngineArgs")
52+
ChatCommand = auto_mock("vllm.entrypoints.cli.openai", "ChatCommand")
53+
CompleteCommand = auto_mock("vllm.entrypoints.cli.openai", "CompleteCommand")
54+
cli_args = auto_mock("vllm.entrypoints.openai", "cli_args")
55+
run_batch = auto_mock("vllm.entrypoints.openai", "run_batch")
56+
FlexibleArgumentParser = auto_mock("vllm.utils", "FlexibleArgumentParser")
2957

3058

3159
class MarkdownFormatter(HelpFormatter):

requirements/docs.txt

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,6 @@ ruff
1414
# Required for argparse hook only
1515
-f https://download.pytorch.org/whl/cpu
1616
cachetools
17-
cbor2
18-
cloudpickle
19-
fastapi
2017
msgspec
21-
openai
22-
openai-harmony
23-
partial-json-parser
24-
pillow
25-
psutil
26-
pybase64
2718
pydantic
28-
setproctitle
2919
torch
30-
transformers
31-
zmq
32-
uvloop
33-
prometheus-client

vllm/sequence.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,17 @@
1616
import torch
1717

1818
from vllm.inputs import SingletonInputs
19-
from vllm.lora.request import LoRARequest
2019
from vllm.multimodal import MultiModalKwargs, MultiModalPlaceholderDict
2120
from vllm.pooling_params import PoolingParams
2221
from vllm.sampling_params import RequestOutputKind, SamplingParams
2322

2423
if TYPE_CHECKING:
24+
from vllm.lora.request import LoRARequest
2525
from vllm.v1.worker.kv_connector_model_runner_mixin import (
2626
KVConnectorOutput)
27+
else:
28+
LoRARequest = Any
29+
KVConnectorOutput = Any
2730

2831
VLLM_TOKEN_ID_ARRAY_TYPE = "l"
2932

@@ -1138,7 +1141,7 @@ class IntermediateTensors:
11381141
"""
11391142

11401143
tensors: dict[str, torch.Tensor]
1141-
kv_connector_output: Optional["KVConnectorOutput"]
1144+
kv_connector_output: Optional[KVConnectorOutput]
11421145

11431146
def __init__(self, tensors):
11441147
# manually define this function, so that

vllm/transformers_utils/config.py

Lines changed: 27 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,6 @@
2727

2828
from vllm import envs
2929
from vllm.logger import init_logger
30-
# yapf conflicts with isort for this block
31-
# yapf: disable
32-
from vllm.transformers_utils.configs import (ChatGLMConfig, DeepseekVLV2Config,
33-
EAGLEConfig, JAISConfig,
34-
KimiVLConfig, MedusaConfig,
35-
MLPSpeculatorConfig,
36-
Nemotron_Nano_VL_Config,
37-
NemotronConfig, OvisConfig,
38-
RWConfig, SpeculatorsConfig,
39-
Step3TextConfig, Step3VLConfig,
40-
UltravoxConfig)
41-
# yapf: enable
42-
from vllm.transformers_utils.configs.mistral import adapt_config_dict
4330
from vllm.transformers_utils.utils import check_gguf_file
4431

4532
if envs.VLLM_USE_MODELSCOPE:
@@ -67,24 +54,31 @@ def _get_hf_token() -> Optional[str]:
6754
return None
6855

6956

70-
_CONFIG_REGISTRY: dict[str, type[PretrainedConfig]] = {
71-
"chatglm": ChatGLMConfig,
72-
"deepseek_vl_v2": DeepseekVLV2Config,
73-
"kimi_vl": KimiVLConfig,
74-
"Llama_Nemotron_Nano_VL": Nemotron_Nano_VL_Config,
75-
"RefinedWeb": RWConfig, # For tiiuae/falcon-40b(-instruct)
76-
"RefinedWebModel": RWConfig, # For tiiuae/falcon-7b(-instruct)
77-
"jais": JAISConfig,
78-
"mlp_speculator": MLPSpeculatorConfig,
79-
"medusa": MedusaConfig,
80-
"eagle": EAGLEConfig,
81-
"speculators": SpeculatorsConfig,
82-
"nemotron": NemotronConfig,
83-
"ovis": OvisConfig,
84-
"ultravox": UltravoxConfig,
85-
"step3_vl": Step3VLConfig,
86-
"step3_text": Step3TextConfig,
87-
}
57+
class LazyConfigDict(dict):
58+
59+
def __getitem__(self, key):
60+
import vllm.transformers_utils.configs as configs
61+
return getattr(configs, super().__getitem__(key))
62+
63+
64+
_CONFIG_REGISTRY: dict[str, type[PretrainedConfig]] = LazyConfigDict(
65+
chatglm="ChatGLMConfig",
66+
deepseek_vl_v2="DeepseekVLV2Config",
67+
kimi_vl="KimiVLConfig",
68+
Llama_Nemotron_Nano_VL="Nemotron_Nano_VL_Config",
69+
RefinedWeb="RWConfig", # For tiiuae/falcon-40b(-instruct)
70+
RefinedWebModel="RWConfig", # For tiiuae/falcon-7b(-instruct)
71+
jais="JAISConfig",
72+
mlp_speculator="MLPSpeculatorConfig",
73+
medusa="MedusaConfig",
74+
eagle="EAGLEConfig",
75+
speculators="SpeculatorsConfig",
76+
nemotron="NemotronConfig",
77+
ovis="OvisConfig",
78+
ultravox="UltravoxConfig",
79+
step3_vl="Step3VLConfig",
80+
step3_text="Step3TextConfig",
81+
)
8882

8983
_CONFIG_ATTRS_MAPPING: dict[str, str] = {
9084
"llm_config": "text_config",
@@ -461,6 +455,8 @@ def get_config(
461455
model, revision, **kwargs)
462456
config_dict["max_position_embeddings"] = max_position_embeddings
463457

458+
from vllm.transformers_utils.configs.mistral import adapt_config_dict
459+
464460
config = adapt_config_dict(config_dict)
465461

466462
# Mistral configs may define sliding_window as list[int]. Convert it

0 commit comments

Comments
 (0)