Prhub

#48655 [CI/Build][The Rock][BugFix] Use fork method in test_multiproc_executor_multi_node for py 3.14 compat and fix test_multiproc_executor_shutdown_cleanup

原始 PR 作者 rasmith 合并时间 2026-07-22 04:40 文件变更 2 提交数 6 评论 19 代码增减 +19 / -5

执行摘要

修复分布式测试中 Python 3.14 兼容和 shutdown 变量错误

PR body 指出 distributed/test_multiproc_executor.py 存在多个问题:

1) test_multiproc_executor_multi_node 使用 multiprocessing 并尝试 pickle 嵌套函数,与 Python 3.14 的 forkserver 启动方法不兼容;
2) test_multiproc_executor_shutdown_cleanup 使用了不存在的函数 get_response_mqs 和错误的变量 shutdown_event(应为 shutting_down)。

本 PR 属于低风险的必要 bug 修复,建议合并。未来可关注 get_response_mqs 是否被更广泛使用,并考虑扩展 CI 测试范围以覆盖更多用例。

讨论亮点
  • 使用 fork 方法的向后兼容性:AndreasKaratzas 询问显式指定 fork 在 Python 3.12 上是否仍正常工作,rasmith 确认已在 3.12 容器中测试通过。
  • shutdown_event 不存在但上游 CI 通过的原因:rasmith 指出 CI 仅运行 test_multiproc_executor_multi_node 一个测试,而 test_multiproc_executor_shutdown_cleanup 未被触发,因此该 bug 此前未被捕捉。AndreasKaratzas 表示理解并最终批准合并。

实现拆解

  1. 新增 get_response_mqs 方法:在 vllm/v1/executor/multiproc_executor.pyMultiprocExecutor 类中添加 get_response_mqs(unique_reply_rank: int = -1) -> list[MessageQueue] 方法,提供根据 rank 获取对应 worker 响应队列的能力,替代测试中缺失的依赖。
  2. 修复 shutdown 测试断言:在 tests/distributed/test_multiproc_executor.py 中将 executor.shutdown_event.is_set() 改为 executor.shutting_down,匹配实际存在的布尔标志属性。
  3. 兼容 Python 3.14:在 test_multiproc_executor_multi_node 开头使用 multiprocessing.get_context("fork") 创建上下文对象,并将 QueueProcess 调用替换为上下文方法,确保嵌套函数可序列化。
  4. 精简变更范围:根据 review 建议,回退了前期提交中不必要的日志修改等无关变更,仅保留核心修复。
    配套测试:修改后执行 pytest -sv distributed/test_multiproc_executor.py 全部 10 个测试通过。
文件 模块 状态 重要度
vllm/v1/executor/multiproc_executor.py 执行器 modified 6.34
tests/distributed/test_multiproc_executor.py 测试 modified 4.35

关键符号

get_response_mqs

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

使用 fork 方法的向后兼容性 设计

AndreasKaratzas 询问显式设置 fork 是否在 Python 3.12 上也能正常工作,rasmith 确认已在 3.12 容器中测试通过。

结论:fork 方法向后兼容,无需额外处理。 · 已解决

shutdown_event 不存在但 CI 通过的原因 正确性

rasmith 指出 CI 仅运行 `test_multiproc_executor_multi_node` 单个测试,导致 `test_multiproc_executor_shutdown_cleanup` 使用的错误变量未被发现。AndreasKaratzas 表示理解并批准。

结论:修复验证一致,CI 测试覆盖存在缺口需改进。 · 已解决

风险与影响

  • 新增公共方法get_response_mqs 成为 MultiprocExecutor 的公开接口,如被其他组件调用可能产生依赖,但当前仅用于测试,风险低。
  • 测试覆盖缺口:CI 未运行所有测试用例,其他隐含缺陷可能未被发现,建议扩大 CI 测试范围。
  • 环境兼容性:显式指定 fork 在多线程环境或受限容器中可能有资源限制,但测试场景下与之前默认行为一致,风险可控。
  • 回归风险:变更仅涉及测试辅助方法和测试文件,未触及核心推理与调度逻辑,回归风险很小。
  • 对用户:无直接影响,修复目标为内部测试框架。
  • 对系统:提升了代码库对 Python 3.14 的兼容性,确保未来版本 CI 可正常执行分布式测试。
  • 对团队:明确了当前 CI 测试覆盖的不足,建议后续将更多测试加入自动运行。
测试覆盖缺口 公共接口新增 Python 3.14 兼容

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论