Prhub

#22791 [MoE] Add LFM2 MoE tuning support + tuned configs for H100/B200/MI325X

原始 PR 作者 tugot17 合并时间 2026-04-22 09:32 文件变更 25 提交数 6 评论 6 代码增减 +3852 / -0

执行摘要

为 LFM2 MoE 模型添加 Triton 内核调优支持及针对 H100/B200/MI325X 的优化配置。

LFM2 MoE 模型使用 num_experts / moe_intermediate_size 配置键,而默认的 Mixtral 回退逻辑期望 num_local_experts / intermediate_size,导致调优脚本崩溃或生成错误内核形状。没有调优配置时,融合 MoE Triton 内核会回退到通用默认值,远非 LFM2 专家形状的最优解,因此需要添加支持并生成优化配置以提升性能。

建议技术管理者和工程师精读此 PR,重点关注:

  • common_utils.py 中的模型配置提取逻辑,了解如何适配新 MoE 架构。
  • JSON 配置文件的结构和参数选择,学习 Triton 内核调优的最佳实践。
  • 讨论中提到的代码重复问题,可作为重构机会以提升代码库可维护性。
讨论亮点

review 中主要关注两个问题:

  • 代码重复:gemini-code-assist[bot] 指出 common_utils.py 中添加的 elif 块与其他架构(如 BailingMoEForCausalLM)逻辑相同,建议重构以减少重复,提升可维护性。讨论未明确是否采纳,但 PR 已合并,可能被接受或暂缓处理。
  • 文件格式:同一审核者发现新增的 AMD JSON 配置文件缺少结尾换行符,可能引发工具兼容性问题;后续提交 5d49f5479c1f8576cba68ab1206fac94223c2cdc 修复了此问题,体现了对代码风格的重视。

实现拆解

  1. 扩展模型支持入口:在 benchmark/kernels/fused_moe_triton/common_utils.pyget_model_config 函数中添加针对 Lfm2MoeForCausalLM 架构的分支,正确读取 num_expertsmoe_intermediate_size 键,确保调优脚本能处理 LFM2 模型配置。
  2. 生成硬件特定配置:新增 24 个 JSON 配置文件,分别存放在 python/sglang/srt/layers/moe/fused_moe_triton/configs/triton_3_5_1/(针对 NVIDIA H100 和 B200)和 triton_3_6_0/(针对 AMD MI325X)目录下。这些文件覆盖了 LFM2-8B-A1B(E=32)和 LFM2-24B-A2B(E=64)模型在 TP=1,2,4,8 时的不同批次大小(1 到 8192),包含优化后的 Triton 内核参数如 BLOCK_SIZE_Mnum_warps 等。
  3. 版本管理:配置文件按 Triton 版本拆分,triton_3_5_1 对应 NVIDIA 环境(默认 PyPI 安装),triton_3_6_0 对应 AMD 容器环境,以应对不同版本下的内核性能差异。
  4. 配套调整:提交中包括修复 JSON 文件结尾换行符的提交,确保文件格式一致性;没有直接添加测试文件,但 PR body 提及了端到端验证和数值正确性检查。
文件 模块 状态 重要度
benchmark/kernels/fused_moe_triton/common_utils.py 基准测试 modified 6.72
python/sglang/srt/layers/moe/fused_moe_triton/configs/triton_3_5_1/E=32,N=1792,device_name=NVIDIA_H100_80GB_HBM3.json MoE 层 added 5.89
python/sglang/srt/layers/moe/fused_moe_triton/configs/triton_3_6_0/E=32,N=1792,device_name=AMD_Instinct_MI325X.json MoE 层 added 5.92

关键符号

get_model_config

关键源码片段

benchmark/kernels/fused_moe_triton/common_utils.py core-logic

核心入口文件,扩展了对 LFM2 MoE 模型的支持,确保调优脚本能正确读取模型配置键。

def get_model_config(model_name, ep_size=1):
    # 从模型配置中提取 MoE 相关参数,支持多种架构
    config = AutoConfig.from_pretrained(model_name)
    architecture = config.architectures[0]
​
    if architecture == "MixtralForCausalLM":
        E = config.num_local_experts // ep_size
        topk = config.num_experts_per_tok
        intermediate_size = config.intermediate_size
    elif architecture == "Qwen2MoeForCausalLM":
        E = config.num_experts // ep_size
        topk = config.num_experts_per_tok
        intermediate_size = config.moe_intermediate_size
    # 添加 LFM2 支持分支
    elif architecture == "Lfm2MoeForCausalLM":
        E = config.num_experts // ep_size # 使用 num_experts 键
        topk = config.num_experts_per_tok # 专家数量 per token
        intermediate_size = config.moe_intermediate_size # 使用 moe_intermediate_size 键
    else:
        raise ValueError(f"Unsupported architecture: {architecture}")
​
    return E, topk, intermediate_size

评论区精华

代码重复问题 设计

gemini-code-assist[bot] 指出在 common_utils.py 中添加的 Lfm2MoeForCausalLM 分支逻辑与其他架构分支相同,建议重构以减少重复。

结论:讨论未明确是否采纳重构建议,但 PR 已合并,可能暂时接受重复以快速交付功能。 · 已解决

文件格式一致性 style

审核者发现新增的 AMD JSON 配置文件缺少结尾换行符,可能影响工具兼容性。

结论:后续提交修复了此问题,添加了结尾换行符,确保文件格式符合规范。 · 已解决

风险与影响

  1. 配置版本依赖风险:配置文件针对特定 Triton 版本(3.5.1 和 3.6.0)调优,未来 Triton 升级可能导致性能下降或需要重新调优,增加维护负担。
  2. 兼容性风险:新增模型支持可能引入未覆盖的边缘情况,例如其他 LFM2 变体模型配置差异,但 PR body 中已验证了常见模型。
  3. 测试覆盖不足:本次变更未添加单元测试,依赖已有的端到端验证;若内核参数配置错误,可能影响推理正确性或性能。
  4. 硬件特定优化风险:配置文件针对特定 GPU(如 H100、B200、MI325X),在其他硬件上可能无法加载或性能不佳,但系统应回退到默认配置。
  1. 用户影响:LFM2 模型用户将获得显著性能提升,在 NVIDIA 硬件上吞吐量最高增加 47%,改善高并发场景体验;AMD 用户在使用 --moe-runner-backend triton 运行 LoRA 服务时,性能接近 aiter CK-MoE 后端,填补了关键功能缺口。
  2. 系统影响:新增配置文件和代码扩展了 MoE 模块的功能范围,但未改动核心调度或缓存逻辑,对系统其他部分影响有限;配置文件按版本管理有助于未来升级。
  3. 团队影响:提供了硬件特定调优的范例,可作为未来模型支持的参考;但代码重复问题提示需要关注代码结构优化。
配置版本依赖 缺少测试覆盖

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论