Prhub

#21166 [Not-Merge][AMD] GLM-5 performance optimization

原始 PR 作者 wufann 合并时间 2026-04-12 14:58 文件变更 2 提交数 3 评论 5 代码增减 +48 / -8

执行摘要

为 GLM-5 模型在 AMD 平台优化 Aiter 稀疏注意力性能,通过填充头数和移除硬编码参数。

优化GLM-5模型性能,特别是在AMD平台上使用Aiter后端时。PR body中明确说明目标是“Optimize GLM-5 model performance”,并针对GLM-5 TP8配置(每设备头数=8)进行优化,因为Aiter mla_decode_fwd内核要求头数为16的倍数且在[16, 128]范围内。

建议AMD平台开发者或关注GLM-5性能优化的工程师精读此PR。重点关注头数填充的设计决策(need_pad_heads和head_repeat_factor),以及如何优雅地适配内核约束而不破坏原有逻辑。同时注意此PR暂未合并,需跟踪相关Aiter更新。

讨论亮点

review讨论较少,主要来自gemini-code-assist[bot]的代码审查和HaiShaw的批准。gemini-code-assist[bot]指出修改正确高效,填充和取消填充逻辑处理得当。HaiShaw在评论中说明此PR暂不合并,因为相关Aiter更新(ROCm/aiter#2213)将包含在即将发布的AITER更新中,并提及issue #21302。没有出现技术争议或未解决的疑虑。

实现拆解

实现分为三个关键部分:1)在nsa_backend.py的__init__中添加need_pad_heads和head_repeat_factor逻辑,当每设备查询头数小于16时进行填充;2)在_forward_aiter和_forward_aiter_extend方法中,根据need_pad_heads对查询张量q进行重复填充,并创建相应形状的输出张量o_kernel,调用mla_decode_fwd后对输出进行降采样还原;3)在nsa_indexer.py中删除deepgemm.fp8_paged_mqa_logits调用时的三个硬编码参数(ChunkK=128, TotalCuCount=256, WavePerEU=5),让内核内部配置优化参数。

文件 模块 状态 重要度
python/sglang/srt/layers/attention/nsa_backend.py attention/nsa modified 9.0
python/sglang/srt/layers/attention/nsa/nsa_indexer.py attention/nsa modified 6.0

关键符号

_forward_aiter _forward_aiter_extend __init__ deepgemm.fp8_paged_mqa_logits

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

评论区精华

PR 合并时机与外部依赖 other

HaiShaw 指出此 PR 暂不合并,等待 ROCm/aiter#2213 合并并包含在 AITER 更新中,并提及 issue #21302。

结论:PR 将延迟合并,直到外部 Aiter 更新就绪。 · 已解决

代码修改正确性评估 正确性

gemini-code-assist[bot] 审查认为填充和取消填充逻辑正确高效,符合 Aiter 内核要求。

结论:修改被认可为正确且适合优化目标。 · 已解决

风险与影响

风险较低但需注意:1)填充逻辑增加了张量操作开销,可能在小头数模型上引入轻微性能损耗,但这是为了满足内核要求的必要代价;2)移除硬编码参数依赖内核内部优化,需确保Aiter更新后参数配置在所有场景下都最优;3)修改集中在Aiter后端,仅影响使用Aiter稀疏注意力的AMD平台运行,对其他后端或平台无影响。

影响范围有限但针对性强:1)对用户:提升GLM-5模型在AMD平台上的推理性能,特别是TP8配置下的吞吐量;2)对系统:仅修改Aiter稀疏注意力后端,不影响其他注意力实现或非AMD硬件;3)对团队:提供了处理头数填充的通用模式,可能为类似内核约束场景提供参考。

内核约束适配 外部依赖延迟

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论