Prhub

#28635 [NPU] Add head_dim=256 to _can_use_tnd whitelist

原始 PR 作者 syy-hw 合并时间 2026-06-18 17:55 文件变更 1 提交数 1 评论 1 代码增减 +1 / -1

执行摘要

为 Ascend NPU 添加 head_dim=256 的 TND 白名单支持

解决 Ascend NPU 上 head_dim=256 的模型被强制路由到较慢的 BSND per-sequence fallback 路径的问题。该 fallback 在 chunked prefill 结合 speculative decode 时存在单独缺陷。

建议合入,变更简单且风险低。若团队后续深度使用该类模型,可考虑补充 TND 布局的单元测试或集成测试。

讨论亮点

无实质性技术讨论。只有 Gemini Code Assist 机器人自动评论确认无反馈,以及 CI 机器人自动批准。

实现拆解

  1. 修改 AscendAttnBackend._can_use_tnd 静态方法,将 256 加入 d in (128, 192, 256) 的判断中。
  2. 文件:python/sglang/srt/hardware_backend/npu/attention/ascend_backend.py,仅一行变更。
  3. 无测试、配置或部署配套修改。
文件 模块 状态 重要度
python/sglang/srt/hardware_backend/npu/attention/ascend_backend.py NPU 注意力后端 modified 4.54

关键符号

_can_use_tnd

关键源码片段

python/sglang/srt/hardware_backend/npu/attention/ascend_backend.py core-logic

核心变更文件,在 `_can_use_tnd` 方法中加入 head_dim=256 支持。

# python/sglang/srt/hardware_backend/npu/attention/ascend_backend.py@staticmethod
def _can_use_tnd(layer: RadixAttention) -> bool:
    """Check if TND layout is supported."""
    d = layer.qk_head_dim
    v = layer.v_head_dim
    # 允许 head_dim=256 使用 TND 布局(CANN 官方仅承诺 128/192,但实测可用)
    return (d == v and d in (128, 192, 256)) or (d == 192 and v == 128)

评论区精华

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

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

风险与影响

风险极低。仅放宽了 TND 布局使用的条件,且已在两不同架构(Qwen3.5 和 Gemma4)上验证过。但未添加新测试,未来 head_dim=256 模型若出现精度问题,可能被当前变更掩盖。

影响范围小,仅涉及 Ascend NPU 上 head_dim=256 的模型。从缓慢的 BSND fallback 切换到 TND fast path,可提升 prefill 性能并规避已知 bug。

缺少测试覆盖

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论