Repository navigation
[MiniMax-M3.1] Enable Mono decode with fixed DSpark verify - #2686
Merged
Merged
Conversation
wuhuikx
force-pushed
the
hattie/minimax-m31-flash
branch
from
October 24, 2026 08:18
432d569 to
48aff05
Compare
XiaobingSuper
force-pushed
the
hattie/minimax-m31-mono
branch
from
October 26, 2026 09:38
2736848 to
4ac438c
Compare
XiaobingSuper
force-pushed
the
hattie/minimax-m31-mono
branch
from
October 26, 2026 10:01
4ac438c to
ac8b0fb
Compare
XiaobingSuper
marked this pull request as ready for review
October 26, 2026 13:24
This was referenced Oct 27, 2026
MengqingCao
added a commit
that referenced
this pull request
Oct 27, 2026
valarLip
requested changes
Oct 27, 2026
| if getattr(self, "drafter", None) is not None: | ||
| self.drafter.arm_aux_capture(self.model) | ||
| bind_mono_drafter = getattr(self.model, "bind_mono_drafter", None) | ||
| if bind_mono_drafter is not None: |
Collaborator
There was a problem hiding this comment.
align the mono drafter impl with other models?
Contributor
There was a problem hiding this comment.
Aligned in 53b8065. Both MiniMax architectures now use mono_decode_installers; the model-specific installer receives the drafter after arm_aux_capture and binds the in-model Mono router. The generic ModelRunner getattr(..., bind_mono_drafter) special case is removed, matching the Kimi/V4 lifecycle.
Contributor
There was a problem hiding this comment.
Post-change E2E also passed on the official Quark checkpoint: TP4 + fixed DSpark, all four ranks logged MiniMax-M3 mono decode on, width-8/16 graph capture completed, and the q=8/C2 smoke completed 8/8 requests.
valarLip
reviewed
Oct 28, 2026
| "KimiK3ForConditionalGeneration": ( | ||
| "atom.models.kimi_k3.mono.dispatch.install_mono_decode" | ||
| ), | ||
| "MiniMaxM3SparseForCausalLM": ( |
Contributor
…ules M3.1's layers 0..2 are sparse attention + indexer + dense MLP, which neither the mono dense kernels (full attention) nor the MoE kernels serve, so mono refused every M3.1 deployment: "layers 0..2 must be dense full-attention layers". ``dense_prefix_mono`` resolves the prefix's arm once at bind time from the layer stack. M3's dense full-attention prefix keeps the fused dense kernels and every launch it had; M3.1's runs on the original modules through the ``run_dense`` that was already there, which leaves the first mono layer the same (ar, res) pair in ars[0]. A model with no mono arm for its prefix binds no DenseLayer, builds no dense kernels and needs no swiglu parameters. ``run_dense`` takes its aux list the way ``run_dense_mono`` does rather than defaulting it to None: it is the production prefix on M3.1, where an Eagle3 aux layer among 0..2 would have appended to the default. The first layer mono runs still has to select its own sparse blocks. The refusal now names the layer, because M3.1 numbers its sparse layers from 0 and an index_topk_freq schedule can land a reusing layer there. Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
XiaobingSuper
force-pushed
the
hattie/minimax-m31-mono
branch
from
October 28, 2026 11:24
53b8065 to
a3171ee
Compare
valarLip
approved these changes
Oct 28, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Enables the existing MiniMax-M3 Mono decode path (PTPC FP8 attention + fused MXFP4 MoE) for MiniMax-M3.1-Flash with fixed DSpark verify. The kernel ABI is unchanged.
Builds on the MiniMax-M3.1-Flash support merged in #2678; this diff contains only the two Mono commits.
atom.mono.runtime.aux_taps). Confidence-scheduled and ragged DSpark remain refused.Mono turns on only with all of the following:
ATOM_MONO_ENABLE=1ptpc_fp8, excluding*block_sparse_moe)ATOM_FUSE_MXFP8_SHARED_INTO_MXFP4=1On the release checkpoint, whose NVFP4 routed experts do not use this FSE path, Mono refuses cleanly at layer 3.
Validation
Current head on latest
main:75 passedMiniMax-M3 mono decode on; width-8/16 builds and graph capture completeExisting Quark GSM8K runs on this PTPC/FSE path:
0.955, strict0.909, robust0.96740.9416, strict0.8802, robust0.96130.938 / 0.878, robust0.957; Mono-on is inside the observed run-to-run spreadPaired real-acceptance diagnostic on the current Quark checkpoint:
Mono remains opt-in, so the default path is unchanged.
Performance
Current PR head,
amd/MiniMax-M3.1-Flash-Quark-MXFP4, 4xMI355X TP4, PTPC/FSE and fixed 7-draft DSpark. Baseline and Mono arms differ only inATOM_MONO_ENABLE.SA-style AgentX validation (
inferencex-agentx-mvp, SemiAnalysis/Weka 256K traces, prefix cache, 900 s arms) with synthetic accepted length 4.0 to isolate target-path performance, Mono off -> on:187.56 -> 213.44 tok/s(+13.8%), p90 ITL2.68 -> 2.33 ms(-13.1%), p99 context243.3K -> 243.2K224.52 -> 235.79 tok/s(+5.0%), p90 ITL2.64 -> 2.31 ms(-12.5%), p99 context243.3K -> 243.2KThese are 900-second PR-validation arms, not the 3600-second full InferenceX sweep.
Synthetic acceptance is performance-only and is not used for accuracy claims.