Prhub

#19228 [AMD] optimize Kimi K2.5 fused_moe_triton performance by tuning

sgl-project/sglang · 作者 ZiguanWang · 合并时间 2026-02-27 03:50

分析状态 已生成
文件变更 5提交数 1 · 评论 5
代码增减 +486 / -23
performance quant test

执行摘要

通过调优 fused_moe_triton 内核并添加 int4_w4a16 支持,显著提升 Kimi K2.5 模型在 AMD 硬件上的性能。

根据 PR body,'Kimi K2.5 fused_moe_triton use default config so the performance is poor.' 这表明优化动机是改善特定模型在默认配置下的性能表现。

建议工程师精读此 PR,特别是关注 int4_w4a16 量化支持的具体实现(如权重初始化和尺度计算)和调优配置的选取策略,这对高性能计算和量化优化有参考价值。

讨论亮点

Review 过程中没有具体的评论讨论,但 issue 评论中 ZiguanWang 提到设备名获取在 Docker 容器中可能为空的问题,这影响了配置文件的命名。此外,hubertlu-tw 触发了 CI 测试。

实现拆解

实现分为三个关键部分:首先,在 common_utils.py 中修改模型配置获取逻辑,支持 encoder-decoder 模型和 int4 量化块形状计算;其次,在 tuning_fused_moe_triton.py 和 tuning_fused_moe_triton_sep.py 中添加 int4_w4a16 的权重初始化、尺度计算和基准测试支持;最后,新增两个 JSON 配置文件,为 int4_w4a16 提供调优后的内核参数(如 BLOCK_SIZE_M、GROUP_SIZE_M)。

文件 模块 状态 重要度
benchmark/kernels/fused_moe_triton/common_utils.py benchmark/kernels modified 7.0
benchmark/kernels/fused_moe_triton/tuning_fused_moe_triton.py benchmark/kernels modified 8.0
python/sglang/srt/layers/moe/fused_moe_triton/configs/triton_3_4_0/E=384,N=128,device_name=,dtype=int4_w4a16.json layers/moe added 9.0

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

关键符号

get_model_config get_config_filename benchmark_config

评论区精华

设备名获取问题 question

ZiguanWang 在 issue 评论中提到,get_device_name 在 Docker 容器中可能返回空字符串,导致配置文件设备名为空。

结论:未明确解决,但可能通过配置文件名处理适应。 · mentioned

风险与影响

风险包括:配置变更可能意外影响其他模型或量化类型,尤其在 common_utils.py 的 block_shape 计算中;新增的 int4_w4a16 支持需要确保与现有量化路径兼容,避免性能回归;调优基于 AMD 硬件,可能在其他平台(如 NVIDIA)上表现不同;测试覆盖可能不足,新配置文件未涵盖所有边缘情况。

对用户而言,Kimi K2.5 模型的推理速度显著提升,prefill 阶段 MOE 层耗时从 9.11ms 降至 2.881ms,decode 阶段从 501us 降至 276us,提高用户体验。系统在 AMD 硬件上的 fused_moe_triton 内核效率优化,可能为其他模型性能调优提供参考。团队需要更新文档和测试以覆盖新配置,并确保跨平台兼容性。

配置变更风险 硬件特定优化 测试覆盖不足

关联 Issue

未识别关联 Issue

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

完整报告

执行摘要

本 PR 通过调优 fused_moe_triton 内核和添加 int4_w4a16 量化支持,显著提升了 Kimi K2.5 模型在 AMD 硬件上的性能,prefill 和 decode 阶段速度分别提升约 3 倍和 2 倍,是面向特定硬件的关键优化,直接影响推理效率和用户体验。

功能与动机

动机源于 Kimi K2.5 模型在使用默认配置时 fused_moe_triton 性能较差,如 PR body 所述:'Kimi K2.5 fused_moe_triton use default config so the performance is poor.' 目标是改善该模型在 AMD 平台上的推理速度,通过调优内核参数和扩展量化支持来解决性能瓶颈。

实现拆解

实现分为三个层面:

  1. 配置逻辑调整:在 common_utils.py 中,修改 get_model_config 函数,先处理 encoder-decoder 模型的 text_config,再计算 block_shape 和 architecture,并支持 int4 量化的 group_size 提取。
  2. 基准测试扩展:在 tuning_fused_moe_triton.pytuning_fused_moe_triton_sep.py 中,添加 use_int4_w4a16 参数,扩展 benchmark_config 函数以支持 int4 权重的初始化和尺度计算,例如:
    python elif use_int4_w4a16: w1 = torch.randint(0, 255, (num_experts, shard_intermediate_size, hidden_size // 2), dtype=torch.uint8)
  3. 优化配置文件新增:添加两个 JSON 配置文件(如 E=384,N=128,device_name=,dtype=int4_w4a16.json),包含调优后的内核参数(如 BLOCK_SIZE_M、GROUP_SIZE_M),针对不同并发场景优化。

评论区精华

Review 过程中没有具体的技术讨论,但 issue 评论中 ZiguanWang 提到:'Notice currently get_device_name will get empty string inside a docker container, so the config device name is empty',这揭示了配置命名的潜在问题,可能影响跨环境部署。hubertlu-tw 触发了 CI 测试,确保代码质量。

风险与影响

风险:配置变更可能意外影响其他模型(如 DbrxForCausalLM)的量化路径;新增 int4 支持需要更多测试覆盖以避免回归;调优基于 AMD 硬件,可能在其他平台(如 NVIDIA)上性能不一致。具体风险点包括 common_utils.py 中 block_shape 计算的逻辑调整和 tuning 文件中的尺度初始化复杂性。

影响:用户在使用 Kimi K2.5 模型时将体验到显著的延迟降低和吞吐量提升(如基准测试显示吞吐量从 55.13875 token/s 增至 90.03875 token/s)。系统层面,优化了 fused_moe_triton 内核,为后续模型性能调优提供范例。团队需更新相关文档和集成测试,确保新配置的稳定性和兼容性。

关联脉络

从历史 PR 看,本 PR 与 #21348(修复 MxInt4 MoE 输出变量)相关,都涉及 MoE 和量化模块的改进,显示量化性能优化的持续演进。同时,与 #21103(暴露 get_scheduler_metadata 优化解码)类似,均为性能优化 PR,反映团队在核心路径调优上的集中投入。结合近期 PR 趋势,AMD 硬件优化和量化支持是仓库的重点方向之一。

参与讨论