Add minimax M3 MXFP8 MI355X vLLM EAGLE3 (related PR for upstreaming patch https://github.com/vllm-project/vllm/pull/45546)#1745
Conversation
Adds the spec-decoding=mtp sibling of minimaxm3-fp8-mi355x-vllm: same MXFP8 target and ROCm serve shape (--block-size 128, FP8 KV cache, --attention-backend TRITON_ATTN, --enforce-eager, minimax_m3 parsers), plus the Inferact/MiniMax-M3-EAGLE3 draft head via --speculative-config (method eagle3, 3 speculative tokens). Unlike the CUDA recipes the drafter needs no attention_backend override — the FlashInfer page-128/MHA limitation that forced FLASH_ATTN on Blackwell is FlashInfer-specific; the whole server runs on TRITON_ATTN here, which serves the MHA draft fine. Benchmark prompts run through the chat template so acceptance reflects real text. Search space mirrors the non-MTP entry trimmed at the extreme-concurrency end (tp2-ep2 dropped), matching the b300/b200 MTP precedent. Launcher needs no change — launch_mi355x-amds.sh already resolves the _mtp script via SPEC_SUFFIX. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Test PR built on the EAGLE3 MI355X recipe (60d9910). The shipped vllm/vllm-openai-rocm:minimax-m3 image lacks SupportsEagle3 on the AMD MiniMax-M3 model, so method=eagle3 aborts engine init. Rather than wait for an image rebuild, the recipe applies the fix (functionstackx/vllm#1, ported from nvidia/model.py) in-place to the installed vllm before serving — adds EagleModelMixin + aux-hidden-state emission to the inner model and SupportsEagle3 to the two outer classes. The patch is idempotent and hard-fails if the installed amd/model.py drifted from the expected base (verified byte-identical to the image commit g4a560dd8d). Validates EAGLE3 + Inferact/MiniMax-M3-EAGLE3 on real MI355X hardware ahead of the upstream fix landing in the image. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…le3 test Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
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
|
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. |
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=27477411944 |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 149e11e. Configure here.
| if [[ "$MODEL" != /* ]]; then | ||
| hf download "$MODEL" | ||
| hf download "$DRAFT_MODEL" | ||
| fi |
There was a problem hiding this comment.
Draft download lacks NFS retry
Medium Severity
The recipe fetches the unstaged Inferact/MiniMax-M3-EAGLE3 draft with a single hf download into the shared NFS HF cache, while the MI355X launcher mounts that cache for MiniMax-M3 runs. Parallel matrix jobs can contend on hub lock files the same way as other MiniMax MTP recipes on network storage, but this script omits the retry loop those siblings use for the draft.
Reviewed by Cursor Bugbot for commit 149e11e. Configure here.
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=27477412884 |
|
/reuse-sweep-run |
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=27480644316 |


Summary
PR for upstreaming patch vllm-project/vllm#45546
Test PR to validate the MiniMax-M3 EAGLE3 fix on real MI355X hardware before the ROCm image is rebuilt. (Re-opened from #1744, which hit a GitHub Actions glitch.) Built on the EAGLE3 MI355X recipe (60d9910f).
Background
EAGLE3 MTP on MI355X failed engine init (
RuntimeError: Model does not support EAGLE3 interface but aux_hidden_state_outputs was requested). Root cause: the MiniMax-M3 impl is platform-split, and the AMD model class (vllm/models/minimax_m3/amd/model.py) doesn't implementSupportsEagle3, while the NVIDIA one does — which is why B300/B200/H100/H200 pass and MI355X doesn't. Fix authored upstream as a draft on the fork: functionstackx/vllm#1.What this PR does
The recipe applies that fix in-place to the installed vLLM inside the container, immediately before
vllm serve:EagleModelMixinto the innerMiniMaxM3Model+ aux-hidden-state emission inforward(), andSupportsEagle3toMiniMaxM3SparseForCausalLM/MiniMaxM3SparseForConditionalGeneration— mirroringnvidia/model.py.amd/model.pyhas drifted from the expected base, so we never silently run unpatched and mislabel the result.amd/model.py(commitg4a560dd8d) is byte-identical to the patch base, all 5 anchors match exactly, the patched sourceast.parses, and the embedded patcher applies + is idempotent on a sandboxed copy of the image file.Serve config unchanged from the EAGLE3 recipe:
--speculative-config '{"method":"eagle3","model":"Inferact/MiniMax-M3-EAGLE3","num_speculative_tokens":3}', TRITON_ATTN,--enforce-eager, block-size 128.Expected outcome
Green → the upstream patch is correct and the held #1742 recipe just needs that patch in the image. This PR is a validation harness, not meant to merge as-is (the runtime monkey-patch should be replaced by a rebuilt image).
🤖 Generated with Claude Code
Note
Medium Risk
The recipe mutates installed vLLM model code at runtime; drift or patch failure can break jobs or skew results, though it fails loudly on mismatch. Scope is benchmark/CI only, not production serving.
Overview
Adds MI355X EAGLE3 speculative-decoding coverage for MiniMax-M3 MXFP8 vLLM: a new
minimaxm3-fp8-mi355x-vllm-mtpCI config andminimaxm3_fp8_mi355x_mtp.sh, plus a perf-changelog entry.The config pairs
MiniMaxAI/MiniMax-M3-MXFP8with draftInferact/MiniMax-M3-EAGLE3(spec-decoding: mtp, 3 tokens). Search space follows the non-MTP MI355X recipe but caps high concurrency and drops tp2-ep2, aligned with other MiniMax-M3 MTP entries.The shell recipe serves with EAGLE3
--speculative-config, downloads the draft model, uses TRITON_ATTN (no CUDA-style drafter backend override), and runs benchmarks with--use-chat-template. Because the pinned ROCm image’s AMDminimax_m3model lacksSupportsEagle3, the job patches installedvllmin-place beforevllm serve(idempotent, aborts if anchors drift)—intended as a hardware validation harness until upstream/image picks up the fix.Reviewed by Cursor Bugbot for commit 5d1ddae. Bugbot is set up for automated code reviews on this repo. Configure here.