# PR #40640 完整报告

- 仓库：`vllm-project/vllm`
- 标题：[Refactor] Remove unused dead code
- 合并时间：2026-04-25 07:28
- 原文链接：http://prhub.com.cn/vllm-project/vllm/pull/40640

---

# 执行摘要

- 一句话：移除四个文件中的无用死代码
- 推荐动作：该 PR 是标准代码清理，值得快速合并。建议开发者关注其移除参数的决策逻辑，可借鉴其模式用于类似清理。

# 功能与动机

PR body 明确说明目的为 'Remove unused dead code'，源于作者 yewentao256 对代码库的清理需求，未关联具体 Issue。

# 实现拆解

1. **batch_invariant.py**: 移除 `_compute_pid` 函数的 `NUM_SMS` 参数，该参数在函数体内未被使用（仅传入后未参与计算），同时更新所有调用点，删除对应参数传递。
2. **gpu/dp_utils.py**: 删除函数 `make_num_tokens_across_dp`，因该函数已无调用方（其功能已由 `coordinate_batch_across_dp` 中的 `_post_process_dp_padding` 替代）。
3. **dp_utils.py**: 移除未使用的 `import numpy as np` 和 `coordinate_batch_across_dp` 的参数 `num_scheduled_tokens_per_request`（该参数在函数体内未被使用），并更新调用处。
4. **gpu_model_runner.py**: 移除 `_bookkeeping_sync` 的未用参数 `spec_decode_metadata`、`coordinate_batch_across_dp` 调用中的 `num_scheduled_tokens_per_request` 参数，以及 `_reshape_kv_cache_tensors` 的未用参数 `kv_cache_config`，并更新所有调用点。

无测试、配置或部署配套改动。

关键文件：
- `vllm/model_executor/layers/batch_invariant.py`（模块 内核；类别 source；类型 data-contract；符号 _compute_pid）: 修改了 Triton JIT 函数 `_compute_pid` 的签名，移除未用参数 `NUM_SMS`，并更新了所有调用点。
- `vllm/v1/worker/gpu/dp_utils.py`（模块 数据并行；类别 source；类型 core-logic；符号 make_num_tokens_across_dp）: 删除了未使用的辅助函数 `make_num_tokens_across_dp`，该函数已被内联到其他逻辑中。
- `vllm/v1/worker/dp_utils.py`（模块 数据并行；类别 source；类型 dependency-wiring）: 移除了未使用的 `numpy` 导入和函数参数 `num_scheduled_tokens_per_request`。
- `vllm/v1/worker/gpu_model_runner.py`（模块 模型运行器；类别 source；类型 data-contract）: 移除了 `_bookkeeping_sync` 的 `spec_decode_metadata` 参数和 `_reshape_kv_cache_tensors` 的 `kv_cache_config` 参数，以及 `coordinate_batch_across_dp` 调用中的 `num_scheduled_tokens_per_request`。

关键符号：_compute_pid, make_num_tokens_across_dp, coordinate_batch_across_dp, _bookkeeping_sync, _reshape_kv_cache_tensors

## 关键源码片段

### `vllm/model_executor/layers/batch_invariant.py`

修改了 Triton JIT 函数 `_compute_pid` 的签名，移除未用参数 `NUM_SMS`，并更新了所有调用点。

```python
# 文件 : vllm/model_executor/layers/batch_invariant.py

@triton.jit
def _compute_pid(tile_id, num_pid_in_group, num_pid_m, GROUP_SIZE_M):
    # 移除 NUM_SMS 参数，因为它在函数体内从未被使用
    group_id = tile_id // num_pid_in_group
    first_pid_m = group_id * GROUP_SIZE_M
    group_size_m = min(num_pid_m - first_pid_m, GROUP_SIZE_M)
    pid_m = first_pid_m + (tile_id % group_size_m)
    pid_n = (tile_id % num_pid_in_group) // group_size_m
    return pid_m, pid_n

```
（其余调用点对应移除 `NUM_SMS` 参数传递）

# 评论区精华

主要讨论集中在 `batch_invariant.py` 中移除 `NUM_SMS` 参数的安全性。`gemini-code-assist[bot]` 指出这可能引起 Triton 内核运行时错误，但作者和审核者 `DarkLight1337` 确认该参数在函数体内确实未使用，移除是安全的。另一讨论涉及 `config/utils.py` 中 deprecation helper 的保留，DarkLight1337 建议保留以应对未来需要，作者已回滚该文件的变更。

- batch_invariant.py 中移除 NUM_SMS 参数的安全性 (correctness): 经审核确认 NUM_SMS 在函数体内未被使用，移除安全。DarkLight1337 批准。
- config/utils.py 中 deprecation helper 是否应保留 (design): 作者 yewentao256 同意并回滚了 config/utils.py 的变更。

# 风险与影响

- 风险：**主要风险**：`_compute_pid` 的签名变更可能被外部代码（如动态调用的 Trition kernel）依赖，但经审核确认参数未使用，风险极低。**次要风险**：重构过程中可能误删实际需要的参数导入，但通过代码审查已消除。**兼容性**：本次变更仅移除未使用代码，不改变现有行为，无向后兼容风险。
- 影响：**对用户**：无直接影响。**对系统**：代码库减少约 22 行，无性能或功能变化。**对团队**：降低未来维护负担，提升代码可读性。影响范围小，仅限于修改的四个文件。
- 风险标记：Triton 内核签名变更 , 无测试覆盖

# 关联脉络

- PR #40631 [Refactor] Unify 2D/3D kernels in triton_unified_attention: 同为重构任务，清理和统一内核代码，体现了 vllm 代码库持续重构的趋势。
- PR #40794 [Bugfix][MoE] Unpad routed output before shared expert add: 虽为 bugfix，但也涉及函数参数清理（如去掉多余的 padding 逻辑），与本次 PR 的清理方向一致。