Prhub

#50826 [XPU] [Linear] enable torch linear backend for blockwise gemm on xpu

原始 PR 作者 zufangzhu 合并时间 2026-08-11 16:43 文件变更 2 提交数 10 评论 2 代码增减 +2 / -0

执行摘要

XPU 启用 torch 原生 FP8 block-wise GEMM 后端

PR body 明确写道:#49932 adds a native, dependency-free torch._scaled_mm block-wise FP8 backend. This pr enables the torch backend on xpu。目标是让 XPU 平台也能使用不依赖第三方库的原生 torch._scaled_mm 实现 FP8 block-wise GEMM,从而减少对自研 Triton 内核的依赖,并为 --linear-backend torch 提供一条可用的 XPU 路径。

值得快速浏览:改动极小,但展示了多平台内核候选表的扩展模式——如何把一个平台无关的原生后端挂接到特定平台的回退链上。建议关注两点:一是该内核在 XPU 上的验证充分性(后续可补充 kernels 层单元测试或更丰富的 E2E 覆盖);二是它与 XPUFp8BlockScaledMMKernel 在数值和性能上的对比,避免兜底路径被意外选为主路径。

讨论亮点

本 PR 来自 fork,claude[bot] 指出自动审查被禁用,维护者可通过 @claude review 手动触发单次审查;随后维护者 jikunshang 直接批准(APPROVED)。Issue 评论区仅触发了 Buildkite CI(/ci run → Buildkite CI #83306)。没有关于实现细节的实质技术讨论,也没有未解决的 review 评论。

实现拆解

  1. 内核候选表扩展:在 vllm/model_executor/kernels/linear/init.py 的 _POSSIBLE_FP8_BLOCK_KERNELS 中,于 PlatformEnum.XPU 列表末尾追加 BlockWiseTorchFP8ScaledMMLinearKernel。该表按优先级顺序排列内核,新增项放在 XPUFp8BlockScaledMMKernel 与 TritonFp8BlockScaledMMKernel 之后,作为补充/兜底候选,不会抢占既有优化内核,供 --linear-backend torch 或自动解析时选用。
  2. CI 覆盖:在 .buildkite/intel_jobs/test-intel.yaml 的 "XPU W8A8 FP8 Linear Examples" 步骤中新增一条命令:python3 examples/basic/offline_inference/generate.py --linear-backend torch --model Qwen/Qwen3-4B-Instruct-2507-FP8 --enforce-eager --max-model-len 4096。该步骤已有 xpu 与 torch 后端的混合覆盖,本次新增让 torch 后端在 XPU 上有了一个固定的端到端示例验证。
  3. 演进说明:从提交历史看,该 block-wise scaled_mm 后端先在 CUDA(Hopper)上完成开发与测试(含 "pad M on cuda" 的 M 维度 padding 处理,以及 "add test on hopper and limit cuda device"),再通过本 PR 扩展至 XPU。XPU 侧未新增专门单元测试,以 CI 示例命令作为覆盖。
文件 模块 状态 重要度
vllm/model_executor/kernels/linear/__init__.py 线性内核 modified 4.65
.buildkite/intel_jobs/test-intel.yaml CI 配置 modified 2.6

关键符号

_POSSIBLE_FP8_BLOCK_KERNELS

关键源码片段

vllm/model_executor/kernels/linear/__init__.py data-contract

核心变更文件:在 _POSSIBLE_FP8_BLOCK_KERNELS 的 XPU 分支中追加 BlockWiseTorchFP8ScaledMMLinearKernel,使 torch 后端在 XPU 平台可用,是本次 PR 的功能入口。

# 按平台维护的 FP8 block-wise 内核候选表,顺序即优先级(越靠前越优先)。
# 本 PR 为 XPU 追加了原生 torch._scaled_mm 实现,作为补充候选。
_POSSIBLE_FP8_BLOCK_KERNELS: dict[
    PlatformEnum, list[type[Fp8BlockScaledMMLinearKernel | FP8ScaledMMLinearKernel]]
] = {
    PlatformEnum.CUDA: [
        FlashInferFp8DeepGEMMDynamicBlockScaledKernel,
        DeepGemmFp8BlockScaledMMKernel,
        CutlassFp8BlockScaledMMKernel,
        MarlinFP8ScaledMMLinearKernel,
        TritonFp8BlockScaledMMKernel,
        HummingFP8ScaledMMLinearKernel,
        BlockWiseTorchFP8ScaledMMLinearKernel,
    ],
    # ROCm 与 CPU 分支省略,变更重点在 XPU
    PlatformEnum.XPU: [
        XPUFp8BlockScaledMMKernel, # XPU 自研优化内核,保持最高优先级
        TritonFp8BlockScaledMMKernel, # Triton 版本,作为第二候选
        BlockWiseTorchFP8ScaledMMLinearKernel, # 新增:torch._scaled_mm 原生实现,作兜底
    ],
}

评论区精华

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

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

风险与影响

  1. 候选内核顺序:新增项位于 XPU 列表末尾,不会抢占 XPUFp8BlockScaledMMKernel 与 TritonFp8BlockScaledMMKernel 的优先位置,回退语义变化可控。
  2. 验证覆盖有限:仅通过一个示例模型(Qwen3-4B-Instruct-2507-FP8)覆盖 torch 后端路径,缺少对动态 shape、多卡、长上下文等场景的测试;CUDA 侧曾需要 "pad M" 处理,XPU 上若 torch._scaled_mm 存在类似 shape 约束,可能在非对齐 shape 时报错。
  3. 行为影响面:BlockWiseTorchFP8ScaledMMLinearKernel 加入后,XPU 上所有 FP8 block-wise 量化模型的候选表都会包含它,可能使原本“找不到可用内核”的场景自动切换到 torch 路径,需关注数值一致性与性能差异。

用户侧:XPU 用户使用 --linear-backend torch 时,FP8 block-wise 量化模型(如 Llama-3.2-1B-FP8、Qwen3-4B-FP8)可走原生 torch._scaled_mm,减少对 Triton/自研内核的依赖,同时为后续 XPU 性能调优提供新选择。系统侧:仅影响 XPU 平台的内核解析表,CUDA/ROCm/CPU 路径完全不变。团队/CI 侧:Intel CI 的 "XPU W8A8 FP8 Linear Examples" 步骤增加一条命令,运行时间略有增加,为 XPU 上 torch 后端的持续回归提供基线。

新后端验证覆盖有限 候选内核回退语义变化 XPU 专用路径

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论