Prhub

#43759 [XPU]fallback to TRITON_ATTN for vit attn on xpu when use float32 dtype

原始 PR 作者 yma11 合并时间 2026-06-03 18:20 文件变更 1 提交数 4 评论 2 代码增减 +7 / -0

执行摘要

XPU 上 ViT 注意力 float32 回退到 Triton

XPU上的Flash Attention后端不支持float32 dtype,导致ViT注意力计算失败。PR测试计划使用whisper模型验证float32场景,需要确保正常执行。

值得合并,修复明确且风险低。变更简单,与现有设计一致,无测试配套(但已有integration测试覆盖)。

讨论亮点

Review过程中,jikunshang提出是否可以对float类型回退到triton attn;yma11回复已经确认普通attention路径对float32已有回退,仿照相同逻辑对ViT attention做同样的处理。最终jikunshang批准。

实现拆解

vllm/platforms/xpu.pyget_vit_attn_backend方法中,在原有backend参数处理逻辑之前增加一个早期返回分支:

  1. 检查dtype是否为torch.float32
  2. 如果是,记录一条警告日志提示回退,并直接返回AttentionBackendEnum.TRITON_ATTN
    该变更只涉及7行新增,0行删除,与已有正常attention路径(非ViT)中float32回退逻辑保持一致。
文件 模块 状态 重要度
vllm/platforms/xpu.py 平台适配 modified 4.83

关键符号

get_vit_attn_backend

关键源码片段

vllm/platforms/xpu.py core-logic

核心变更文件,在 get_vit_attn_backend 中增加 float32 dtype 的早期返回分支,实现 ViT 注意力回退逻辑。

# vllm/platforms/xpu.py
@classmethod
def get_vit_attn_backend(
    cls,
    head_size: int,
    dtype: torch.dtype,
    backend: "AttentionBackendEnum | None" = None,
) -> "AttentionBackendEnum":
    # 当 dtype 为 float32 时,Flash Attention 在 XPU 上不支持,
    # 需回退到 Triton Attention 后端,避免运行时崩溃
    if dtype == torch.float32:
        logger.warning_once(
            "Flash Attention on XPU does not support float32 dtype. "
            "Falling back to Triton Attention backend for vit attention."
        )
        return AttentionBackendEnum.TRITON_ATTN
​
    # 用户显式指定后端时的合法性校验
    if backend is not None:
        assert backend in cls.get_supported_vit_attn_backends(), (
            f"Backend {backend} is not supported for vit attention. "
            f"Supported backends are: "
            f"{cls.get_supported_vit_attn_backends()}."
        )
        logger.info_once(f"Using backend {backend} for vit attention")
        return backend
​
    # 默认使用 Flash Attention
    logger.info_once(
        f"Using backend {AttentionBackendEnum.FLASH_ATTN} for vit attention"
    )
    return AttentionBackendEnum.FLASH_ATTN

评论区精华

float32 回退到 Triton Attention 的可行性 设计

jikunshang 询问是否可以对 float 类型回退到 triton attn;yma11 确认普通 attention 路径已有相同回退逻辑,于是仿照实现。

结论:确定对 float32 dtype 回退到 Triton Attention,与现有做法一致。 · 已解决

风险与影响

风险较低。变更只影响XPU平台+float32 dtype的ViT注意力,且回退到已验证的Triton Attention后端。可能影响:若用户显式指定了FLASH_ATTN后端,但dtype为float32,则会忽略用户选择直接回退(但这是必要的,因为Flash不能处理float32)。不涉及其他平台或数据类型。

影响范围窄,仅XPU平台使用float32 dtype运行ViT注意力(如Whisper模型)时行为改变,从可能崩溃变为自动回退到Triton Attention。不会影响其他平台、其他dtype,或非ViT注意力场景。

无测试覆盖

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论