[Klaud Cold] minimaxm3-fp8-mi355x-vllm-mtp: day-zero MiniMax-M3 EAGLE3 (MTP) MI355X recipe#1742
[Klaud Cold] minimaxm3-fp8-mi355x-vllm-mtp: day-zero MiniMax-M3 EAGLE3 (MTP) MI355X recipe#1742functionstackx wants to merge 4 commits into
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>
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=27472217054 |
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=27472217773 |
First MI355X EAGLE3 sweep failed engine init with 'Model does not support EAGLE3 interface but aux_hidden_state_outputs was requested'. The proven CUDA EAGLE3 recipes all serve with --trust-remote-code, which the ROCm non-MTP base omits; add it here to match the CUDA serve exactly (the one remaining serve-level difference). If this fails identically the ROCm minimax-m3 image lacks MiniMax-M3 EAGLE3 target support and needs a rebuild. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=27472704212 |
1 similar comment
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=27472704212 |
…ge blocker The --trust-remote-code experiment failed identically (sweep 27472704212, trust_remote_code=True confirmed in engine config): same "Model does not support EAGLE3 interface but aux_hidden_state_outputs was requested" across all TP workers. Revert it back to the non-MTP base shape and document the confirmed blocker: the ROCm vllm/vllm-openai-rocm:minimax-m3 image's MiniMaxM3SparseForConditionalGeneration class does not implement vLLM's SupportsEagle3 interface (the CUDA build does). Recipe is correct; held pending a ROCm image rebuild with MiniMax-M3 EAGLE3 target support. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
⛔ Held — blocked on ROCm image (EAGLE3 target support missing)CI cannot pass on the current Root causeThe draft ( Ruled out
StatusThe recipe itself is correct (config, search space, draft wiring, TRITON_ATTN serve all validated). It is held pending a rebuild of the ROCm Failed sweeps for reference: 27472217773 (initial), 27472704212 (with |
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=27475145738 |
Summary
Adds the EAGLE3 speculative-decoding (
spec-decoding: mtp) sibling ofminimaxm3-fp8-mi355x-vllm(#1725): MiniMax-M3 MXFP8 on MI355X (gfx950) single-node vLLM (ROCm), pairing MiniMaxAI/MiniMax-M3-MXFP8 with the Inferact/MiniMax-M3-EAGLE3 draft head. Based on the MI355X non-MTP recipe.New benchmark script
benchmarks/single_node/fixed_seq_len/minimaxm3_fp8_mi355x_mtp.sh, based onminimaxm3_fp8_mi355x.sh(mandatory--block-size 128for MSA,--language-model-only,--kv-cache-dtype fp8,--attention-backend TRITON_ATTN,--enforce-eager,minimax_m3tool/reasoning parsers, ROCR→HIP device mapping). Additions for MTP:--speculative-config '{"method": "eagle3", "model": "Inferact/MiniMax-M3-EAGLE3", "num_speculative_tokens": 3}'.attention_backendoverride on the drafter — unlike the CUDA recipes. The FlashInfer "page size 128 requires GQA/MQA" limitation that forcedFLASH_ATTNfor the MHA EAGLE3 head on Blackwell is FlashInfer/CUDA-specific; here the whole server runs onTRITON_ATTN, which serves the MHA draft fine.--use-chat-templateon the benchmark client so draft acceptance reflects real text rather than random tokens.--enforce-eageris kept from the non-MTP base, so there's no cudagraph-capture sizing to scale.Config (
amd-master.yaml)minimaxm3-fp8-mi355x-vllm-mtp, samevllm/vllm-openai-rocm:minimax-m3image andmi355xrunner. Search space mirrors the non-MTP entry trimmed at the extreme-concurrency end (identical tominimaxm3-fp8-b300-vllm-mtp/b200-vllm-mtp), withtp2-ep2dropped:No launcher change needed —
launch_mi355x-amds.shalready resolvesminimaxm3_fp8_mi355x_mtp.shviaSPEC_SUFFIX.perf-changelog
Entry for the new config key.
Validation
generate_sweep_configs.py test-config --config-keys minimaxm3-fp8-mi355x-vllm-mtpgenerates 53 configs cleanly (scenario-trimmed max-model-len 2304 / 9472, allspec-decoding=mtponmi355x).bash -npasses on the new script._vllm_mtptominimaxm3_fp8_mi355x_mtp.sh(exists).🤖 Generated with Claude Code
Note
Low Risk
Benchmark-only additions (YAML, shell script, changelog); no production runtime or auth changes. Sweeps may fail until the ROCm vLLM image gains EAGLE3 support.
Overview
Adds the EAGLE3 speculative-decoding (
spec-decoding: mtp) variant of the existing MiniMax-M3 MXFP8 MI355X vLLM benchmark, pairing MiniMaxAI/MiniMax-M3-MXFP8 with draft Inferact/MiniMax-M3-EAGLE3 (3 speculative tokens).Registers
minimaxm3-fp8-mi355x-vllm-mtpinamd-master.yamlwith the same ROCm image as the non-MTP entry and a trimmed search space (lower max concurrency, tp2-ep2 dropped), aligned with the B300/B200 MTP configs. Documents a perf-changelog entry for the new config key.Introduces
minimaxm3_fp8_mi355x_mtp.sh, extending the base MI355X recipe with--speculative-config(eagle3), draft model download, and--use-chat-templateon the serving benchmark. Unlike CUDA MTP recipes, no drafterattention_backendoverride — global TRITON_ATTN is sufficient on ROCm. The script notes a known blocker: the currentvllm-openai-rocm:minimax-m3image lacks EAGLE3 aux-hidden-state support until the ROCm image is rebuilt.Reviewed by Cursor Bugbot for commit f8ec1d0. Bugbot is set up for automated code reviews on this repo. Configure here.