# PR #22024 完整报告

- 仓库：`sgl-project/sglang`
- 标题：[NPU] enable mla prepare fused kernel only when being mla attn
- 合并时间：2026-04-08 00:49
- 原文链接：http://prhub.com.cn/sgl-project/sglang/pull/22024

---

# 执行摘要

- 一句话：修复 NPU 后端 MLAPO 融合内核在非 MLA 模型下错误禁用 KV 缓存保存的问题。
- 推荐动作：该 PR 值得 NPU 后端开发者精读，虽然改动小但揭示了 MLAPO 与模型类型耦合的设计决策。关注 self.use_mla 属性的使用方式，以及未来是否应重构重复逻辑。

# 功能与动机

根据 PR body 描述，MLAPO 仅适用于基于 MLA（多级注意力）的模型。当前当 MLAPO 与 Eagle 草稿模型一起使用时，草稿模型无法正确保存其 KV 缓存。这导致推测解码功能异常，需要修复以确保正确性。

# 实现拆解

该 PR 仅修改了一个文件：python/sglang/srt/hardware_backend/npu/attention/ascend_backend.py。在 forward_extend 和 forward_decode 两个方法中，将原有的条件判断从 `if is_mla_preprocess_enabled():` 改为 `if is_mla_preprocess_enabled() and self.use_mla:`，确保仅当启用 MLA 预处理且当前模型为 MLA 模型时才禁用 save_kv_cache。

关键文件：
- `python/sglang/srt/hardware_backend/npu/attention/ascend_backend.py`（模块 hardware_backend/npu）: 唯一修改的文件，包含 Ascend NPU 后端的核心注意力计算逻辑，forward_extend 和 forward_decode 是关键方法。

关键符号：forward_extend, forward_decode


# 评论区精华

review 中只有一个实质性讨论：gemini-code-assist[bot] 指出两处逻辑重复（forward_extend 和 forward_decode），建议提取为私有辅助方法以提高可维护性，并统一注释（一处写 "MLAPO and MLAPROLOG"，另一处只写 "MLAPO"）。但 PR 作者未采纳该建议，直接合并了当前修改。iforgetmyname 批准了 PR。

- 重复逻辑重构建议 (design): PR 作者未采纳，直接合并了当前修改。

# 风险与影响

- 风险：风险较低但需注意：1. 核心逻辑变更在 NPU 后端的注意力计算路径中，若 self.use_mla 判断错误可能影响所有使用 Ascend 后端的模型。2. 未按 review 建议重构重复代码，长期可能增加维护成本。3. 缺少针对此修复的单元测试，依赖现有 CI 覆盖。
- 影响：影响范围：使用 Ascend NPU 后端且同时启用 MLAPO 和 Eagle 等非 MLA 草稿模型的推测解码场景。修复后，草稿模型能正确保存 KV 缓存，确保推测解码功能正常。对纯 MLA 模型或无草稿模型的场景无影响。
- 风险标记：核心路径变更 , 缺少测试覆盖

# 关联脉络

- PR #20522 [Mamba] eliminate D2H if tracking mamba states: 同属 NPU 后端性能优化相关，涉及硬件后端逻辑调整。
- PR #22240 [Disagg][NIXL] Support Mamba state slice transfer for heterogeneous TP (Step 2/2 for Qwen3.5): 同属 NPU 相关功能，涉及异构 TP 下的状态处理。
- PR #22145 [Disagg][NIXL] Fix heterogeneous TP KV transfer for non-MLA models (same logic with mooncake, Step 1/2 for Qwen3.5 support): 同样修复非 MLA 模型的 KV 传输问题，技术领域相似。