Prhub

#54023 [Bugfix] Revert renderer warmup overlap to avoid fork deadlock

原始 PR 作者 khluu 合并时间 2026-08-28 07:36 文件变更 4 提交数 1 评论 7 代码增减 +24 / -345

执行摘要

回退 renderer 背景 warmup,修复 fork 死锁

PR body 明确指出 main build #85765 在 H200 和 MI300 的 multi-modal-models-standard-4-other-whisper 任务中复现了同样的启动挂起:test_moss_audio_generation_smoke 在解析 MossAudioModel 后无进展直到超时。捕获的堆栈显示渲染器 warmup worker 正在 Whisper 频谱预处理中,而主线程正卡在 multiprocessing.popen_fork 启动 engine-core 进程——这是 #52764 引入的不安全重叠:活着的 Python 后台线程在 fork 时执行多模态处理器工作。andyxning 也指出"This hung seems to be only in offline mode and is related with multiprocess mode fork"。

实现拆解

  1. 核心源码路径
    - vllm/renderers/base.py(dependency-wiring):源码主路径;涉及符号 warmup_mm, start_mm_warmup_in_background, _join_mm_warmup;包含 导入关系调整、控制流调整、配置键调整;+24/-116;关键符号:warmup_mm, start_mm_warmup_in_background, _join_mm_warmup
    - vllm/v1/engine/async_llm.py(core-logic):源码主路径;+0/-17;以 core-logic 为主
    - vllm/v1/engine/llm_engine.py(core-logic):源码主路径;+0/-17;以 core-logic 为主

  2. 测试与验证
    - tests/renderers/test_warmup.py(test-coverage):测试配套;涉及符号 TestChatWarmupDispatched, test_render_chat_called_with_warmup_message, TestWarmupFaultIsolation, test_chat_failure_does_not_abort_mm_warmup;包含 测试覆盖调整、导入关系调整、控制流调整;+0/-195;关键符号:TestChatWarmupDispatched, test_render_chat_called_with_warmup_message, TestWarmupFaultIsolation, test_chat_failure_does_not_abort_mm_warmup

文件 模块 状态 重要度
vllm/renderers/base.py 渲染器 modified 8.23

关键符号

warmup_mm start_mm_warmup_in_background _join_mm_warmup warmup

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

评论区精华

CI 失败是否与 #52764 相关 question

DarkLight1337 指出 CI 步骤在 #54023 的 build 85606 中通过,要求 double check 失败是否真的相关,再继续 revert;andyxning 回应 OK。

结论:作者 khluu 提供了 H200/MI300 精确 build(85789/85790)全 lane 通过作为证据,确认回退有效。 · 已解决

挂起只在离线模式 fork 下出现 设计

andyxning 指出该挂起只在离线模式且与 multiprocess 模式 fork 相关;这与 #52764 的 background warmup 线程在 fork 时不安全重叠一致。

结论:确认根因是 fork 时存活的后台线程执行 Numba/Whisper 预处理导致死锁,回退是正确修复。 · 已解决

风险与影响

启动阶段死锁 fork 安全 后台线程并发 CI 稳定性 warmup 延迟回归

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论