3.6 KiB
Raw Blame History

Kimi-K3 SM120 FlashInfer MXFP4 MoE

目标

为 Kimi-K3 在 NVIDIA SM120RTX PRO 6000D上的 SGLang 部署补齐 FlashInfer MXFP8 activation × MXFP4 weight fused MoE并形成可回归、可性能比较、可提交上游的最小改动。

本目录不修改已有 Kimi-K3 基线实验。功能实现必须先通过算子正确性,再进入模型加载和性能测试。

Phase 0 审计结论

状态:完成

审计环境:

对象 版本或提交
GPU NVIDIA RTX PRO 6000 Blackwell Server EditionSM120
SGLang 827552bc1dda8507f2a1b11c7274340a83da49ce
FlashInfer a9e03bf2f5fePython package 0.6.18
PyTorch / CUDA PyTorch 2.11CUDA 13
构建镜像 lmsysorg/sglang:kimi-k3-fiv617situ-warm
Kimi-K3 hidden 7168expert hidden 3584896 expertstop-k 16SiTU (alpha=4.0, beta=25.0)

已确认:

  1. FlashInfer 当前 main 的 SM120 CUTLASS fused MoE 能完成基础 MXFP8×MXFP4 运算;官方最小测试通过。
  2. Kimi-K3 所需的 ActivationType.Situ 尚未接入该 SM120 CUTLASS C++ runner。
  3. Python ActivationType.Situ 的值为 10而 CUTLASS C++ ActivationType 的值 10 当前是 InvalidType。SiTU 调用因此被当作非门控激活FC1 门控维度判断错误。
  4. SGLang 当前 SM120 MXFP4 路径仍按 GPT-OSS 的 SwiGLU 权重布局和参数组织,未透传 Kimi SiTU 参数。
  5. 旧目录 kimi3_pro6000_sglang_tp32ep32_deepep_flashinfer_mxfp4 实际使用 flashinfer_cutedsl,并在模型加载前因量化配置识别失败;它不能作为 FlashInfer MXFP4 SM120 的成功或失败证据。

上游重叠审计:

  • SGLang PR #30272 只实现 DeepSeek-V4 的 SM120 FlashInfer MXFP4 路径。
  • FlashInfer issue #4223 跟踪 SM12x NVFP4 kernel同一 issue 明确把 SiTU 标为当前目标模型“不需要”。
  • 截至本次审计,没有找到覆盖 Kimi-K3 + SM120 + SiTU + MXFP4 fused MoE 的已合并实现或开放 PR。

因此,本任务有明确的独立增量,不是重复实现。

真机证据

FlashInfer 源码与 wheel

/data/hzy/src/flashinfer-kimi-sm120
/data/hzy/artifacts/flashinfer-main-a9e03bf/flashinfer_python-0.6.18-py3-none-any.whl
/data/hzy/cache/flashinfer-sm120

官方 SM120 MXFP8×MXFP4 基线:

FLASHINFER_DISABLE_VERSION_CHECK=1 pytest -q \
  tests/moe/test_trtllm_cutlass_fused_moe.py::test_moe_mxfp8_mxfp4\[False-None-None-None-otype1-128-2-2-128-1\] -s

实际结果:

1 passed, 3 warnings in 540.58s

SiTU 最小负例沿用官方 test_moe 数据构造,只将激活改为 ActivationType.Situ

test_moe(1, 128, 2, 2, 128, ActivationType.Situ)

实际首个错误:

fc1_expert_weights inter size must be equal to fc2_expert_weights inter size
(256 vs. 128)

对应源码事实:

flashinfer/tllm_enums.py:
  Situ = 10
  InvalidType = 11

csrc/nv_internal/tensorrt_llm/kernels/cutlass_kernels/include/common.h:
  Identity = 9
  InvalidType = 10

后续硬门槛

Phase 1 必须先完成以下内容,才允许进入整模型实验:

  1. 为 SM120 CUTLASS runner 建立 SiTU 数学参考与 MXFP8×MXFP4 正确性测试。
  2. 明确 Kimi checkpoint 的 gate/up 排列以及 (4.0, 25.0) 参数语义。
  3. 补齐 C++ activation enum、gated 判断、激活实现及 Python/C++ 枚举一致性检查。
  4. 在 SGLang 中只对满足 Kimi SiTU 条件的模型选择新路径;不影响 GPT-OSS、DeepSeek 和现有 fallback。
  5. 覆盖 token 数 1/2/8/32、不同 expert 命中、TP/EP 权重切分以及 CUDA Graph capture/replay。

正确性未通过前,不做吞吐结论,不修改 checkpoint不使用运行时 monkeypatch。