[Klaud Cold]minimaxm3-fp8-mi300x-vllm-mtp: day-zero MiniMax-M3 EAGLE3 (MTP) MI300X recipe#1749
Conversation
Adds the spec-decoding=mtp sibling of minimaxm3-fp8-mi300x-vllm, based on the MI300X non-MTP recipe + the MI355X MTP recipe. Keeps the MI300X serve shape (BF16 KV cache — gfx942 lacks calibrated ROCm FP8 attention scales — plus --no-enable-prefix-caching, TRITON_ATTN, --enforce-eager, minimax_m3 parsers) and adds the Inferact/MiniMax-M3-EAGLE3 draft via --speculative-config (method eagle3, 3 spec tokens) + chat-template prompts. Carries the same in-place EAGLE3 patch as the MI355X MTP recipe: the shipped ROCm image's AMD MiniMax-M3 model lacks SupportsEagle3, so the recipe patches the installed amd/model.py before serving (functionstackx/vllm#1, upstream vllm-project/vllm#45546; validated green on MI355X). Idempotent; hard-fails on base drift. TP8-only search space (gfx942 192 GB is memory-tight, like H100), TP8 latency rows started at conc 1, matching the H100/MI355X MTP recipes. Also adds SPEC_SUFFIX to launch_mi300x-amds.sh so spec-decoding=mtp routes to the _mtp script (the launcher hardcoded _mi300x.sh). 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. |
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=27487999086 |
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=27487999691 |
|
/reuse-sweep-run |
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=27489883815 |
… (MTP) MI300X recipe (#1749) * minimaxm3-fp8-mi300x-vllm-mtp: day-zero MiniMax-M3 EAGLE3 MI300X recipe Adds the spec-decoding=mtp sibling of minimaxm3-fp8-mi300x-vllm, based on the MI300X non-MTP recipe + the MI355X MTP recipe. Keeps the MI300X serve shape (BF16 KV cache — gfx942 lacks calibrated ROCm FP8 attention scales — plus --no-enable-prefix-caching, TRITON_ATTN, --enforce-eager, minimax_m3 parsers) and adds the Inferact/MiniMax-M3-EAGLE3 draft via --speculative-config (method eagle3, 3 spec tokens) + chat-template prompts. Carries the same in-place EAGLE3 patch as the MI355X MTP recipe: the shipped ROCm image's AMD MiniMax-M3 model lacks SupportsEagle3, so the recipe patches the installed amd/model.py before serving (functionstackx/vllm#1, upstream vllm-project/vllm#45546; validated green on MI355X). Idempotent; hard-fails on base drift. TP8-only search space (gfx942 192 GB is memory-tight, like H100), TP8 latency rows started at conc 1, matching the H100/MI355X MTP recipes. Also adds SPEC_SUFFIX to launch_mi300x-amds.sh so spec-decoding=mtp routes to the _mtp script (the launcher hardcoded _mi300x.sh). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * perf-changelog: fill in PR link for minimaxm3-fp8-mi300x-vllm-mtp (#1749) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Summary
Adds the EAGLE3 speculative-decoding (
spec-decoding: mtp) sibling ofminimaxm3-fp8-mi300x-vllm(#1746): MiniMax-M3 MXFP8 on MI300X (gfx942) single-node vLLM (ROCm), pairing MiniMaxAI/MiniMax-M3-MXFP8 with the Inferact/MiniMax-M3-EAGLE3 draft head. Based on the MI300X non-MTP recipe + the (merged) MI355X MTP recipe (#1745).New benchmark script
benchmarks/single_node/fixed_seq_len/minimaxm3_fp8_mi300x_mtp.sh, mirroringminimaxm3_fp8_mi300x.sh:--no-enable-prefix-caching. Same--block-size 128,--language-model-only,--attention-backend TRITON_ATTN,--enforce-eager,minimax_m3parsers.--speculative-config '{"method":"eagle3","model":"Inferact/MiniMax-M3-EAGLE3","num_speculative_tokens":3}', draft download,--use-chat-templatefor realistic acceptance.vllm/vllm-openai-rocm:minimax-m3image's AMD MiniMax-M3 class lacksSupportsEagle3, so the recipe patches the installedamd/model.pybefore serving ([AI generated draft] minimax_m3(amd): implement SupportsEagle3 for EAGLE3 spec decoding on ROCm functionstackx/vllm#1, upstreamed as [Bug Fix] [MiniMax-M3] Implement EAGLE3 support on the AMD MiniMax M3 vllm-project/vllm#45546). Idempotent; hard-fails on base drift. The image'samd/model.pyis shared across MI300X/MI355X (same ROCm image), so the patch anchors match identically — dry-run verified locally.Config (
amd-master.yaml)minimaxm3-fp8-mi300x-vllm-mtp, same image andmi300xrunner. TP8-only search space (gfx942 192 GB is memory-tight, like H100), with TP8 latency rows started at conc 1 (matching the H100/MI355X MTP recipes):Launcher fix
launch_mi300x-amds.shhardcoded_mi300x.shwith noSPEC_SUFFIX— anmtpconfig would silently run the non-MTP script. AddedSPEC_SUFFIX(same fix applied to the H100 launchers), somtproutes tominimaxm3_fp8_mi300x_mtp.sh.Validation
generate_sweep_configs.py test-config→ 18 configs, allspec-decoding=mtponmi300x, min conc 1, scenario-trimmed max-model-len 2304 / 9472.bash -npasses on the script + launcher; embedded patch dry-run applies cleanly to the image'samd/model.pyandast.parses; launcher routing simulated (mtp→_mtp.sh).Like #1745, this is a validation harness (runtime monkey-patch); once the upstream fix is in a rebuilt ROCm image, the in-place patch idempotently no-ops.
🤖 Generated with Claude Code
Note
Medium Risk
Benchmark-only changes, but the recipe mutates installed vLLM model code at runtime; drift in the image could fail jobs or mis-route MTP sweeps if launcher routing regresses.
Overview
Adds MiniMax-M3 MXFP8 EAGLE3 speculative decoding on MI300X as the
spec-decoding: mtpsibling of the existing non-MTP MI300X recipe, pairing MiniMaxAI/MiniMax-M3-MXFP8 with Inferact/MiniMax-M3-EAGLE3 (3 speculative tokens).A new sweep config
minimaxm3-fp8-mi300x-vllm-mtpinamd-master.yamlkeeps a TP8-only search space (memory-tight gfx942), with TP8 latency sweeps starting at conc 1 and high-concurrency TP8+EP8 rows for 1k1k and 8k1k.The new script
minimaxm3_fp8_mi300x_mtp.shserves with EAGLE3--speculative-config, downloads the draft model, uses chat-template prompts for realistic acceptance, and retains MI300X-specific choices (BF16 KV,TRITON_ATTN, no prefix caching). Because the shipped ROCm image’s AMDMiniMax-M3model lacksSupportsEagle3, the recipe patches installedamd/model.pyin-place beforevllm serve(idempotent, aborts on anchor drift).launch_mi300x-amds.shnow setsSPEC_SUFFIXwhenSPEC_DECODING=mtpso MTP configs run*_mtp.shinstead of silently using the base script.perf-changelog.yamldocuments the new config key.Reviewed by Cursor Bugbot for commit 36265ae. Bugbot is set up for automated code reviews on this repo. Configure here.