Skip to content

[ROCm][Recipe] MiniMax-M3.1-Flash: MI355X PD, DBO / SP prefill, Quark MXFP4, mono decode - #63257

Merged
esmeetu merged 14 commits into
vllm-project:mainfrom
benenzhu:zty/m31-flash-amd-pd-dbo-sp
Oct 23, 2026
Merged

esmeetu merged 14 commits into
vllm-project:mainfrom
benenzhu:zty/m31-flash-amd-pd-dbo-sp

Conversation

@benenzhu

@benenzhu benenzhu commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Overview

AMD MI355X additions to the MiniMax-M3.1-Flash recipe (recipes/models/MiniMaxAI/MiniMax-M3.1-Flash.yaml only). No other open PR changes this recipe.

Claims

  1. PD on MI355X: pd_cluster renders the guide's 1P1D. One TP4 engine per role; BLHNC KV layout and NIXL with 4 threads; the prefill node drops indexer_decode_cp and offloads KV to host memory in 1 GiB HugeTLB pages (SimpleCPUOffloadConnector).
  2. TP4 on MI355X for single_node_tp (Hopper keeps the FP8 variant's TP8).
  3. DBO / SP prefill (opt-in feature, MI355X single node): SP + DBO, DBO, or SP. Guide section with the flags; one 32K-token prefill takes 1035 ms plain, 655 ms with DBO, 484 ms with SP + DBO (MXFP8 MoE).
  4. MXFP4 (Quark) variant: amd/MiniMax-M3.1-Flash-Quark-MXFP4, MXFP4 W4A4 experts on the AITER MoE (--moe-backend aiter, no shared-expert fusion). --quantization-config.moe mxfp8 moves into the default variant, since only that checkpoint stores NVFP4 experts.
  5. Mono decode (opt-in feature, MI355X + Quark only): a decode step of up to 16 tokens runs each layer as one kernel. Needs FP8 KV and indexer caches and FULL_DECODE_ONLY graphs. On the released image (aiter 0.1.26) it also needs [ROCm][MiniMax-M3] Backport #61889: fix sparse PA KV block count #63270, the backport of [ROCm] Fix MiniMax-M3 sparse PA KV block count #61889, to start.
  6. Fixes: one fp8 variant, limited to Hopper (the merge of main had duplicated the key; on MI355X and Blackwell it rendered NVFP4 caches). VRAM minimums per GPU: the NVFP4 variant shows 285 GB, and MI355X gets 533 GB after the MXFP8 re-quantization.

Validation

  • node scripts/validate-source.mjs --source vllm --dir <vllm>/recipes passes on vllm-project/recipes main. Rendered commands were checked for the default, Quark, and FP8 variants on MI355X, B300, and H200, with and without the new features.

  • Rendered commands served on MI355X TP4 with vllm/vllm-openai-rocm:minimax-m31-flash, DSpark 3, AIME26 (16 epochs, max_tokens 98304, thinking on) and MMMU-Pro (all, 3460):

    command AIME26 MMMU-Pro
    default (MXFP8 MoE) 0.9351 x6 ¹ 0.7676 x1
    MXFP4 (Quark) 0.9368 x6 0.7763 x1
    MXFP4 (Quark) + mono decode, concurrency 4 0.9417 x8 –

    ¹ Same image, KV/indexer/MoE settings and DSpark 3, but served by our eval script (block verification), not the rendered command.

Details

  • The DBO / SP modes are offered on the default variant only (SP and SP + DBO were measured on the MXFP8 MoE); the Quark variant gets DBO.
  • The recipe schema needs a mode per variant, so mono_decode carries an empty mode for the other variants: enabling it there changes nothing.
  • The Quark MMMU run used --limit-mm-per-prompt '{"video": 0}'. With video inputs on, one Quark server ran out of memory in the vision encoder at MMMU concurrency 256 (--gpu-memory-utilization 0.92).

AI assistance (Claude Code) was used to write the recipe changes and run the validation above; I reviewed the changes.


Pull Request Checklist
  • I used vLLM's /pr-checklist skill. (Mandatory for agents, optional for humans).

  • AI assistance was used during the creation of this PR.

  • Design Fit: Minimizes impact on core components, reuses existing functionality, and justifies added complexity.

  • Testing and Validation: Validates the change and ensures any added tests are meaningful and reliable, with CI coverage or documented CI resource constraints and validation performed outside CI.

  • Code Quality and Style: Keeps code and comments clear and concise, and updates relevant documentation and examples.

  • Pull Request Contents: Includes a brief summary and relevant links, supports claims with evidence, explains root causes and implementation trade-offs, and follows the contributing guide.

🤖 Generated with Claude Code

esmeetu and others added 5 commits October 23, 2026 09:43
… install

Add an `fp8` variant for H100/H200 (TP8, FP8 KV and indexer caches, Marlin
MoE, DSpark off) serving the same checkpoint, keep the NVFP4 default on
Blackwell and MI355X, and hide the pip install tab.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: esmeetu <jasonailu87@gmail.com>
…args

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: esmeetu <jasonailu87@gmail.com>
…ption

- pd_cluster on MI355X renders the guide's 1P1D: one TP4 engine per role,
  BLHNC KV layout, prefill without indexer_decode_cp plus the HugeTLB
  SimpleCPUOffloadConnector, decode on the default graphs.
- single_node_tp: TP4 on MI355X (Hopper keeps the fp8 variant's TP8).
- New opt-in feature "DBO / SP prefill" (MI355X single node): SP + DBO, DBO
  or SP; guide section with the flags and the 32K prefill times.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Taoyu Zhu <zhutaoyu97@gmail.com>
- New variant `mxfp4` = amd/MiniMax-M3.1-Flash-Quark-MXFP4: routed experts
  in OCP MXFP4, run as W4A4 on the AITER MoE (--moe-backend aiter, no
  shared-expert fusion). MI355X only.
- `--quantization-config.moe mxfp8` moves from the recipe-level `amd`
  override to the default variant: only that checkpoint stores NVFP4 experts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Taoyu Zhu <zhutaoyu97@gmail.com>
@benenzhu
benenzhu requested a review from esmeetu as a code owner October 23, 2026 03:45

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Claude Code Review

This pull request is from a fork — automated review is disabled. A repository maintainer can comment @claude review to run a one-time review.

@mergify mergify Bot added rocm Related to AMD ROCm kv-connector labels Oct 23, 2026
@github-project-automation github-project-automation Bot moved this to Todo in AMD Oct 23, 2026
@benenzhu
benenzhu marked this pull request as draft October 23, 2026 03:47
benenzhu and others added 6 commits October 23, 2026 03:56
- The merge of main added a second `fp8:` variant block (main and the
  hopper branch both carried it); the duplicated key failed the recipe
  validation. Keep one.
- On MI355X and Blackwell the brand overrides replace the variant's FP8 KV
  and indexer caches with NVFP4, so the picker offered a command that is not
  the Hopper setup (on MI355X also TP8 and NVFP4 experts without the MXFP8
  requant). Limit it to sm90 (H100, H200).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Taoyu Zhu <zhutaoyu97@gmail.com>
…MI355X)

New variant `mxfp4_mono`: the Quark export on the ROCm mono decode kernels
(VLLM_ROCM_MINIMAX_M3_MONO=1), which run a decode step of up to 16 tokens as
one kernel per layer. They need FP8 KV and FP8 indexer K caches on the AITER
sparse PA path (VLLM_ROCM_SHUFFLE_KV_CACHE_LAYOUT=1) and FULL_DECODE_ONLY
graphs; other steps run on the normal path. A variant rather than a feature:
mono is offered for the Quark checkpoint only, and a modes feature needs a
mode for every variant.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Taoyu Zhu <zhutaoyu97@gmail.com>
Move mono decode from a separate `mxfp4_mono` variant to an opt-in feature
`mono_decode` (single node TP, MI355X). Its `mono` mode applies to the Quark
MXFP4 variant only; the other variants get an empty mode, so enabling the
feature there changes nothing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Taoyu Zhu <zhutaoyu97@gmail.com>
The mono mode is marked unsupported on MI300X, MI325X and MI350X too: it
was measured on MI355X only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Taoyu Zhu <zhutaoyu97@gmail.com>
The NVFP4 variant showed 533 GB, the MI355X footprint after the MXFP8
re-quantization. Show the stored NVFP4 size (285 GB) and keep 533 GB as an
MI355X override (measured 105.0 GiB per TP4 rank). The Quark variant goes
from 285 to 293 GB (measured 56.9 GiB per TP4 rank).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Taoyu Zhu <zhutaoyu97@gmail.com>
@benenzhu
benenzhu marked this pull request as ready for review October 23, 2026 05:06
@esmeetu

esmeetu commented Oct 23, 2026

Copy link
Copy Markdown
Member

/ci run

@github-actions

Copy link
Copy Markdown

✅ Triggered Buildkite CI #96813 for commit e470b8e06ef1.

@esmeetu esmeetu added the ready ONLY add when PR is ready to merge/full CI is needed label Oct 23, 2026
@github-actions

Copy link
Copy Markdown

✅ @benenzhu, CI is now available for this PR.

  • /ci run starts upstream CI; /amd-ci run starts AMD CI only.
  • Run commands test your branch with every commit currently on its upstream target branch. If it is behind, the bot merges the target branch into it first (pull before pushing again). Append --allow-stale to a run command to test an outdated branch as is, at your own risk.
  • /ci retry retries failed jobs in the CI build for the current PR head. If the current head has no CI build, it starts a new CI build for the current head containing only jobs that failed in the latest earlier CI build for this PR.
  • /amd-ci retry retries failed jobs in AMD CI for the current PR head. Use /amd-ci run when the current head has no AMD CI build.
  • /ci cancel cancels scheduled or running CI builds for this PR branch; /amd-ci cancel does the same for AMD CI only.

@benenzhu benenzhu changed the title [ROCM][Recipe]m31 flash amd pd dbo sp [ROCm][Recipe] MiniMax-M3.1-Flash: MI355X PD, DBO / SP prefill, Quark MXFP4, mono decode Oct 23, 2026
@mergify mergify Bot added the minimax label Oct 23, 2026
@esmeetu
esmeetu enabled auto-merge (squash) October 23, 2026 05:45
auto-merge was automatically disabled October 23, 2026 05:50

Head branch was modified

@benenzhu

Copy link
Copy Markdown
Contributor Author

/ci run

@github-actions

Copy link
Copy Markdown

✅ Triggered Buildkite CI #96829 for commit a0ce2dbd5973.

ℹ️ This PR is 1 commit behind upstream main. Merged upstream main into this branch as a0ce2dbd5973 before starting CI. Pull the branch before pushing more changes.

@esmeetu
esmeetu merged commit da180ef into vllm-project:main Oct 23, 2026
12 checks passed
@github-project-automation github-project-automation Bot moved this from Todo to Done in AMD Oct 23, 2026
github-actions Bot added a commit to shantanusharma/recipes that referenced this pull request Oct 23, 2026
…mni@17bd19f3d775

vllm-project/vllm@main:recipes 19c0e170d257 → 8fae0ff58bae [latest.vllm]
vllm-project/vllm@19c0e17...8fae0ff

Commits:
- vllm-project/vllm@da180efbcddc [ROCm][Recipe] MiniMax-M3.1-Flash: MI355X PD, DBO / SP prefill, Quark MXFP4, mono decode (vllm-project/vllm#63257)

Recipes:
- MiniMaxAI/MiniMax-M3.1-Flash (modified): https://recipes.vllm.ai/MiniMaxAI/MiniMax-M3.1-Flash

vllm-project/vllm-omni@main:recipes 27fd77b48ccd → 17bd19f3d775 [latest.vllm-omni]
vllm-project/vllm-omni@27fd77b...17bd19f

Commits:
- vllm-project/vllm-omni@439a3bb4b008 [Hardware][Ascend] Add a Drama 3 NPU runner path (vllm-project/vllm-omni#9106)

Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
github-actions Bot added a commit to vllm-project/recipes that referenced this pull request Oct 23, 2026
…mni@c829af446829

vllm-project/vllm@main:recipes 0510bd667956 → c3117c7441dd [latest.vllm]
vllm-project/vllm@0510bd6...c3117c7

Commits:
- vllm-project/vllm@da180efbcddc [ROCm][Recipe] MiniMax-M3.1-Flash: MI355X PD, DBO / SP prefill, Quark MXFP4, mono decode (vllm-project/vllm#63257)

Recipes:
- MiniMaxAI/MiniMax-M3.1-Flash (modified): https://recipes.vllm.ai/MiniMaxAI/MiniMax-M3.1-Flash

vllm-project/vllm-omni@main:recipes ea08ab6182e6 → c829af446829 [latest.vllm-omni]
vllm-project/vllm-omni@ea08ab6...c829af4

Commits:
- vllm-project/vllm-omni@439a3bb4b008 [Hardware][Ascend] Add a Drama 3 NPU runner path (vllm-project/vllm-omni#9106)

Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
@mgoin mgoin added the recipe label Oct 23, 2026
bantianyue pushed a commit to bantianyue/vllm that referenced this pull request Oct 28, 2026
… MXFP4, mono decode (vllm-project#63257)

Signed-off-by: esmeetu <jasonailu87@gmail.com>
Signed-off-by: Taoyu Zhu <zhutaoyu97@gmail.com>
Co-authored-by: esmeetu <jasonailu87@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: vllm-agent <claw@inferact.ai>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

kv-connector minimax ready ONLY add when PR is ready to merge/full CI is needed recipe rocm Related to AMD ROCm

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants