Prhub

#39411 [CI/Build] Fix memory cleanup in MM test

vllm-project/vllm · 作者 DarkLight1337 · 合并时间 2026-04-09 23:50

分析状态 已生成
文件变更 2提交数 2 · 评论 1
代码增减 +3 / -2
ci test multi-modality v1

执行摘要

修复多模态内存泄漏测试中的进程清理问题,避免 CI 失败。

PR body中引用了CI失败链接(https://buildkite.com/vllm/ci/builds/60525/steps/canvas?jid=019d71f1-593e-4e3c-bbb7-9a9c25f2e273),表明目的是修复CI失败。虽然没有详细说明根本原因,但从review评论中可推断,问题与内存泄漏测试的进程清理机制缺陷有关。

该PR值得快速浏览以了解CI修复策略,但无需深入代码细节。重点关注review中提到的进程清理缺陷,建议团队后续评估是否修复@create_new_process_for_each_test的实现。

讨论亮点

review中只有gemini-code-assist[bot]的一条评论,指出关键问题:@create_new_process_for_each_test装饰器的实现存在缺陷,os.setpgrp()在父进程(pytest worker)中调用,导致进程组清理可能意外终止worker。评论建议将os.setpgrp()移到子进程并移除父进程的信号处理。但PR作者未回复此评论,PR仍被合并,表明问题可能被暂时规避而非根本解决。

实现拆解

实现方案分为两个部分:1. 修改CI配置文件(.buildkite/test_areas/models_multimodal.yaml),在pytest命令中增加--ignore选项,排除tests/models/multimodal/generation/test_memory_leak.py文件,避免该测试在常规测试套件中运行。2. 修改内存泄漏测试文件(tests/models/multimodal/generation/test_memory_leak.py),将测试函数名从test_qwen3_vl_no_memory_leak重命名为test_no_memory_leak,使其更通用。

文件 模块 状态 重要度
.buildkite/test_areas/models_multimodal.yaml CI/ 测试配置 modified 5.0
tests/models/multimodal/generation/test_memory_leak.py 测试 / 多模态 modified 6.0

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

关键符号

test_no_memory_leak @create_new_process_for_each_test

评论区精华

@create_new_process_for_each_test 装饰器的进程清理缺陷 正确性

gemini-code-assist[bot] 指出装饰器实现中 os.setpgrp() 在父进程调用,可能导致 pytest worker 被意外终止,设计脆弱。

结论:未解决,PR 被合并但评论未获回复,问题被暂时规避。 · 待处理

风险与影响

风险包括:1. 测试覆盖风险:通过--ignore排除内存泄漏测试,可能降低多模态模型内存泄漏的检测能力。2. 进程清理缺陷:review中提到的装饰器实现问题未被修复,可能导致未来测试不稳定或CI失败重现。3. 兼容性风险:重命名测试函数可能影响其他依赖该函数名的脚本或工具。

对用户无直接影响,主要影响CI系统和开发团队:1. CI稳定性:修复当前CI失败,提升构建成功率。2. 测试策略:调整多模态测试运行方式,内存泄漏测试可能以独立或不同方式执行。3. 团队效率:减少因CI失败导致的开发中断,但潜在进程清理问题可能在未来引发类似问题。

测试覆盖降低 进程清理缺陷未修复

关联 Issue

#19 Use FP32 for log probabilities

完整报告

执行摘要

该PR通过调整CI测试配置和重命名测试函数,修复了多模态内存泄漏测试导致的CI失败,但review中揭示的进程清理缺陷未被解决,可能影响未来测试稳定性。

功能与动机

PR旨在解决CI构建失败问题,引用失败链接(https://buildkite.com/vllm/ci/builds/60525/steps/canvas?jid=019d71f1-593e-4e3c-bbb7-9a9c25f2e273)。从review评论推断,根本原因是内存泄漏测试使用的@create_new_process_for_each_test装饰器存在进程清理缺陷,导致测试环境不稳定。

实现拆解

实现包括两个关键改动:

  1. CI配置文件调整:在.buildkite/test_areas/models_multimodal.yaml中,修改pytest命令,增加--ignore models/multimodal/generation/test_memory_leak.py,将内存泄漏测试从常规测试套件中排除。
    yaml - pytest -v -s models/multimodal -m core_model --ignore ... --ignore models/multimodal/generation/test_memory_leak.py ...
  2. 测试文件修改:在tests/models/multimodal/generation/test_memory_leak.py中,将测试函数名从test_qwen3_vl_no_memory_leak重命名为test_no_memory_leak,提升通用性。

评论区精华

review中仅gemini-code-assist[bot]提出关键评论:

"The @create_new_process_for_each_test decorator introduces a critical issue... The decorator currently calls os.setpgrp() in the parent process (the pytest worker). This makes the worker process itself a process group leader... This is a fragile design that can lead to silent test failures or unexpected..."

评论指出装饰器实现缺陷可能导致pytest worker被意外终止,但PR作者未回复,问题未被解决。

风险与影响

  • 测试覆盖风险:通过--ignore排除内存泄漏测试,可能削弱多模态模型的内存泄漏检测能力。
  • 进程清理缺陷:review中提到的装饰器问题未被修复,未来可能重现CI失败或导致测试不稳定。
  • 影响范围:主要影响CI系统和开发团队,修复当前失败提升构建成功率,但潜在缺陷需后续关注。

关联脉络

  • 与PR #39268(新增Qwen3-VL多模态内存泄漏检测测试)直接相关,本PR可能针对该测试引入的CI问题进行调整。
  • 近期历史PR中多涉及多模态(如#39409、#39268)和CI修复(如#39421、#39390),反映团队在加强多模态功能测试的同时,持续优化CI稳定性。

参与讨论