From 81e92d5d99aca9187d2c3bcca46cc52e025e209d Mon Sep 17 00:00:00 2001 From: functionstackx <47992694+functionstackx@users.noreply.github.com> Date: Sun, 14 Jun 2026 17:27:16 -0400 Subject: [PATCH 1/2] [WIP] Add MiniMax-M3 on MI355X with EAGLE3 spec decode Adds workloads/minimax_m3_mi355x.yaml: MiniMax-M3-MXFP8 on MI355X (CDNA4), TP=8 (no expert parallelism), EAGLE3 speculative decode (drafter Inferact/MiniMax-M3-EAGLE3, 3 speculative tokens), env VLLM_USE_BREAKABLE_CUDAGRAPH=0. gsm8k as the spec-decode correctness gate; vllm_bench 8k-in/1k-out at conc-128 (MI355X-family baseline). KV cache left at default (bf16): MiniMax-M3-MXFP8 ships no calibrated KV scales, so --kv-cache-dtype fp8 silently corrupts output (vllm-project/vllm#45562). nightly: true, but blocked on vllm-project/vllm#45381 (M3 support, which carries the ROCm/AMD EAGLE3 enablement #45546) landing on main; it will fail at server bring-up until then. AI-assisted (Claude Code). Co-Authored-By: Claude Signed-off-by: functionstackx <47992694+functionstackx@users.noreply.github.com> --- workloads/minimax_m3_mi355x.yaml | 56 ++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 workloads/minimax_m3_mi355x.yaml diff --git a/workloads/minimax_m3_mi355x.yaml b/workloads/minimax_m3_mi355x.yaml new file mode 100644 index 0000000..d5399a5 --- /dev/null +++ b/workloads/minimax_m3_mi355x.yaml @@ -0,0 +1,56 @@ +# MiniMax-M3 on MI355X (CDNA4) with EAGLE3 speculative decode +# +# MXFP8 checkpoint runs natively on CDNA4 (OCP fp8 + MX matrix cores). +# EAGLE3 drafter: Inferact/MiniMax-M3-EAGLE3 (LlamaForCausalLMEagle3 head, +# hidden_size 6144 / vocab 200064 matching the M3 target), drafting 3 tokens. +# +# KV cache is intentionally left at the model default (bf16). MiniMax-M3-MXFP8 +# ships no calibrated KV scales, so --kv-cache-dtype fp8 silently falls back to +# scale 1.0 and corrupts output (see vllm-project/vllm#45562); do not enable it +# here without a calibrated checkpoint or a self-calibrating dtype. +name: minimax_m3-mi355x +gpu: MI355X +num_gpus: 8 +nightly: true + +vllm: + model: MiniMaxAI/MiniMax-M3-MXFP8 + env: + VLLM_USE_BREAKABLE_CUDAGRAPH: 0 + serve_args: >- + --tensor-parallel-size 8 + --tool-call-parser minimax_m3 + --reasoning-parser minimax_m3 + --enable-auto-tool-choice + --trust-remote-code + --speculative-config.method eagle3 + --speculative-config.model Inferact/MiniMax-M3-EAGLE3 + --speculative-config.num_speculative_tokens 3 + +lm_eval: + # gsm8k here is a correctness gate: speculative decoding is output-equivalent + # to non-spec greedy, so the score must match the no-spec MiniMax-M3 baseline. + model_args: + tokenized_requests: false + tokenizer_backend: null + timeout: 6000 + tasks: + - name: gsm8k + num_fewshot: 5 + model_args: + num_concurrent: 64 + max_length: 40960 + max_gen_toks: 32768 + +vllm_bench: + # random + openai backend (no speed_bench): speed_bench needs + # --skip-tokenizer-init, which caps every request at 1 output token so + # throughput reads ~0. See https://github.com/vllm-project/perf-eval/pull/20 + configs: + - name: 8k-in-1k-out-conc-128 + backend: openai + dataset: random + input_len: 8192 + output_len: 1024 + num_prompts: 512 + max_concurrency: 128 From 540b31a9c82054b69aced4c2a1fd58098fa71252 Mon Sep 17 00:00:00 2001 From: functionstackx <47992694+functionstackx@users.noreply.github.com> Date: Tue, 16 Jun 2026 16:42:14 -0400 Subject: [PATCH 2/2] Force --block-size 128 to fix EAGLE3 bring-up on MI355X With EAGLE3 spec decode on this backend, the default KV-manager block size (16) has no compatible attention-kernel block size, so server bring-up dies in select_common_block_size with "No common block size for 16." Pin --block-size 128, which every kernel in the spec-decode path supports. Co-Authored-By: Claude Opus 4.8 (1M context) --- workloads/minimax_m3_mi355x.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/workloads/minimax_m3_mi355x.yaml b/workloads/minimax_m3_mi355x.yaml index d5399a5..094d3ed 100644 --- a/workloads/minimax_m3_mi355x.yaml +++ b/workloads/minimax_m3_mi355x.yaml @@ -8,6 +8,12 @@ # ships no calibrated KV scales, so --kv-cache-dtype fp8 silently falls back to # scale 1.0 and corrupts output (see vllm-project/vllm#45562); do not enable it # here without a calibrated checkpoint or a self-calibrating dtype. +# +# --block-size 128 is required: with EAGLE3 spec decode on this backend the +# default KV-manager block size (16) has no compatible attention-kernel block +# size, so bring-up dies in select_common_block_size with +# "No common block size for 16." Forcing 128 gives a block size every kernel +# in the spec-decode path supports. name: minimax_m3-mi355x gpu: MI355X num_gpus: 8 @@ -19,6 +25,7 @@ vllm: VLLM_USE_BREAKABLE_CUDAGRAPH: 0 serve_args: >- --tensor-parallel-size 8 + --block-size 128 --tool-call-parser minimax_m3 --reasoning-parser minimax_m3 --enable-auto-tool-choice