Skip to content

[Klaud Cold] minimaxm3-fp4-b200-dynamo-vllm-mtp: day-zero B200 disagg EAGLE3 recipes (mirrored from B300) / 新增 MiniMax M3 NVFP4 B200 分离式 EAGLE3 配方 - #2462

Merged
functionstackx merged 15 commits into
mainfrom
feat/minimaxm3-fp4-b200-dynamo-vllm-mtp-v2
Aug 4, 2026
Merged

[Klaud Cold] minimaxm3-fp4-b200-dynamo-vllm-mtp: day-zero B200 disagg EAGLE3 recipes (mirrored from B300) / 新增 MiniMax M3 NVFP4 B200 分离式 EAGLE3 配方#2462
functionstackx merged 15 commits into
mainfrom
feat/minimaxm3-fp4-b200-dynamo-vllm-mtp-v2

Conversation

@xinli-sw

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

Copy link
Copy Markdown
Collaborator

Summary

Fresh start for B200 disagg MTP. Directly mirrors the working B300 disagg EAGLE3 recipe set — 6 YAML files with only gpu_type: b200 changed.

  • 6 srt-slurm recipe YAMLs under benchmarks/multi_node/srt-slurm-recipes/vllm/minimax-m3/b200-fp4/8k1k/mtp/
  • minimaxm3-fp4-b200-dynamo-vllm-mtp master config entry (runner: b200-multinode), mirrored from B300 MTP

中文说明

B200 分离式 MTP 全新起点,直接复用已验证的 B300 分离式 EAGLE3 配方集,仅将 gpu_type 改为 b200

@github-actions

github-actions Bot commented Aug 3, 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 关于重新运行失败任务的文档

Comment thread perf-changelog.yaml Outdated
Comment on lines +5358 to +5363

- config-keys:
- minimaxm3-fp4-b200-dynamo-vllm-mtp
description:
- "Add MiniMax M3 NVFP4 B200 disagg EAGLE3 MTP recipes, mirrored from B300"
pr-link: TBD

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.

🟡 The new perf-changelog.yaml entry sets pr-link: TBD instead of a real PR URL — every other entry in the file uses https://github.com/SemiAnalysisAI/InferenceX/pull/<N>, matching the template documented in AGENTS.md. Since this is PR #2462, it should read https://github.com/SemiAnalysisAI/InferenceX/pull/2462.

Extended reasoning...

The last entry added to perf-changelog.yaml (for the minimaxm3-fp4-b200-dynamo-vllm-mtp config) sets pr-link: TBD, whereas every prior entry in this ~5360-line file uses a concrete https://github.com/SemiAnalysisAI/InferenceX/pull/<N> URL. grep -c 'pr-link:\s*TBD' perf-changelog.yaml returns exactly 1 — this is the only placeholder value in the file.

The convention is also explicit in AGENTS.md, which documents the changelog entry template with pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/XXX — i.e. the placeholder is meant to take the shape of a real URL with a stand-in number, not the bare string TBD. Since this PR is #2462, the correct value is https://github.com/SemiAnalysisAI/InferenceX/pull/2462.

Step-by-step:

  1. Open perf-changelog.yaml and search for pr-link: — every one of the ~600+ prior entries resolves to a full GitHub pull URL.
  2. The new entry at the bottom of the file (lines 5358-5363) is the sole exception: pr-link: TBD.
  3. Any tooling that treats pr-link as a parseable URL (e.g. to link back to the originating PR from a changelog viewer, or to validate changelog entries in CI) would fail or produce a broken link for this one entry.
  4. Since the PR author already knows the PR number ahead of merge in this repo's workflow (branch name/PR title references [Klaud Cold] minimaxm3-fp4-b200-dynamo-vllm-mtp: day-zero B200 disagg EAGLE3 recipes (mirrored from B300) / 新增 MiniMax M3 NVFP4 B200 分离式 EAGLE3 配方 #2462), there's no reason to leave it as a placeholder — it can be filled in directly as https://github.com/SemiAnalysisAI/InferenceX/pull/2462.

