Prhub

#52565 [ROCm][CI] Avoid forcing FlashAttention in the ColPali pooling test

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

执行摘要

修复 ColPali 测试在 ROCm 上强制 FlashAttention 导致的 CI 失败

PR #52050 添加了 CUDA 特定的强制 FLASH_ATTN 配置到跨平台 ColPali 测试,导致 MI300 和 MI355 上的 CI 失败,因为 ROCm 有意不报告 FlashAttention 版本。本 PR 保留 CUDA 回归覆盖,同时允许 ROCm 选择其支持的注意力后端。

值得快速阅读,作为一个典型的跨平台测试修复案例:当引入平台特定的测试配置时,应使用 current_platform 进行条件判定,避免阻塞其他硬件平台。后续若有类似测试,建议遵循此模式。

讨论亮点

该 PR 无实质性评审讨论。noooop 直接批准(APPROVED),claude[bot] 仅自动提醒手动 review 配置。唯一值得留意的是作者在 Issue 评论中说明了 CI 测试已通过。

实现拆解

  1. 在 tests/models/multimodal/pooling/test_colpali.py 中导入 current_platform(from vllm.platforms import current_platform),用于运行时平台判断。
  2. 在 _run_multimodal_text_query_image_docs_test 内新增变量 attention_backend,仅当 current_platform.is_cuda() 为真时赋值为 "FLASH_ATTN",否则为 None。
  3. 将传给 vllm_runner 的参数从硬编码 "FLASH_ATTN" 改为该变量,使非 CUDA 平台(如 ROCm)走默认后端选择逻辑。

该改动仅涉及测试文件,无产品代码变更,也未新增测试用例。

文件 模块 状态 重要度
tests/models/multimodal/pooling/test_colpali.py 池化测试 modified 4.37

关键符号

_run_multimodal_text_query_image_docs_test

关键源码片段

tests/models/multimodal/pooling/test_colpali.py test-coverage

唯一变更文件,通过平台条件选择注意力后端,修复 ROCm CI 失败,同时保留 CUDA 回归覆盖。

# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
"""Tests for ColPali late interaction model for multi-modal retrieval.
​
ColPali is a multi-vector retrieval model based on PaliGemma backbone
(SigLIP + Gemma) with ColBERT-style late interaction scoring (MaxSim).
It produces per-token embeddings for both text and image inputs.
"""
​
from io import BytesIO
​
import pybase64 as base64
import pytest
import torch
from PIL import Image
​
from vllm.entrypoints.chat_utils import (
    ChatCompletionContentPartImageParam,
    ChatCompletionContentPartTextParam,
)
from vllm.entrypoints.pooling.scoring.typing import ScoreMultiModalParam
from vllm.platforms import current_platform
​
from ....conftest import VllmRunner
​
# ... 省略其他测试辅助函数 ...
​
def _run_multimodal_text_query_image_docs_test(
    vllm_runner: type[VllmRunner],
    model: str,
    *,
    dtype: str,
) -> None:
    """Score a text query against image documents via the multimodal path."""
    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),
    ]
    # 仅 CUDA 平台强制使用 FlashAttention 后端,ROCm 等平台使用默认后端
    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:
        # 确保运行在 V2 model runner 上,验证新路径
        assert vllm_model.llm.llm_engine.vllm_config.use_v2_model_runner
        scores = vllm_model.llm.score(query, image_docs)
​
        assert len(scores) == 2
        for s in scores:
            assert isinstance(s.outputs.score, float)

评论区精华

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

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

风险与影响

风险极低,仅涉及测试代码。主要潜在风险:若存在既非 CUDA 也非 ROCm 的平台(如 XPU、CPU)运行此测试,attention_backend 将为 None,依赖默认后端;若默认后端不支持该模型,可能引入新的失败,但该测试原先在这些平台上也可能因强制 FlashAttention 失败,因此整体修复方向正确。此外,current_platform.is_cuda() 的语义在虚拟化环境下可能需留意,但 vLLM 内部已处理。

影响范围限于 tests/models/multimodal/pooling/test_colpali.py 单个测试文件。修复了 ROCm 平台(MI300、MI355)上该测试的 CI 失败,同时保持 CUDA 上的回归覆盖。对产品运行、API 均无影响。

跨平台回归 仅测试变更

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论