Skip to content

[Klaud Cold] minimaxm3-fp8-gb300-dynamo-vllm-mtp: day-zero GB300 MXFP8 EAGLE3 MTP + FULL_DECODE_ONLY CG / 新增 GB300 MXFP8 EAGLE3 MTP 配方,解码启用 FULL_DECODE_ONLY 图模式 - #2486

Merged
functionstackx merged 4 commits into
mainfrom
feat/minimaxm3-fp8-gb300-dynamo-vllm-mtp-dayzero
Aug 4, 2026
Merged

[Klaud Cold] minimaxm3-fp8-gb300-dynamo-vllm-mtp: day-zero GB300 MXFP8 EAGLE3 MTP + FULL_DECODE_ONLY CG / 新增 GB300 MXFP8 EAGLE3 MTP 配方,解码启用 FULL_DECODE_ONLY 图模式#2486
functionstackx merged 4 commits into
mainfrom
feat/minimaxm3-fp8-gb300-dynamo-vllm-mtp-dayzero

Conversation

@xinli-sw

@xinli-sw xinli-sw commented Aug 4, 2026

Copy link
Copy Markdown
Collaborator

Summary

Verbatim port of minimaxm3-fp8-gb300-dynamo-vllm-mtp branch onto current main, with one addition: cudagraph_mode: FULL_DECODE_ONLY added to all 11 decode vllm_config sections.

中文说明

minimaxm3-fp8-gb300-dynamo-vllm-mtp 分支原样移植至当前 main,并在全部 11 个解码 vllm_config 中新增 cudagraph_mode: FULL_DECODE_ONLY

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Thanks for the contribution! Please reach out to respective companies' CODEOWNER to fill in the latest PR_REVIEW_CHECKLIST.md before pinging core maintainer on Slack for review. In order for the signoff PR check bot to trigger, you must follow the PR_REVIEW_CHECKLIST.md template correctly, including the phrase As a PR reviewer and CODEOWNER, I have reviewed this and have.

For PR verification, add the full-sweep-fail-fast label (strongly recommended) to this PR — the benchmark sweep only runs on labeled PRs. Use full-sweep-enabled only if you need matrix jobs to keep running past a failure.

PR authors are responsible for ensuring that after merging, all GitHub Action jobs fully pass. A lot of the time, failures are just flakes and simply re-running the failed jobs will fix it. See GitHub's docs on re-running failed jobs


感谢你的贡献!请联系相应公司的 CODEOWNER 填写最新的 PR_REVIEW_CHECKLIST.md,然后再在 Slack 上联系核心维护者进行审阅。为了触发 signoff PR 检查机器人,你必须正确遵循 PR_REVIEW_CHECKLIST.md 模板,包括保留英文语句 As a PR reviewer and CODEOWNER, I have reviewed this and have

如需进行 PR 验证,请为此 PR 添加 full-sweep-fail-fast 标签(强烈推荐)— 基准测试 sweep 仅在带有标签的 PR 上运行。仅当需要矩阵任务在失败后继续运行时才使用 full-sweep-enabled

PR 作者有责任确保合并后所有 GitHub Action 任务完全通过。 很多时候失败只是偶发抖动(flake),重新运行失败的任务即可解决。参见 GitHub 关于重新运行失败任务的文档

max-num-seqs: 1024
max-num-batched-tokens: 16384
max-cudagraph-capture-size: 2048
cudagraph_mode: FULL_DECODE_ONLY

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 All 11 new decode vllm_config blocks in this PR set cudagraph_mode: FULL_DECODE_ONLY as a bare top-level key (e.g. line 104 in 1p1d-dep2-tp4-eagle3-c1-8k1k.yaml, and the same line in the other 10 sibling files), but every other recipe in this repo enables that mode by embedding it inside the compilation-config JSON blob (e.g. compilation-config: '{"cudagraph_mode":"FULL_DECODE_ONLY",...}'). Since srt-slurm passes top-level vllm_config keys through as --<key> CLI flags, this likely emits an unrecognized --cudagraph_mode flag (crashing decode server startup) or is silently dropped — either way defeating the PR's sole stated purpose of enabling FULL_DECODE_ONLY CUDA graphs on decode.

Extended reasoning...

The bug: every one of the 11 new decode vllm_config blocks added by this PR sets cudagraph_mode: FULL_DECODE_ONLY as a bare, top-level recipe key sitting alongside max-cudagraph-capture-size, kv-cache-dtype, etc. For example, in 1p1d-dep2-tp4-eagle3-c1-8k1k.yaml:

    decode:
      ...
      max-cudagraph-capture-size: 2048
      cudagraph_mode: FULL_DECODE_ONLY

