Prhub

#52578 [CI/Build] Fix accident pre-commit breakage due to concurrent merge

原始 PR 作者 Isotr0py 合并时间 2026-08-17 14:40 文件变更 1 提交数 1 评论 2 代码增减 +1 / -2

执行摘要

修复并发合并导致 ColPali 测试 pre-commit 破坏

并发合并的 #52565(避免在 ROCm 上强制 FlashAttention)与 #52570(减少测试 runner 启动)同时改动了 tests/models/multimodal/pooling/test_colpali.py。合入后 attention_backend 的定义落错位置:变量在 _run_multimodal_text_query_image_docs_test 辅助函数里定义了却从未被使用(死变量),而测试函数 test_colpali_v2_multimodal_text_query_image_docs 中引用该变量时无法解析,触发了 pre-commit 检查失败。PR body 明确指出目的就是修复这次意外 breakage。

变更量极小、逻辑直白,不值得精读,但可作为并发 PR 合并导致测试文件破坏的警示案例:当多个 PR 同时重构同一测试文件时,应留意合入顺序与合并结果一致性。若要了解 ColPali 测试结构及平台分支写法,可顺带阅读该文件的 V2 pooling 测试段落。

讨论亮点

本 PR 几乎没有实质性 review 讨论:claude[bot] 因 fork 来源自动跳过审查(提示维护者可评论 @claude review 触发),DarkLight1337 直接批准且无评论。核心决策隐含在 diff 中——保留 #52565 的平台分支逻辑,只修正变量位置,未改变任何测试行为。

实现拆解

  1. 从 _run_multimodal_text_query_image_docs_test 辅助函数中删除 attention_backend = "FLASH_ATTN" if current_platform.is_cuda() else None:该赋值在函数内部从未被使用,属于并发合并冲突遗留的死代码,同时它引入的平台判断本应属于测试函数的参数配置。
  2. 在 test_colpali_v2_multimodal_text_query_image_docs 测试函数开头(monkeypatch.setenv 之后)重新添加 attention_backend 赋值,并作为 attention_backend 形参传给 vllm_runner:CUDA 上强制 FlashAttention 后端,保留 #52565 的回归覆盖意图;ROCm 等平台则让 vLLM 自行选择默认后端,避免重蹈 MI300/MI355 上的 CI 失败。
  3. 无新增测试、配置或部署配套变更;仅 1 个文件 3 行内微调,合并后触发 Buildkite CI #84159 验证。
文件 模块 状态 重要度
tests/models/multimodal/pooling/test_colpali.py 池化测试 modified 3.89

关键符号

_run_multimodal_text_query_image_docs_test test_colpali_v2_multimodal_text_query_image_docs

关键源码片段

tests/models/multimodal/pooling/test_colpali.py bugfix

唯一变更文件:修复并发合并导致的 attention_backend 变量错位,恢复 pre-commit 检查通过。

# tests/models/multimodal/pooling/test_colpali.py
​
def _run_multimodal_text_query_image_docs_test(vllm_model: VllmRunner) -> None:
    """通过多模态路径对图片文档进行文本 query 打分。"""
    red_image = _make_base64_image(64, 64, color=(255, 0, 0))
    blue_image = _make_base64_image(64, 64, color=(0, 0, 255))
​
    query = "Describe the red object"
    image_docs = [
        _make_image_mm_param(red_image),
        _make_image_mm_param(blue_image),
    ]
    # 修复后这里不再定义 attention_backend:
    # 并发合并 #52565 与 #52570 曾把该变量误留在此函数内成为死变量,
    # 而真正需要它的测试函数反而引用未定义变量,导致 pre-commit 失败。
​
    scores = vllm_model.llm.score(query, image_docs)
    assert len(scores) == 2
    for s in scores:
        assert isinstance(s.outputs.score, float)
​
​
@pytest.mark.parametrize("model", MODELS)
@pytest.mark.parametrize("dtype", [DTYPE])
def test_colpali_v2_multimodal_text_query_image_docs(
    vllm_runner,
    monkeypatch: pytest.MonkeyPatch,
    model: str,
    dtype: str,
) -> None:
    """V2 model runner 下验证多模态文本 query 与图片 docs 的打分结果。"""
    monkeypatch.setenv("VLLM_USE_V2_MODEL_RUNNER", "1")
    # 仅在 CUDA 上强制 FlashAttention 后端,保留 #52565 的平台分支语义;
    # ROCm 等平台让 vLLM 自行选择默认后端,避免重蹈 MI300/MI355 上的 CI 失败。
    attention_backend = "FLASH_ATTN" if current_platform.is_cuda() else None
    with vllm_runner(
        model,
        runner="pooling",
        dtype=dtype,
        max_model_len=4096,
        enforce_eager=True,
        gpu_memory_utilization=GPU_MEMORY_UTILIZATION,
        attention_backend=attention_backend,
        kernel_config={"enable_flashinfer_autotune": False},
    ) as vllm_model:
        assert vllm_model.llm.llm_engine.vllm_config.use_v2_model_runner
        _run_multimodal_text_query_image_docs_test(vllm_model)

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

风险极低。变更仅限于测试文件内的变量位置调整,未触碰任何源码路径或生产逻辑。需注意的兼容性点:一是删除辅助函数内的死变量后,当前无其他调用方依赖该局部变量;二是该文件近期被 #52050、#52565、#52570 连续修改,后续若再做大规模重构或与其他并发 PR 合入,仍可能出现同类错位,建议合入顺序上留意该文件的并发冲突。

影响面限于 ColPali 池化测试的 V2 model runner 用例:CUDA 上维持 FlashAttention 强制覆盖,ROCm 等平台恢复默认 attention 后端选择,修复 pre-commit 门禁并避免重新引入 #52565 已修复的 AMD CI 失败。对用户无影响,对团队的影响是恢复正常 CI 流水线,成本是一次极小的测试文件修正。

并发合并回归 仅测试文件变更

关联 Issue

#52565 [ROCm][CI] Avoid forcing FlashAttention in the ColPali pooling test
#52570 [CI/Build] Reduce more duplicate runner startup in tests

完整报告

参与讨论