Prhub

#28046 [Intel GPU] DeepSeek V4 9/N: use sgl-kernel implementation of hadamard_transform on XPU

原始 PR 作者 polisettyvarma 合并时间 2026-07-14 09:21 文件变更 1 提交数 2 评论 6 代码增减 +4 / -0

执行摘要

XPU 通过 sgl-kernel 支持 Hadamard 变换

hadamard_transform is CUDA/HIP-only, so importing it from rotate_activation() fails on Intel XPU with ImportError when the NSA indexer path runs (e.g. DeepSeek-V4 compressed attention).

作为 DeepSeek V4 XPU 支持系列的一部分,本 PR 实现简洁,风险低。若需在 XPU 环境运行 DeepSeek-V4,建议合入。注意测试文件未包含在最终变更中(移至 kernel 侧)。

讨论亮点

审阅者 jianan-gu 建议将测试文件 test/manual/test_hadamard.py 移动到 kernel 侧,作者已采纳。此外,gemini-code-assist[bot] 建议优化实现,但作者尝试后表示“tried and failed”,因此未采纳。最终获得两位审阅者批准。

实现拆解

  1. 导入 is_xpu:在 python/sglang/srt/layers/attention/dsa/dsa_indexer.py 中,从 sglang.srt.utils 导入 is_xpu
  2. 定义 _is_xpu:在全局作用域中调用 is_xpu() 并赋值给 _is_xpu 变量。
  3. 修改 rotate_activation 的条件分支:先判断 _is_hip(使用 fast_hadamard_transform),然后判断 _is_xpu(从 sgl_kernel 导入 hadamard_transform),最后对于其他平台(CUDA/SM103/NPU)回退到 sglang.jit_kernel.hadamard
文件 模块 状态 重要度
python/sglang/srt/layers/attention/dsa/dsa_indexer.py 注意力层 modified 5.4

关键符号

rotate_activation

关键源码片段

python/sglang/srt/layers/attention/dsa/dsa_indexer.py dependency-wiring

核心变更文件,添加了 `_is_xpu` 检测和基于 `sgl_kernel` 的 Hadamard 变换导入路径,使 `rotate_activation` 能在 XPU 上运行。

# python/sglang/srt/layers/attention/dsa/dsa_indexer.py# 新增 : 导入 is_xpu 检测函数
from sglang.srt.utils import (
    is_cuda,
    is_hip,
    is_npu,
    is_xpu, # 新增加
)# 新增 : 定义全局 _is_xpu 标志
_is_xpu = is_xpu()def rotate_activation(x: torch.Tensor) -> torch.Tensor:
    # 原注释保留 : # from sgl_kernel import hadamard_transform
    if _is_hip:
        from fast_hadamard_transform import hadamard_transform
    elif _is_xpu: # 新增 XPU 分支
        from sgl_kernel import hadamard_transform # 使用 sgl_kernel 的融合实现
    else:
        from sglang.jit_kernel.hadamard import hadamard_transform
​
    hidden_size = x.size(-1)
    # 确保 hidden_size 是 2 的幂
    assert (
        hidden_size & (hidden_size - 1)
    ) == 0, "Hidden size must be a power of 2 for Hadamard transform."
    return hadamard_transform(x, scale=hidden_size ** -0.5)

评论区精华

测试文件位置 测试

审阅者 jianan-gu 建议将 `test/manual/test_hadamard.py` 移动到 kernel 侧测试,而不是放在 manual 目录下,因为 manual 目录更适用于 feature/serving 级别测试。

结论:作者 polisettyvarma 同意并移除了测试文件,表示 'done'。 · 已解决

实现优化建议 性能

gemini-code-assist[bot] 建议 `_torch_hadamard_transform` 中去除冗余的 `.clone()` 并使用 `torch.cat` 代替 `torch.stack` 以提高效率。

结论:作者尝试后表示 'tried and failed',未采纳此优化。最终实现未包含该函数,转而使用 `sgl_kernel` 的融合内核。 · unresolved

风险与影响

变更范围极小(仅 4 行新增),仅在 _is_xpu 为 True 时才改变导入路径,且 sgl_kernel 中的 hadamard_transform 在合并前已通过测试,回归风险低。此方案复用了已有的 sgl_kernel 内核,而非引入纯 PyTorch 回退实现。

仅影响 Intel XPU 平台上的 DeepSeek-V4 模型,解锁了 NSA indexer 路径在 XPU 上的正常运行,无其他影响。

平台特定代码 缺少测试覆盖(测试未包含在 PR 中)

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论