This has no functional impact on the benchmark sweep itself — the sweep triggers off config-keys, not pr-link — so it's purely a documentation/traceability nit. Fix is a one-line change.

Comment on lines +7770 to +7799
minimaxm3-fp4-b200-dynamo-vllm-mtp:
image: vllm/vllm-openai:nightly-4080263bb2c5d10deac17aaeb88e0823bc35bca9
model: nvidia/MiniMax-M3-NVFP4
model-prefix: minimaxm3
runner: b200-multinode
precision: fp4
framework: dynamo-vllm
router: { name: dynamo-router, version: "1.3.0.dev20260710" }
kv-p2p-transfer: nixl
multinode: true
disagg: true
scenarios:
fixed-seq-len:
- isl: 8192
osl: 1024
search-space:
- spec-decoding: "mtp"
conc-list: [24, 48]
prefill:
num-worker: 1
tp: 2
ep: 2
dp-attn: true
additional-settings:
- "CONFIG_FILE=recipes/vllm/minimax-m3/b200-fp4/8k1k/mtp/1p6d-dep2-tp4-eagle3-8k1k.yaml"
decode:
num-worker: 6
tp: 4
ep: 1
dp-attn: false

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.

🟡 The new 2p1d-dep2-dep4-eagle3-8k1k.yaml recipe file is never referenced by a CONFIG_FILE= entry in configs/nvidia-master.yaml, so it's dead code that will never run in the sweep. On B300 this same scenario is wired via a separate minimaxm3-fp4-b300-dynamo-vllm-mtp-legacy-dep4 master-config entry; adding the analogous minimaxm3-fp4-b200-dynamo-vllm-mtp-legacy-dep4 entry (decode ep:4, dp-attn:true, conc-list [256,512]) would complete the mirror.

Extended reasoning...

The bug: This PR adds 6 new B200 recipe YAMLs under benchmarks/multi_node/srt-slurm-recipes/vllm/minimax-m3/b200-fp4/8k1k/mtp/, but the new minimaxm3-fp4-b200-dynamo-vllm-mtp master-config block in configs/nvidia-master.yaml (lines 7770-7856) only contains 5 search-space entries, each pointing at one of the recipe files via CONFIG_FILE=...1p6d, 1p4d, 1p2d, 1p1d, and 2p3d. The sixth file, 2p1d-dep2-dep4-eagle3-8k1k.yaml, is never referenced anywhere.

Proof:

$ grep -c "2p1d-dep2-dep4-eagle3-8k1k" configs/nvidia-master.yaml
0

Every other new file appears exactly once as a CONFIG_FILE= value inside the minimaxm3-fp4-b200-dynamo-vllm-mtp block; 2p1d-dep2-dep4-eagle3-8k1k.yaml appears zero times in the master config. Since the sweep runner only executes recipes that are reachable through a CONFIG_FILE= reference in a search-space entry, this file is orphaned — it will sit in the repo and never be picked up by any benchmark run.

Why this happened / why B300 doesn't have the same gap: The PR description says it "directly mirrors the working B300 disagg EAGLE3 recipe set." Looking at the B300 side (minimaxm3-fp4-b300-dynamo-vllm-mtp, further down in the same file) confirms the same 5 topologies (1p6d/1p4d/1p2d/1p1d/2p3d) are wired inside that one block — but the 2p1d/dep4 scenario is wired through a separate, second master-config entry: minimaxm3-fp4-b300-dynamo-vllm-mtp-legacy-dep4 (conc-list [256, 512], decode ep:4, dp-attn:true), which matches the B200 file's own concurrencies: "256x512" and decode data-parallel-size: 4 / enable-expert-parallel: true settings almost exactly. This PR never created the B200 equivalent of that second entry, so the sixth recipe has no home.

Supporting evidence that this file really was intended to be wired up (not an intentional but currently-unused addition): the new 2p1d-dep2-dep4-eagle3-8k1k.yaml uses a distinct container image (nightly-8e981630c9336233ca9de91452f68918bddbc4e2) that matches the B300 -legacy-dep4 entry's image, whereas all 5 of the other new B200 files use nightly-4080263bb2c5d10deac17aaeb88e0823bc35bca9. That's a strong signal the file was copied specifically to mirror the B300 legacy-dep4 recipe, and the corresponding master-config wiring was simply forgotten.

Impact: Nothing crashes and no other config is broken — this is a silent coverage gap, not a functional regression. The practical effect is that the B200 dep4/2p1d disaggregation topology (concurrencies 256 and 512) will never be benchmarked, leaving this PR's "day-zero" B200 recipe set incomplete relative to its stated goal of mirroring all 6 B300 files.

Fix: Add a minimaxm3-fp4-b200-dynamo-vllm-mtp-legacy-dep4 master-config entry analogous to minimaxm3-fp4-b300-dynamo-vllm-mtp-legacy-dep4, referencing CONFIG_FILE=recipes/vllm/minimax-m3/b200-fp4/8k1k/mtp/2p1d-dep2-dep4-eagle3-8k1k.yaml with decode ep:4/dp-attn:true and conc-list: [256, 512]. Alternatively, if the dep4 topology isn't actually needed yet for B200, delete the unused recipe file to avoid leaving dead code in the tree.

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

1 similar comment
@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

1 similar comment
@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

1 similar comment
@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

1 similar comment
@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

@xinli-sw

xinli-sw commented Aug 4, 2026

Copy link
Copy Markdown
Collaborator Author

/reuse-sweep-run

@Ankur-singh

Copy link
Copy Markdown
Collaborator

As a PR reviewer and CODEOWNER, I have reviewed this and have:

  • Verified that as of the moment of typing this, this is the latest version of PR_REVIEW_CHECKLIST.md
  • Verified that the general code quality meets the InferenceX standard and does not make the code quality any worse.
  • Verified that this PR has passed PR validation. Please link to GitHub Action workflow that shows this. Run Sweep 30933463657
  • Verified that this PR passes evals. Please link to GitHub Action workflow that shows this. Run Sweep 30933463657
  • Verified that speculative decoding PRs uses chat templates to align the AL distribution to real world
  • For agentic workloads: verified that speculative-decoding configs (EAGLE / MTP / draft models) run with simulated synthetic acceptance, with the acceptance-length value taken from the committed golden AL curve in golden_al_distribution/ for that model, thinking mode, and draft length. A submission may choose any supported draft length, but it may not substitute a different acceptance target.
  • Verified against the current MODELS.md that this PR does not submit a deprecated model, scenario, or model-scenario combination.
  • Verified that the model architecture isn't changed with benchmark hacks like using --hf-overrides to skipping indexer for every x layers on models that don't natively support this. As a general rule, we won't accept optimizations that reduces the number of model architecture FLOPs. Anything that makes that same computation run faster is fair game; FLOPs at lower precisions is fine, given that the config passes private evals. As an general north star princple, we should only use optimizations which is used in production by customers that care about accuracy
  • If an company claims that they support vLLM/SGLang as first class LLM inference engines on their hardware, I have verified that the respective vLLM submission made using upstream https://hub.docker.com/u/vllm docker repo, upstream SGLang https://hub.docker.com/u/lmsysorg docker repo. The only exceptions are for new hardware, such as MI455X UALoE72, Vera Rubin NVL72, Rubin NVL8, etc., and for new model architectures where there is an actual reason why vLLM/SGLang does not fundamentally support them yet as supported by vLLM/SGLang community maintainers
  • If an company claims that they support vLLM/SGLang as first class upstream in-tree LLM inference engines on their hardware, I have have verified that the respective vLLM/SGLang submission has been made before additional frameworks (TRT-LLM, ATOM, etc.). The only exceptions are for new hardware, such as MI455X UALoE72, Vera Rubin NVL72, Rubin NVL8, etc., and for new model architectures where there is an actual reason why vLLM/SGLang does not fundamentally support them yet.
  • Verified that every single-node vLLM/SGLang recipe in this PR is documented in the official vLLM recipes and/or the SGLang cookbook:
    • I linked the corresponding upstream PR in the vLLM recipe repo or SGLang repo and verified that it is MERGED before this InferenceX PR merges. An opened, draft, or closed-without-merge upstream PR does not satisfy this requirement. If the matching recipe was already published, I linked the published recipe/cookbook page in the additional detail section below.
  • Verified that this PR does not patch the inference engine or serving stack — the pinned image must run as shipped. This covers .patch files / git apply / patch, inline patches embedded in benchmark scripts (e.g. a python3/sed heredoc that rewrites installed engine sources before serving), in-place edits of site-packages, monkey-patching, overwriting container files, and installing forked/rebuilt engine wheels on top of the pinned image. The only exception is a patch covered by a filled-out waiver at docs/waiver/<PR_NUMBER>.md — named after the PR that introduces the patch and filed in that same PR, stating what is patched, why the unmodified upstream image cannot run this benchmark, the upstream PR/issue link, and the removal plan — which I have linked below in the additional detail section.
  • If any of the above criteria cannot reasonably be satisfied, I have provided additional reasoning below.

Additional detail section:

  • Head reviewed: 84ae2160b947e47675fca3e8d7246b3c15cbcc8d.
  • Item 7 (MODELS.md) — UNCHECKED, and this is the only blocking gap. This config is minimaxm3-fp4-b200-dynamo-vllm-mtp with model-prefix: minimaxm3 and scenario fixed-seq-len at isl: 8192 / osl: 1024, i.e. Single-turn 8k1k for MiniMax-M3. The current MODELS.md deprecation notice states that Monday, August 3, 2026 is the last day for the listed scenarios, and tables it explicitly: "MiniMax-M3 (minimaxm3) | Deprecated: Single-turn 8k1k | Remains: Agentic coding". The per-model row lists MiniMax-M3 active scenarios as "Single-turn 8k1k (until 2026-08-03), Agentic coding (EAGLE3 only from 2026-08-03)". That deprecation is now in effect, so this PR adds a new config for a deprecated model-scenario combination. The submission being a day-zero B200 mirror of an existing B300 recipe does not change the scenario's deprecated status, and the checklist offers no day-zero exception for this item.
  • Validation (item 3): run 30933463657 is a sweep pinned to this exact head and concluded success. All 6 multi-node 8k1k / lanes (1P1D tp4-dep4, 1P1D tp4-tp4, 1P2D, 1P3D, 1P4D, 1P6D) executed non-skipped and succeeded, as did collect-results, compare-results, and calc-success-rate.
  • Evals (item 4): the same run's 6 eval lanes and collect-evals all executed and succeeded. agg_eval_all.json has 6 GSM8K rows for MiniMax-M3-NVFP4, em_strict 0.9522-0.9621 at n_eff 1319, against the 0.90 default bar in utils/evals/thresholds.yaml (no minimaxm3 override exists, so the default applies).
  • Item 5 (spec-decode chat templates) — verified: all six added recipes set use_chat_template: true in their benchmark: block.
  • Item 6 (agentic golden AL) — not applicable: this is a fixed-seq-len 8k1k submission, not an agentic workload, and no simulated-acceptance knobs appear in the diff.
  • Items 11 / 11a (single-node recipe documentation) — not applicable: multi-node disaggregated submission (multinode: true, disagg: true, dynamo-vllm).
  • Item 12 (no engine patches) — verified: none of the six added recipes declares setup_script or any patch key, and the diff contains no .patch files, git apply/patch calls, sed or heredoc rewrites of engine sources, site-packages edits, or forked engine wheel installs. No waiver is required.
  • Item 2 (code quality) — verified: the six recipes mirror the existing B300 EAGLE3 set with only topology and concurrency differences, and the perf-changelog.yaml hunk is purely additive (no deletions, no whitespace changes).
  • Items 8 / 9 / 10: no --hf-overrides or FLOPs-reducing knobs; image is vllm/vllm-openai:nightly-5e35a6f4f9bbc217c599692157ca985c894373f7 from the upstream vLLM Docker org; this is the vLLM submission.

Signed: Ankur-singh

@Klaud-Cold

Copy link
Copy Markdown
Collaborator

❌❌❌ REJECTED ❌❌❌

@Ankur-singh — blocking: this PR adds a new minimaxm3 Single-turn 8k1k (fixed-seq-len 8192/1024) config, but MODELS.md deprecates MiniMax-M3 Single-turn 8k1k after 2026-08-03 (review date: 2026-08-04). Your sign-off correctly left that item unchecked; the deprecation makes the submission unmergeable as-is.

✅ Check 0 (CODEOWNER): PASS — Ankur-singh owns configs/nvidia-master.yaml per CODEOWNERS; remaining paths are catch-all.
✅ Check 1 (sweep on in-PR commit): PASS — run 30933463657 on head 84ae216: all 6 multi-node 8k1k / and 6 multi-node eval / check-runs executed with conclusion success (single-node lanes skipped as empty — multi-node submission).
✅ Check 2 (evals pass): PASS — agg_eval_all.json: 6 GSM8K rows for MiniMax-M3-NVFP4, em_strict 0.9522–0.9621 at n_eff 1319, above the 0.90 default bar (no minimaxm3 override); run used vllm/vllm-openai:nightly-5e35a6f4..., same image as the PR config.
➖ Check 3 (recipe link): N/A — disaggregated/multi-node submission (multinode: true, disagg: true, dynamo-vllm); the recipe-link requirement applies to single-node recipes only.
✅ Check 4 (reuse command): PASS — /reuse-sweep-run posted by xinli-sw (COLLABORATOR).
✅ Check 5 (latest checklist): PASS — all current-template items present; the unchecked items (golden AL, MODELS.md, recipe link) are each explained in the additional detail section.
✅ Check 6 (upstream image / engine-first): PASS — image is upstream vllm/vllm-openai; vLLM entry minimaxm3-fp4-b200-vllm already exists in configs/nvidia-master.yaml.
❌ Check 7 (deprecated models/scenarios): FAIL — MiniMax-M3 (minimaxm3) Single-turn 8k1k is deprecated after 2026-08-03 per the MODELS.md deprecation table ("MiniMax-M3 (minimaxm3) | Deprecated: Single-turn 8k1k | Remains: Agentic coding"); this PR adds minimaxm3-fp4-b200-dynamo-vllm-mtp with scenario fixed-seq-len 8k1k on 2026-08-04.
✅ Check 8 (no architecture hacks): PASS — no --hf-overrides / model-config rewrites; fp8 kv-cache/indexer dtype is precision-only and evals pass.
✅ Check 9 (spec-decode chat template): PASS — all six EAGLE3 recipes set use_chat_template: true.
✅ Check 10 (no engine patches): PASS — no .patch/git apply/heredoc rewrites/site-packages edits/forked engine wheels in the diff.
➖ Check 11 (agentic golden AL): N/A — no agentic spec-decode changes (fixed-seq-len 8k1k only), and no synthetic-acceptance knobs on the non-agentic configs.

@functionstackx

Copy link
Copy Markdown
Collaborator

/reuse-sweep-run

@functionstackx
functionstackx merged commit a82c323 into main Aug 4, 2026
26 checks passed
@functionstackx
functionstackx deleted the feat/minimaxm3-fp4-b200-dynamo-vllm-mtp-v2 branch August 4, 2026 19:43
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.

4 participants