Why this deviates from the established pattern: grepping the repo shows cudagraph_mode is enabled in 100+ places across dozens of recipe files, and in every single one of them it is embedded inside a compilation-config JSON string, never set as a bare key. For instance, the sibling minimax-m3/b200-fp4/8k1k/*.yaml recipes (same model family) do:

compilation-config: '{"cudagraph_mode":"FULL_DECODE_ONLY","custom_ops":["+rms_norm"],"pass_config":{}}'

The same pattern holds for the deepseek-v4 and kimi-k2.5-fp4 recipe families. This is because cudagraph_mode is a field of vLLM's CompilationConfig, not a standalone engine-args flag — there is no --cudagraph-mode/--cudagraph_mode CLI argument in vLLM's argparse; it can only be set via --compilation-config (JSON) or the -O dot-notation shorthand. That's precisely why every other recipe author routed it through the JSON blob instead of a bare key.

How this breaks at runtime: the other 20+ keys in these same vllm_config blocks (no-enable-flashinfer-autotune, kv-transfer-config, max-cudagraph-capture-size, tensor-parallel-size, etc.) are all kebab-case, matching srt-slurm's convention of passing top-level vllm_config keys through verbatim as --<key> CLI flags to vllm serve. cudagraph_mode is the only snake_case key in these files — it looks like the author copy-pasted the JSON field name but forgot to wrap it inside compilation-config. Under that passthrough convention, this key gets emitted as --cudagraph_mode FULL_DECODE_ONLY. Since vLLM has no such CLI flag, this either (a) is rejected by argparse as an unrecognized argument, crashing decode-server startup, or (b) is silently dropped by the recipe-to-CLI translation, in which case FULL_DECODE_ONLY is simply never applied.

Step-by-step proof:

  1. PR description states the sole functional change is: 'in all 11 decode vllm_config sections, add cudagraph_mode: FULL_DECODE_ONLY.'
  2. Every established recipe in the repo that has ever enabled this mode does so via compilation-config: '{"cudagraph_mode":"FULL_DECODE_ONLY",...}' — confirmed by grep across 70+ files, including the same-model minimax-m3/b200-fp4 sibling recipes.
  3. These 11 new files instead add a bare top-level cudagraph_mode: FULL_DECODE_ONLY key at decode-block scope (e.g. line 104 of 1p1d-dep2-tp4-eagle3-c1-8k1k.yaml), with none of the 11 decode blocks touching compilation-config at all.
  4. srt-slurm's recipe schema maps top-level vllm_config keys to --<key> vLLM CLI flags 1:1 (evidenced by every other kebab-case key in the same block mapping directly to a real vLLM flag).
  5. vLLM's CLI has no top-level --cudagraph-mode/--cudagraph_mode engine argument — that field only exists inside CompilationConfig, settable via --compilation-config JSON.
  6. Therefore this key either crashes the decode vLLM server at startup (unrecognized argument) or is silently ignored, and in neither case is FULL_DECODE_ONLY CUDA graph mode actually enabled — defeating the entire stated purpose of the PR.

The fix: merge the key into the decode compilation-config JSON blob, consistent with every other recipe, e.g. add compilation-config: '{"cudagraph_mode":"FULL_DECODE_ONLY"}' to each of the 11 decode blocks (or fold it into an existing compilation-config entry if one is later added) instead of the current bare cudagraph_mode: FULL_DECODE_ONLY key.

Comment thread perf-changelog.yaml Outdated
Comment on lines +5428 to +5443

- config-keys:
- minimaxm3-fp8-gb300-dynamo-vllm-mtp
scenario-type:
- fixed-seq-len
description:
- "Add MiniMax-M3-MXFP8 GB300 8k1k disaggregated Dynamo-vLLM EAGLE3 MTP Pareto"
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2478

- config-keys:
- minimaxm3-fp8-gb300-dynamo-vllm-mtp
scenario-type:
- fixed-seq-len
description:
- "Bump MiniMax-M3-MXFP8 GB300 EAGLE3 MTP recipes to vLLM nightly 5e35a6f4f and enable CUTLASS MSA sparse decode backend on decode servers"
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2478

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Both new perf-changelog.yaml entries for minimaxm3-fp8-gb300-dynamo-vllm-mtp link to PR #2478 instead of #2486, which is the PR actually landing this config-key on main (#2478 is still open/unmerged). Every other entry in the file points to its own introducing PR, so this reads as a stale reference carried over from the source branch; it should point to #2486. The entries also don't mention the cudagraph_mode: FULL_DECODE_ONLY addition, which is this PR's headline change.

Extended reasoning...

What's wrong: The two new perf-changelog.yaml entries (lines 5435 and 5443) for minimaxm3-fp8-gb300-dynamo-vllm-mtp both set pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2478. This PR is #2486. Verifiers checked via the GitHub REST API and confirmed #2478 is still open/unmerged, with head branch minimaxm3-fp8-gb300-dynamo-vllm-mtp — i.e. it's the exact source branch this PR describes itself as a "verbatim port" of. So #2478 will never itself land on main; #2486 is the PR that actually introduces minimaxm3-fp8-gb300-dynamo-vllm-mtp into configs/nvidia-master.yaml.

Why this is inconsistent with the file's convention: Scanning the sibling entries in perf-changelog.yaml shows a uniform pattern — every pr-link points to the PR that actually merged the corresponding change into main (e.g. #2473, #2471, #2483, #2470, #2468, and #2446 for the minimaxm3-fp* family all self-reference their own introducing PR). These two new entries break that pattern by pointing at a PR that is superseded by this one and will likely be closed unmerged once #2486 lands, leaving a dangling/misleading link.

Why existing tooling doesn't catch it: pr-link is purely informational — per AGENTS.md, only config-keys drives CI/benchmark triggering, so nothing in the pipeline validates or dereferences this field. It's a silent documentation drift that only a human (or link-checker) tracing history would notice.

Step-by-step proof:

  1. This PR ([Klaud Cold] minimaxm3-fp8-gb300-dynamo-vllm-mtp: day-zero GB300 MXFP8 EAGLE3 MTP + FULL_DECODE_ONLY CG / 新增 GB300 MXFP8 EAGLE3 MTP 配方,解码启用 FULL_DECODE_ONLY 图模式 #2486) adds the minimaxm3-fp8-gb300-dynamo-vllm-mtp config-key to configs/nvidia-master.yaml for the first time (no such key existed in main before this diff).
  2. perf-changelog.yaml gets two new entries for that config-key (lines 5428-5443), both with pr-link: .../pull/2478.
  3. Querying GitHub for PR Add MiniMax-M3-MXFP8 GB300 disaggregated Dynamo-vLLM EAGLE3 MTP #2478 shows it is OPEN, not merged, with head ref minimaxm3-fp8-gb300-dynamo-vllm-mtp — the literal source branch this PR's description says was "ported onto current main."
  4. Therefore, once [Klaud Cold] minimaxm3-fp8-gb300-dynamo-vllm-mtp: day-zero GB300 MXFP8 EAGLE3 MTP + FULL_DECODE_ONLY CG / 新增 GB300 MXFP8 EAGLE3 MTP 配方,解码启用 FULL_DECODE_ONLY 图模式 #2486 merges, the config-key exists on main because of [Klaud Cold] minimaxm3-fp8-gb300-dynamo-vllm-mtp: day-zero GB300 MXFP8 EAGLE3 MTP + FULL_DECODE_ONLY CG / 新增 GB300 MXFP8 EAGLE3 MTP 配方,解码启用 FULL_DECODE_ONLY 图模式 #2486, but the changelog says Add MiniMax-M3-MXFP8 GB300 disaggregated Dynamo-vLLM EAGLE3 MTP #2478 — a PR that isn't merged and (per the port framing) isn't expected to be.
  5. Contrast with e.g. the entry for minimaxm3-fp4-b300-dynamo-vllm-mtp-legacy-dep4 a few lines above, whose pr-link correctly points at feat(minimaxm3-fp4-b300-dynamo-vllm-mtp-legacy-dep4): bump vLLM nightly to 5e35a6f4, enable cutlass MSA decode / 更新 minimaxm3-fp4-b300-dynamo-vllm-mtp-legacy-dep4 vLLM 镜像至 5e35a6f4,启用 cutlass MSA 解码后端 #2483, the actual PR that merged that change.

On the refutation: One reviewer argued the pr-link might be intentional attribution to the "substantive originating PR" #2478 (crediting where the recipes and Pareto data were actually developed), pointing to the word "Bump" in the second entry's description as evidence it documents #2478's own history rather than this port. That's a plausible provenance argument, but it cuts against the file's own established convention — no other entry in perf-changelog.yaml uses pr-link as an "origin/attribution" pointer; every other entry uses it as "the PR that merged this into main," including entries for other verbatim-port-style bumps. Given #2478 won't merge on its own, keeping it as the link produces a permanently-dangling reference to a closed/superseded PR, which is worse for future traceability than pointing at #2486, the PR that actually shipped the change.

Impact and fix: No functional impact — this doesn't affect CI, benchmark triggering, or recipe correctness, since pr-link is metadata only. It's a one-line fix: change both pr-link values to https://github.com/SemiAnalysisAI/InferenceX/pull/2486, and optionally add a short line noting the cudagraph_mode: FULL_DECODE_ONLY addition to decode configs, since that's the actual headline change of this PR and isn't otherwise documented in the changelog.

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

@functionstackx

Copy link
Copy Markdown
Collaborator

/reuse-sweep-run

@functionstackx
functionstackx merged commit fc63c4a into main Aug 4, 2026
27 checks passed
@functionstackx
functionstackx deleted the feat/minimaxm3-fp8-gb300-dynamo-vllm-mtp-dayzero branch August 4, 2026 21:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Development

Successfully merging this pull request may close these issues.

2 participants