Skip to content

[NVIDIA] feat: MiniMax M3 Day 0 MTP (EAGLE3) support B300#1737

Closed
cquil11 wants to merge 2 commits into
mainfrom
feat/minimax-m3-mtp-b300
Closed

[NVIDIA] feat: MiniMax M3 Day 0 MTP (EAGLE3) support B300#1737
cquil11 wants to merge 2 commits into
mainfrom
feat/minimax-m3-mtp-b300

Conversation

@cquil11

@cquil11 cquil11 commented Jun 13, 2026

Copy link
Copy Markdown
Collaborator

MiniMax-M3 MXFP8 EAGLE3 speculative-decoding sweep on B300 — the recipe's spec_decoding feature (https://recipes.vllm.ai/MiniMaxAI/MiniMax-M3).

  • New config minimaxm3-fp8-b300-vllm-mtp and benchmarks/single_node/fixed_seq_len/minimaxm3_fp8_b300_mtp.sh.
  • Spec config (verbatim from recipe): {"method": "eagle3", "model": "Inferact/MiniMax-M3-EAGLE3", "num_speculative_tokens": 3, "attention_backend": "FLASH_ATTN"}.
  • --use-chat-template on the benchmark (mandatory for *_mtp.sh).
  • Latency-end sweep (TP8 / TP4 / TP8+EP8) at low/mid concurrency (35 jobs). No TP2 — the EAGLE3 draft head on top of ~222 GB/GPU MXFP8 weights leaves too little KV headroom at TP2.
  • EAGLE3 draft head served from the b300 /data/models tree (already bind-mounted; no launcher change needed).

