Skip to content

[Klaud Cold] minimaxm3 H200+H100 MTP: day-zero MiniMax-M3 EAGLE3 (MTP) recipes#1739

Merged
functionstackx merged 3 commits into
mainfrom
feat/minimax-m3-h100-h200-mtp-dayzero
Jun 13, 2026
Merged

[Klaud Cold] minimaxm3 H200+H100 MTP: day-zero MiniMax-M3 EAGLE3 (MTP) recipes#1739
functionstackx merged 3 commits into
mainfrom
feat/minimax-m3-h100-h200-mtp-dayzero

Conversation

@functionstackx

@functionstackx functionstackx commented Jun 13, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds the EAGLE3 speculative-decoding (spec-decoding: mtp) siblings of the day-zero MiniMax-M3 MXFP8 H200/H100 recipes (PR #1731, still open against main): MiniMaxAI/MiniMax-M3-MXFP8 target paired with the Inferact/MiniMax-M3-EAGLE3 draft head. This PR targets main and includes only the H100-mtp and H200-mtp variants.

New benchmark scripts

  • benchmarks/single_node/fixed_seq_len/minimaxm3_fp8_h200_mtp.sh
  • benchmarks/single_node/fixed_seq_len/minimaxm3_fp8_h100_mtp.sh

Both are based on the non-MTP H200/H100 scripts from #1731 (mandatory --block-size 128 for MSA sparse/index cache, --language-model-only, HF_HUB_OFFLINE serve to dodge the shared-FS download-lock race, Hopper-compatible MXFP8 MoE backends). H100 keeps its DEP memory-headroom block (higher gmu + per-rank-bounded capture). Additions for MTP:

  • --speculative-config '{"method": "eagle3", "model": "Inferact/MiniMax-M3-EAGLE3", "num_speculative_tokens": 3, "attention_backend": "FLASH_ATTN"}'
  • Drafter pinned to FLASH_ATTN: the EAGLE3 head is MHA, and FlashInfer only supports page size 128 (mandatory here for MSA) through its GQA-only trtllm-gen kernel — engine init dies in FlashInferMetadataBuilder otherwise. This exact failure hit the B300 MTP canary (#1733); FLASH_ATTN takes any multiple-of-16 block size and handles MHA.
  • Cudagraph capture scaled to CONC * (1 + spec tokens) (each running request contributes the extra draft tokens per decode step), capped at 2048. On H100 DEP the per-rank-bounded capture is likewise spec-token-scaled.
  • --use-chat-template on the benchmark client so draft acceptance reflects real text rather than random tokens.

Config (nvidia-master.yaml)

  • minimaxm3-fp8-h200-vllm-mtp: TP4 / TP8 (latency), TP4+EP4 / TP8+EP8 (TEP), TP8+EP8 dp-attn (DEP) across 1k1k and 8k1k — non-MTP search space trimmed at the extreme-concurrency end (dsv4 / minimaxm3 b300-mtp precedent).
  • minimaxm3-fp8-h100-vllm-mtp: TP8-only (no room below TP8 at ~56 GB weights/GPU); DEP omitted (KV-cache init fails at high conc on the non-MTP entry, draft only tightens it).

Launcher fix (required plumbing)

The three H100 launchers (launch_h100-cw.sh, launch_h100-cr.sh, launch_h100-dgxc-slurm.sh) hardcoded _h100.sh and never gained the _mtp routing the H200 launchers have carried since #392. Without this, an mtp config on H100 silently runs the non-MTP script. Added SPEC_SUFFIX to all three (no-op for non-mtp). This also fixes the same latent bug for the existing qwen3.5-fp8-h100-sglang-mtp config.

perf-changelog

Combined entry for both new config keys.

Validation

  • generate_sweep_configs.py test-config --config-keys minimaxm3-fp8-h200-vllm-mtp minimaxm3-fp8-h100-vllm-mtp generates 42 configs cleanly (scenario-trimmed max-model-len 2304 / 9472, all spec-decoding=mtp).
  • bash -n passes on both scripts and all three modified launchers.
  • Script-name resolution simulated: mtp_mtp.sh, none_h100.sh.

🤖 Generated with Claude Code


Note

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

Overview
Adds EAGLE3 speculative decoding (spec-decoding: mtp) benchmark coverage for MiniMax-M3 MXFP8 on H200 and H100, pairing MiniMaxAI/MiniMax-M3-MXFP8 with the Inferact/MiniMax-M3-EAGLE3 draft (3 tokens, drafter FLASH_ATTN).

New scripts minimaxm3_fp8_h200_mtp.sh and minimaxm3_fp8_h100_mtp.sh extend the non-MTP recipes with --speculative-config, spec-scaled CUDA graph capture, chat-templated serving benchmarks, and draft-model HF caching. H100 keeps extra DEP memory tuning (higher GMU, per-rank capture bounds).

nvidia-master.yaml gains minimaxm3-fp8-h200-vllm-mtp and minimaxm3-fp8-h100-vllm-mtp with concurrency search spaces trimmed vs non-MTP (H100 TP8-only, no DEP). perf-changelog.yaml documents both keys.

H100 launchers (launch_h100-cw.sh, -cr.sh, -dgxc-slurm.sh) now set SPEC_SUFFIX so mtp configs run *_h100_mtp.sh instead of silently using the non-MTP script (parity with H200 since #392).

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

Adds the spec-decoding=mtp siblings of the day-zero H200/H100 recipes
(PR #1731): same MXFP8 target and serve shape, plus the
Inferact/MiniMax-M3-EAGLE3 draft head via --speculative-config (method
eagle3, 3 speculative tokens). The drafter is pinned to FLASH_ATTN —
the EAGLE3 head is MHA and FlashInfer only supports the mandatory page
size 128 through its GQA-only trtllm-gen kernel (the failure hit on the
B300 MTP canary). Cudagraph capture scales to CONC * (1 + spec tokens);
benchmark prompts run through the chat template so acceptance reflects
real text. Search spaces mirror the non-MTP entries trimmed at the
extreme-concurrency end (dsv4 / minimaxm3 b300-mtp precedent); H100
stays TP8-only with DEP omitted.

Also adds SPEC_SUFFIX to the three H100 launchers (cw, cr,
dgxc-slurm), which hardcoded _h100.sh and never gained the _mtp
routing the H200 launchers have carried since #392 — without this, an
mtp config on H100 silently runs the non-MTP script. This also fixes
the latent same-bug for the existing qwen3.5-fp8-h100-sglang-mtp
config.

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.

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

Copy link
Copy Markdown
Contributor

1 similar comment
@github-actions

Copy link
Copy Markdown
Contributor

@functionstackx

Copy link
Copy Markdown
Collaborator Author

/reuse-sweep-run

@functionstackx functionstackx merged commit 6e8ebf5 into main Jun 13, 2026
15 of 22 checks passed
@functionstackx functionstackx deleted the feat/minimax-m3-h100-h200-mtp-dayzero branch June 13, 2026 04:22
@github-actions

Copy link
Copy Markdown
Contributor

functionstackx added a commit that referenced this pull request Jun 13, 2026
…onc 1 (#1743)

* minimaxm3 H200/H100 MTP: start TP-only latency rows at conc 1

Drop the conc-start of the TP-only (latency) search-space rows from 4
to 1 for minimaxm3-fp8-h200-vllm-mtp and minimaxm3-fp8-h100-vllm-mtp,
matching the conc-1 start used on the non-MTP day-zero recipes so the
sweeps capture the single-request latency point. TEP/DEP rows keep
their higher concurrency starts (128/256). Follow-up to #1739
(6e8ebf5).

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

* perf-changelog: fill in PR link for minimaxm3 H200/H100 MTP conc-1

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

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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.

1 participant