Prhub

#22312 Make GDN support non-continuous B/A Tensor input to fix the accuracy regression of Qwen3.5-27B

原始 PR 作者 cs-cat 合并时间 2026-04-10 18:58 文件变更 3 提交数 2 评论 5 代码增减 +272 / -8

执行摘要

修复 GDN 内核以支持非连续 B/A 张量输入,解决 Qwen3.5-27B 准确性回归问题。

PR body 和关联 Issue #22311 指出,commit 5bdc07d974f6cf236fa765a685453ea5e587a838 的优化导致 Qwen3.5-27B 在 fallback 路径(v_per_group = 3)下,BA 投影被分割成非连续的 a 和 b 视图。GND Triton 内核假设连续内存布局并硬编码步幅,从而错误读取内存,引发准确性严重下降(从 49/50 降至 3/50)。修复旨在使内核支持非连续输入,恢复模型正常行为。

建议工程师精读此 PR,以学习内核中处理非连续内存布局的技术细节,以及如何通过显式步幅参数扩展内核通用性。关注测试文件中的模拟方法,可作为类似场景的参考。

讨论亮点

Review 过程中没有实质性讨论,reviewer 'yizhang2077' 直接批准了 PR。所有修改细节已在 PR body 和 commit 消息中明确描述,无需额外争议或决策。

实现拆解

实现方案分为三个部分:首先,在 fused_gdn_gating.py 中,为内核函数添加 stride_astride_b 参数,并在加载 a 和 b 张量时使用这些步幅替代硬编码偏移。其次,在 fused_sigmoid_gating_recurrent.py 中,类似添加 stride_a 参数,确保在循环更新中正确处理非连续布局。最后,新增测试文件 test_gdn_noncontiguous_stride.py,模拟 Qwen3.5 的 split 操作生成非连续张量,并验证两个内核函数在连续与非连续输入下输出一致。

文件 模块 状态 重要度
python/sglang/srt/layers/attention/fla/fused_gdn_gating.py attention/fla modified 8.0
python/sglang/srt/layers/attention/fla/fused_sigmoid_gating_recurrent.py attention/fla modified 7.0
test/registered/attention/test_gdn_noncontiguous_stride.py test added 6.0

关键符号

fused_gdn_gating fused_sigmoid_gating_delta_rule_update

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

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

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

风险与影响

主要风险是原先的内存读取错误已通过修复消除,避免了准确性回归。新增测试覆盖了非连续输入场景,降低了未来类似回归风险。但修改涉及内核步幅计算,需确保不影响其他模型路径的性能或正确性;测试文件已验证 Qwen3.5 相关形状,但未覆盖所有可能布局。

直接影响 Qwen3.5-27B 用户,准确性恢复至正常水平,提升模型在长上下文推理中的可靠性。间接影响使用类似 GDN 路径的其他模型(如 Qwen3.5 其他配置),确保非连续输入得到正确处理。系统层面,修复了核心注意力模块的关键 bug,增强了整体推理稳定性。

内存布局假设错误 核心路径变更 缺少非连续输入测试

关联 Issue

#22311 Qwen3.5-27B accuracy regression caused by non-contiguous GDN split views

完整报告

参与讨论