Builds on the merged non-MTP B300 recipe (#1724). Sweep results + acceptance-rate/speedup vs STP to follow.

🤖 Generated with Claude Code


Note

Low Risk
Benchmark and CI config only; no changes to application runtime, auth, or data paths beyond new vLLM serve flags in test jobs.

Overview
Adds day-zero MTP (EAGLE3 speculative decoding) coverage for MiniMax-M3 MXFP8 on B300, alongside the existing non-MTP minimaxm3-fp8-b300-vllm recipe.

A new master config minimaxm3-fp8-b300-vllm-mtp defines latency-focused fixed-seq-len sweeps at 1k1k and 8k1k with spec-decoding: mtp on TP8, TP4, and TP8+EP8 (no TP2, documented as KV headroom limits with the draft head). The companion script minimaxm3_fp8_b300_mtp.sh starts vLLM with recipe-aligned --speculative-config (EAGLE3 + Inferact/MiniMax-M3-EAGLE3, 3 speculative tokens, FLASH_ATTN), resolves/stages the draft model under the B300 /data/models layout, scales --max-cudagraph-capture-size for spec decode, and runs serving benchmarks with --use-chat-template so EAGLE acceptance matches training.

perf-changelog.yaml documents the new config key and PR link.

Reviewed by Cursor Bugbot for commit f6b6935. Bugbot is set up for automated code reviews on this repo. Configure here.

EAGLE3 speculative decoding for MiniMax-M3 MXFP8 on B300, per the recipe
spec_decoding feature (Inferact/MiniMax-M3-EAGLE3 draft head, 3 spec
tokens, FLASH_ATTN). New minimaxm3_fp8_b300_mtp.sh (--speculative-config
+ --use-chat-template) and minimaxm3-fp8-b300-vllm-mtp config
(latency-end layouts, no tp2). Draft head served from /data/models.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Thanks for the contribution! For vLLM & SGLang, please ensure that your recipes is similar to the official vLLM recipes and/or the SGLang cookbook

If it is not, please create a PR first before we can merge your single node PR into the master branch. Let's ensure that the documentation is first class such that the entire ML community can benefit from your hard work! Thank you

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. If re-running failed jobs is attempted, PR authors are responsible for ensuring it passes. See GitHub's docs on re-running failed jobs: https://docs.github.com/en/actions/how-tos/manage-workflow-runs/re-run-workflows-and-jobs#re-running-failed-jobs-in-a-workflow

As a rule of thumb, generally, PR authors should request a review & get a PR approval from the respective companies' CODEOWNERS before requesting a review from core maintainers.

If additional help is needed, PR authors can reach out to core maintainers over Slack.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit f6b6935. Configure here.

DRAFT_MODEL="Inferact/MiniMax-M3-EAGLE3"
fi
fi
if [[ "$DRAFT_MODEL" != /* ]]; then hf download "$DRAFT_MODEL"; fi

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Empty draft dir not populated

Medium Severity

The EAGLE3 draft path is chosen when its directory exists, but unlike the main MODEL_PATH block there is no check that the directory actually contains weights. An empty MiniMax-M3-EAGLE3 sibling under /data/models skips hf download, so vllm serve can fail or load an invalid draft while the primary checkpoint was populated correctly.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit f6b6935. Configure here.

@functionstackx

Copy link
Copy Markdown
Collaborator

superceded by #1733

@cquil11

cquil11 commented Jun 13, 2026

Copy link
Copy Markdown
Collaborator Author

Full-sweep validation: GREEN (37/37 single-node jobs)

Run 27452976016 (full-sweep, minimaxm3 / vllm / b300) completed success, zero failures/cancellations. The dispatch covers both the new minimaxm3-fp8-b300-vllm-mtp (spec-mtp) entries and the merged #1724 minimaxm3-fp8-b300-vllm (spec-none) baseline on the same image/nodes, giving a clean co-located MTP-vs-STP comparison.

EAGLE3 health

  • Draft head resolves to /data/models/MiniMax-M3-EAGLE3 (sibling of MODEL_PATH), arch LlamaForCausalLMEagle3, embeds shared with target, --language-model-only honored. No path/backend/OOM issues.
  • attention_backend: FLASH_ATTN accepted by the minimax-m3 image — no spec-backend rejection.
  • Mean acceptance length ~2.3–2.7 / 4 (1 base + 3 spec); avg draft acceptance ~43–55%; per-position ~0.72 / 0.50 / 0.36. --use-chat-template confirmed working (raw prompts would collapse acceptance to ~1).

MTP vs STP (matched isl/tp/ep/conc)

isl tp ep conc STP tok/s/user MTP tok/s/user int x STP tok/s/GPU(out) MTP tok/s/GPU(out) gpu x accept_len
1k 4 1 1 55.2 131.7 2.39 13.7 32.5 2.37 2.65
1k 4 1 2 53.7 115.3 2.15 26.6 55.9 2.10 2.64
1k 4 1 4 51.7 118.1 2.28 49.8 105.9 2.13 2.65
1k 8 1 1 69.0 157.5 2.28 8.6 19.4 2.27 2.66
1k 8 1 2 67.6 148.1 2.19 16.7 35.6 2.13 2.55
1k 8 1 4 65.9 145.3 2.21 31.6 68.7 2.17 2.65
1k 8 8 1 87.8 195.6 2.23 10.9 23.9 2.20 2.52
1k 8 8 2 85.0 189.5 2.23 21.0 45.2 2.15 2.65
1k 8 8 4 81.0 161.8 2.00 38.8 75.8 1.95 2.44
8k 4 1 1 55.2 106.7 1.93 13.7 26.2 1.92 2.30
8k 4 1 2 53.8 123.3 2.29 26.4 59.7 2.26 2.64
8k 4 1 4 51.0 106.9 2.10 49.0 100.2 2.05 2.54
8k 8 1 1 69.2 138.1 1.99 8.6 16.9 1.98 2.30
8k 8 1 2 67.7 157.2 2.32 16.6 36.6 2.20 2.65
8k 8 1 4 64.6 134.3 2.08 31.0 62.4 2.01 2.55

MTP wins across the entire measured space: ~2.0–2.4x on both tok/s/user and tok/s/GPU, tracking acceptance length. tok/s/GPU scaling ≈ tok/s/user scaling confirms negligible draft overhead. No regime where STP beats MTP at matched config.

MTP pareto frontier (tok/s/user vs tok/s/GPU-out)

tok/s/user tok/s/GPU(out) config
195.6 23.9 1k tp8 ep8 c1
189.5 45.2 1k tp8 ep8 c2
161.8 75.8 1k tp8 ep8 c4
118.1 105.9 1k tp4 ep1 c4

tp8+ep8 owns the latency end; tp4 (ep1) takes the throughput end. Every search-space entry produced results across its full conc range (no removals needed).

@cquil11

cquil11 commented Jun 13, 2026

Copy link
Copy Markdown
Collaborator Author

Closing as superseded by #1733 ([Klaud Cold], merged to main 01:50 UTC), which landed the identical minimaxm3-fp8-b300-vllm-mtp day-zero EAGLE3 recipe with a broader (and now-canonical) search space. This PR was a parallel duplicate.

The full-sweep validation I ran here (run 27452976016, 37/37 single-node green) independently confirms the merged recipe works end-to-end on B300: EAGLE3 draft head loads cleanly from /data/models/MiniMax-M3-EAGLE3, FLASH_ATTN draft backend accepted, mean acceptance length ~2.3–2.7/4, and ~2.0–2.4x tok/s/user and tok/s/GPU vs the co-located non-MTP baseline at every matched config (data in the comment above). No regressions; main's MTP recipe is validated.

@cquil11 cquil11 closed this Jun 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Development

Successfully merging this pull request may close these issues.

2 participants