# PR #49244 完整报告

- 仓库：`vllm-project/vllm`
- 标题：[Misc] Remove old now unsupported `max_num_partial_prefills` and `max_long_partial_prefills`
- 合并时间：2026-07-21 16:52
- 原文链接：http://prhub.com.cn/vllm-project/vllm/pull/49244

---

# 执行摘要

- 一句话：移除过期的预填配置字段
- 推荐动作：值得合并，清理遗留的死代码可以减少 API 误导。建议在 release notes 中注明这两个 CLI 参数已被移除。

# 功能与动机

PR 说明这些字段是 V0/V1 混合期遗留的产物，在 V1 中从未被启用（#13726 明确拒绝），V0 移除后成为死配置，只能触发 UnsupportedFeatureError。清理它们可以减小 API 面、降低用户疑惑。

# 实现拆解

1. **删除字段定义和校验**：在 `vllm/config/scheduler.py` 的 `SchedulerConfig` 中移除 `max_num_partial_prefills` 和 `max_long_partial_prefills` 两个字段，并删除 `__post_init__` 和 `verify_max_model_len` 中相关的条件逻辑和校验。
2. **清理 CLI 参数**：在 `vllm/engine/arg_utils.py` 的 `EngineArgs` 中移除对应的类属性、`add_cli_args` 中的两个 `--max-num-partial-prefills` 和 `--max-long-partial-prefills` 参数注册，以及在 `create_engine_config` 中向 `SchedulerConfig` 传递这两个参数的代码。
3. **移除禁止检查**：删除 `_check_feature_supported` 中针对这两个字段的非默认值检查（`_raise_unsupported_error`）。
4. **调整测试**：在 `tests/lora/test_worker.py` 中移除 `SchedulerConfig` 构造函数中 `max_num_partial_prefills=32` 的传参（因为字段已不存在）。
5. **无功能变化**：由于这些字段此前已无实际使用者，变更不会影响现有行为。

关键文件：
- `vllm/config/scheduler.py`（模块 调度器配置；类别 source；类型 core-logic；符号 SchedulerConfig, verify_max_model_len）: 核心配置文件，移除了两个字段及相关校验逻辑，是主要变更所在。
- `vllm/engine/arg_utils.py`（模块 引擎参数；类别 source；类型 core-logic；符号 EngineArgs, add_cli_args, create_engine_config, _check_feature_supported）: 引擎参数字典，移除了两个 CLI 参数的定义、注册和传递逻辑。
- `tests/lora/test_worker.py`（模块 测试；类别 test；类型 test-coverage）: 测试文件中移除了已删除字段的传参。

关键符号：verify_max_model_len, create_engine_config, _check_feature_supported, add_cli_args

## 关键源码片段

### `vllm/config/scheduler.py`

核心配置文件，移除了两个字段及相关校验逻辑，是主要变更所在。

```python
# 删除的字段（原位置约在第 70-78 行）：
# max_num_partial_prefills: int = Field(default=1, ge=1)
# max_long_partial_prefills: int = Field(default=1, ge=1)

# __post_init__ 中删除的块（原位置约在第 257-268 行）：
# if self.max_num_partial_prefills > 1:
# if self.long_prefill_token_threshold == 0:
# self.long_prefill_token_threshold = int(max_model_len * 0.04)
# logger.info("...")

# verify_max_model_len 中删除的校验（原位置约在第 298-311 行）：
# if self.max_num_partial_prefills > 1:
# if not self.enable_chunked_prefill:
# raise ValueError(...)
# if self.long_prefill_token_threshold > max_model_len:
# raise ValueError(...)
# if self.max_long_partial_prefills > self.max_num_partial_prefills:
# raise ValueError(...)

```

# 评论区精华

评论中 `noooop` 表示虽然个人认为该功能有用，但既然长期未重新启用，同意删除这两个配置字段。无其他争论。

- 功能是否应保留 (design): 同意删除两个配置字段。

# 风险与影响

- 风险：风险极低。这些字段在 V1 中已无消费者，仅作为死参数存在。删除后，任何尝试使用它们的代码会直接报属性错误，而非静默忽略，反而更清晰。
- 影响：直接影响：使用 `--max-num-partial-prefills` 或 `--max-long-partial-prefills` CLI 参数的用户会收到 argparse 错误。间接影响：清理代码库，降低维护成本。
- 风险标记：CLI 参数移除 , 向后兼容性

# 关联脉络

- PR #13726 [V1] Add oracle for V0-V1 decisions: PR body 提及该 PR 明确拒绝了 V1 中的这些字段，导致它们成为死代码。