Prhub

#21657 [AMD] Use tgemm.mm for MoEGate router gemm in deepseek_v2.py

原始 PR 作者 1am9trash 合并时间 2026-03-31 15:55 文件变更 2 提交数 2 评论 0 代码增减 +8 / -32

执行摘要

使用 tgemm.mm 自动选择 GEMM 内核,优化 MoEGate 路由器性能,提升推理速度。

根据 PR body,MoEGate router GEMM 在运行 GLM-5-fp8 模型时是主要性能瓶颈,占用约 30% 的单层时间,因此需要优化以提高推理效率。

该 PR 值得精读,特别是关注内核自动选择机制 tgemm.mm 的使用方式和性能基准测试方法。对于从事性能优化的工程师,可以学习如何利用分发器简化内核管理并评估优化效果。

讨论亮点

review 讨论非常有限。gemini-code-assist[bot] 评论指出重构简化了实现,使用 tgemm.mm 自动选择内核,移除了手动约束,并表示无反馈;HaiShaw 随后批准了 PR。没有争议点或未解决的疑虑,讨论迅速收敛。

实现拆解

实现涉及两个文件:在 python/sglang/srt/layers/rocm_linear_utils.py 中,aiter_dsv3_router_gemm 函数被重构为直接调用 tgemm.mm,移除了对 gemm_a16w16 和 gemm_a16w16_atomic 的显式选择、形状检查以及零分配器逻辑;在 python/sglang/srt/models/deepseek_v2.py 中,条件分支从依赖 _use_aiter_gfx95 和特定形状约束改为使用 _use_aiter 标志,简化了集成路径,确保 GLM 和 DeepSeek 模型共享相同代码路径。

文件 模块 状态 重要度
python/sglang/srt/layers/rocm_linear_utils.py layers/rocm modified 7.0
python/sglang/srt/models/deepseek_v2.py models/deepseek modified 6.0

关键符号

aiter_dsv3_router_gemm

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

评论区精华

重构 aiter_dsv3_router_gemm 函数以简化实现 设计

gemini-code-assist[bot] 评论指出变更简化了实现,使用 tgemm.mm 自动选择 GEMM 内核,移除了手动内核选择和形状约束。

结论:无反馈,建议批准,PR 被合并。 · 已解决

风险与影响

技术风险包括:tgemm.mm 分发器的稳定性未知,可能在不同硬件或输入形状下表现不一致;移除形状约束(如 M <= 256 的条件)可能影响边缘情况下的性能或正确性;修改了核心推理路径,需确保向后兼容性和准确性,尽管测试显示准确性不变(GSM8k acc 约 0.949),但覆盖范围可能有限。

对用户:GLM-5-fp8 和 deepseek 模型的推理速度显著提升,benchmark 显示吞吐量 (tok/s) 提升 20-40% 以上,降低延迟。对系统:代码简化,易于维护,但增加对 aiter.tuned_gemm 的依赖,可能影响其他使用相同函数的模型。对团队:提供了性能优化范例,可能推广到其他 GEMM 场景,促进自动化内核选择实践。

依赖外部内核分发器 移除形状约束可能引入边缘 case 核心路径变更需谨慎测试

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论