Skip to content

fix(minimax-m3): enable per-token FP8 KV on gfx1250 - #2614

Closed
XiaobingSuper wants to merge 3 commits into
mainfrom
xiaobingsuper/minimax-m3-gfx1250-fp8-kv
Closed

XiaobingSuper wants to merge 3 commits into
mainfrom
xiaobingsuper/minimax-m3-gfx1250-fp8-kv

Conversation

@XiaobingSuper

Copy link
Copy Markdown
Contributor

Problem

MiniMax-M3 writes page-shuffled FP8 KV plus per-token K/V scales. On gfx1250, the unified fallback cannot consume those scales, and sparse prefill attempts a missing FP8 pa_fwd ASM code object and aborts the worker. The verified MI455 baseline therefore has to use BF16 KV.

Change

  • dispatch dense max-q-len-1 per-token FP8 decode to the general shuffled paged-decode contract
  • reuse the same contract for MiniMax sparse decode and per-token-as-decode prefill
  • collapse per-kv-head cache and scale views consistently
  • decline gfx1250 FP8 sparse ASM before the low-level launcher aborts; BF16 and other architectures keep their existing routes
  • keep unified attention rejection for unsupported multi-row/prefix-cache contracts

Depends on ATOM #2594 and AITER #6625.

Validation

MI455/gfx1250, TP4, MiniMax-M3-MXFP4 with --kv_cache_dtype fp8:

  • AITER producer-to-consumer operator test: 2 passed, cosine >= 0.999
  • ATOM capability/dispatch tests: 3 passed
  • service health: passed
  • functional request 17 * 23: 391
  • GSM8K fixed first 8: 7/8; BF16 control is 8/8, so full accuracy validation is still open and this PR remains Draft
  • Ruff: passed

No performance claim is made yet.

XiaobingSuper and others added 3 commits October 16, 2026 12:01
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@github-actions

Copy link
Copy Markdown
Contributor

🏷️ CI Guide

Runs automatically on every eligible PR before approval:

  • ✅ Pre Checkin: Black, Ruff, catalog schema validation, non-GPU unit tests

Heavy model tests:

  • ✅ Run after the PR is approved and Pre Checkin passes
  • ✅ Run immediately when an approval review is submitted
  • ✅ Can be requested before approval with labels
Label Tests
ci:full Run all heavy PR model tests: native ATOM, vLLM, and SGLang
ci:atom Run native ATOM model accuracy tests
ci:vllm Run ATOM vLLM OOT model accuracy tests
ci:sglang Run ATOM SGLang model accuracy tests

Heavy jobs are skipped when the PR is not approved and no matching ci:* label is present.
Add labels via the sidebar or gh pr edit 2614 --add-label <label>

@XiaobingSuper

Copy link
Copy Markdown
Contributor Author

GPU follow-up on C5 (4×MI455, TP4, --kv_cache_dtype fp8, eager): service health and 17*23 -> 391 pass; GSM8K 5-shot first 100 completes at 0.93 flexible / 0.93 strict. This reaches the issue threshold at the 100-sample gate. Full 1319 + CUDA graph replay remain pending; the shared node was released rather than running a >2h eager full set.

@XiaobingSuper

Copy link
Copy Markdown
Contributor Author

Final MI455 TP4 correctness gate passes under CUDA graph: GSM8K 5-shot 1319/1319, 0.9378 flexible / 0.9386 strict, within 0.1pp of the BF16-KV baseline. Graph replay and 17*23 -> 391 pass.

Performance guardrail does not pass: random 8K/1K c4 is 186.43 tok/s, TPOT 20.58 ms versus BF16 368.03 tok/s, 10.41 ms. The PR remains Draft: the general shuffled per-token kernel is correctness-complete but needs split-K/tuned integration before recipe enablement.

@XiaobingSuper

Copy link
Copy Markdown
Contributor Author

Superseded by #2710: FlyDSL paged decode handles MiniMax-M3 per-token FP8 KV on gfx1250 (full GSM8K 0.9348) and skips pa_fwd_asm there. Closing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant