[Klaud Cold] minimaxm3-fp4-b200-dynamo-vllm-mtp: day-zero B200 disagg EAGLE3 recipes (mirrored from B300) / 新增 MiniMax M3 NVFP4 B200 分离式 EAGLE3 配方 - #2462
Conversation
…es mirrored from B300
|
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 For PR verification, add the 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 模板,包括保留英文语句 如需进行 PR 验证,请为此 PR 添加 PR 作者有责任确保合并后所有 GitHub Action 任务完全通过。 很多时候失败只是偶发抖动(flake),重新运行失败的任务即可解决。参见 GitHub 关于重新运行失败任务的文档 |
|
|
||
| - config-keys: | ||
| - minimaxm3-fp4-b200-dynamo-vllm-mtp | ||
| description: | ||
| - "Add MiniMax M3 NVFP4 B200 disagg EAGLE3 MTP recipes, mirrored from B300" | ||
| pr-link: TBD |
There was a problem hiding this comment.
🟡 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:
- Open
perf-changelog.yamland search forpr-link:— every one of the ~600+ prior entries resolves to a full GitHub pull URL. - The new entry at the bottom of the file (lines 5358-5363) is the sole exception:
pr-link: TBD. - Any tooling that treats
pr-linkas 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. - 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.
| 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 |
There was a problem hiding this comment.
🟡 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.
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=30791203624 |
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=30820219468 |
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=30822900889 |
Summary
Fresh start for B200 disagg MTP. Directly mirrors the working B300 disagg EAGLE3 recipe set — 6 YAML files with only
gpu_type: b200changed.benchmarks/multi_node/srt-slurm-recipes/vllm/minimax-m3/b200-fp4/8k1k/mtp/minimaxm3-fp4-b200-dynamo-vllm-mtpmaster config entry (runner:b200-multinode), mirrored from B300 MTP中文说明
B200 分离式 MTP 全新起点,直接复用已验证的 B300 分离式 EAGLE3 配方集,仅将
gpu_type改为b200。