执行摘要
本PR优化了Qwen3.5模型的Gated Delta Net投影层,通过引入Triton核融合split/reshape/cat操作,减少内核启动和内存分配,提升推理性能。尽管在小模型上存在性能讨论,但整体改进显著,需注意FP8量化兼容性和准确性验证。
功能与动机
作为PR #19321的后续,针对Qwen3.5检查点布局与Qwen3-Next不同的特点,将多个投影操作融合以优化性能。PR body中明确指出:'In PR https://github.com/sgl-project/sglang/pull/19321 we fused Qwen3-Next GDN's qkvz_proj and ba_proj. This PR is a follow up.' 目标是减少内核启动和中间张量分配,提升预填充和解码阶段的效率。
实现拆解
- 新增Triton核:在
python/sglang/jit_kernel/triton/gdn_fused_proj.py 中新增 fused_qkvzba_split_reshape_cat_contiguous 核函数,处理连续输入格式。
- 重构投影层:修改
python/sglang/srt/models/qwen3_5.py,将原先的 in_proj_qkv、in_proj_z、in_proj_b、in_proj_a 合并为 in_proj_qkvz 和 in_proj_ba 两个融合层。
- 增强权重加载器:实现
_make_packed_weight_loader 方法,支持融合和拆分检查点格式的权重加载,确保参数初始化正确。
- 清理冗余代码:修改
python/sglang/srt/models/qwen3_next.py,移除旧Triton核,复用新核以保持代码一致性。
评论区精华
- 性能争议:jasperjiaguo报告小模型性能下降,但作者yuan-luo验证后显示改进,引发对优化效果的讨论。引用yuan-luo:'I'll verify the small model's performance and do refactor to avoid the corresponding impact.'
- FP8修复:yuan-luo在issue评论中修复FP8量化兼容性问题:'FP8 problem fixed.' 强调权重加载器需处理不同参数类型。
- 准确性检查:cs-cat提到可能影响准确性:'This PR does indeed bring significant performance improvements, but it seems to affect the accuracy of the model? Please refer to #21696.' 需要进一步验证。
风险与影响
- 技术风险:小模型性能可能出现波动;FP8量化模型需特殊处理权重加载器;变更可能引入准确性偏差,需加强测试。
- 影响范围:对用户而言,大模型推理性能提升,但小模型需监控;系统层面减少内核启动和内存开销;团队需适应新的融合架构,并关注兼容性测试。
关联脉络
- 与PR #19321直接关联,延续了投影层融合的优化路线,展示了跨模型版本的一致性优化策略。
- 涉及jit-kernel和量化主题,与仓库中其他性能优化PR(如#21657的AMD优化)共享技术思路,反映了团队在核融合和量化适配上的持续演进。
参与讨论