Prhub

#45381 [Model] Add MiniMax M3 support

原始 PR 作者 youkaichao 合并时间 2026-06-16 01:01 文件变更 108 提交数 28 评论 23 代码增减 +14746 / -323

执行摘要

新增 MiniMax M3 模型支持,覆盖多模态与稀疏注意力

根据 Issue #45360,社区请求原生支持 MiniMax 稀疏注意力(MSA)。MiniMax-M3 是集成了稀疏注意力和密集注意力的新一代模型,直接在 vLLM 中集成可避免用户依赖外部 MSA 库并利用 vLLM 的优化推理引擎。PR 作者指出本 PR 是 Issue #45360 的实施方案。

建议架构师和模型集成工程师精读本 PR,尤其是平台隔离的设计模式(amd/nvidia/ 分离)和 MXFP8 内核选择器(原生 vs 模拟)的 fallback 机制。对于需要支持 MiniMax M3 模型的团队,建议优先采用 MXFP8 原生路径(如 AMD gfx950)以获取最佳性能。注意导入兼容性问题可能需要后续 patch 修复。

讨论亮点

CPU 平台兼容性:@jikunshang 在 vllm/models/minimax_m3/__init__.py 上评论指出,直接导入 Nvidia 模型会导致 CPU 等平台导入错误,建议像 DeepSeek-V4 那样添加空壳模型定义。该问题未在 PR 中解决,存在风险。

MXFP8 模拟内存开销:@fxmarty-amd 在 vllm/envs.py 上讨论,MXFP8 模拟路径在权重加载时反量化到 BF16,导致显存翻倍,并提出未来可合并 MXFP4/MXFP6/MXFP8 模拟逻辑以减少代码碎片。

SM120/Blackwell 支持:@alejandroed 报告在 RTX PRO 6000 Blackwell 上使用 Marlin 量化时输出乱码,尽管使用了 Triton 稀疏注意力 fallback,仍无法正确推理。@youkaichao 回应 SM120/121 不在本 PR 支持范围。

AMD MI325X 启动测试:@m8than 测试发现最新 commit 无法启动,较早 commit 可启动但工具解析失败,需要合并 #45546 的 EAGLE3 修复。

实现拆解

  1. 模型骨干与平台隔离:在 vllm/models/minimax_m3/ 下创建 amd/nvidia/ 两套模型实现,共享 common/ 中的通用组件。AMD 版使用原生 FlashInfer-free 的 Gemma RMSNorm,NVIDIA 版利用 FlashInfer 的 Gemma RMSNorm 内核。模型入口 __init__.py 根据当前平台(CUDA/ROCm)选择对应实现,但存在未覆盖 CPU 等平台的风险(见讨论)。

  2. 多模态视觉塔与预处理:在 common/vision_tower.py 中实现 MiniMaxVLVisionTransformer,使用 Conv3D 嵌入和部分 3D RoPE 的 MiniMaxVLAttentioncommon/mm_preprocess.py 实现 MiniMaxM3VLProcessingInfo 和处理器,支持图像与视频的输入处理,并对视频帧数设置上限 _MAX_FRAMES_PER_VIDEO=500 以避免显存溢出。

  3. 稀疏注意力系统:包含两个核心组件——common/indexer.py 实现 Lightning Indexer 侧缓存和评分,选择 top-k KV 块;common/sparse_attention.py 实现主稀疏注意力后端 MiniMaxM3SparseBackend,仅关注索引器选出的块。两者都支持 bf16 和 fp8 缓存,并注册为 V1 注意力后端。

  4. MoE 与 MXFP8 内核:在 vllm/model_executor/layers/fused_moe/experts/ 下新增 mxfp8_native_moe.py(用于 AMD CDNA4 的原生 MXFP8 MoE Triton 内核)和 mxfp8_emulation_moe.py(为不支持原生 MX 的设备提供 BF16 模拟)。在 vllm/model_executor/kernels/linear/mxfp8/rocm_native.py 中新增 ROCm 原生 MXFP8 线性内核(tl.dot_scaled)。

  5. 工具调用与 MTP:Rust 前端新增 minimax_m3 工具解析器(rust/src/tool-parser/src/minimax_m3.rs),实现状态机解析工具调用和推理步骤。同时 amd/mtp.pynvidia/mtp.py 实现了 MiniMaxM3MultiTokenPredictorMiniMaxM3MTP 用于 MTP(单 token 预测和多 token 并行预测)。

其他配套:更新模型注册(vllm/model_executor/models/ 下的注册列表)、添加权重加载逻辑、更新 vllm/envs.py 的环境变量文档、更新 pyproject.toml 依赖,并新增了基础模型和内核测试。

文件 模块 状态 重要度
vllm/models/minimax_m3/amd/model.py 文本模型 added 9.36
vllm/models/minimax_m3/nvidia/model.py 文本模型 added 9.36
vllm/models/minimax_m3/common/vision_tower.py 视觉模型 added 9.28
vllm/models/minimax_m3/common/mm_preprocess.py 多模态预处理 added 9.08
vllm/models/minimax_m3/common/indexer.py 索引器 added 9.17
vllm/models/minimax_m3/common/sparse_attention.py 稀疏注意 added 9.17
vllm/models/minimax_m3/amd/mtp.py MTP 模块 added 9.08
vllm/models/minimax_m3/nvidia/mtp.py MTP 模块 added 9.08
vllm/model_executor/layers/fused_moe/experts/mxfp8_native_moe.py MoE 内核 added 9.17
vllm/model_executor/layers/fused_moe/experts/mxfp8_emulation_moe.py MoE 内核 added 9.28
vllm/model_executor/kernels/linear/mxfp8/rocm_native.py 线性内核 added 9.28
rust/src/tool-parser/src/minimax_m3.rs 工具解析 added 8.78
vllm/models/minimax_m3/__init__.py 入口点 added 6.0

关键符号

_sparse_attention_layer_ids _is_moe_layer MiniMAXGemmaRMSNorm.forward MiniMaxM3MLP.forward MiniMaxM3MoE.forward MiniMaxVLVisionTransformer.forward MiniMaxM3SparseBackend.get_name MiniMaxM3IndexerBackend.get_name Mxfp8NativeTritonExperts.activation RocmDotScaledMxfp8LinearKernel.apply_weights MinimaxM3Input.create MiniMaxM3MTP.compute_logits

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

CPU 平台导入错误 正确性

@jikunshang 指出 `__init__.py` 直接导入 Nvidia 实现会导致 CPU 等平台 ImportError,建议像 DeepSeek-V4 那样添加 dummy 定义。

结论:未在 PR 中解决,风险仍然存在。 · unresolved

MXFP8 模拟路径内存开销 性能

@fxmarty-amd 指出 MXFP8 模拟路径在权重加载时反量化到 BF16,导致显存翻倍,并建议未来统一 MXFP4/MXFP6/MXFP8 模拟逻辑。

结论:暂无修复,已添加警告日志。 · unresolved

SM120/Blackwell 输出乱码 正确性

@alejandroed 报告在 Blackwell 上使用 Marlin 量化输出乱码;@youkaichao 回应 SM120 超出范围。

结论:SM120 不在 PR 支持范围内,问题未解决。 · closed

MSA 原生库 SM120 支持 other

SecureBot 提示 MiniMax-AI/MSA#1 增加 SM120 支持,youkaichao 认为超出范围。

结论:PR 不关注较新架构。 · closed

风险与影响

  1. 跨平台兼容风险__init__.py 直接导入 CUDA 模型路径,在 CPU 或其他非 CUDA/ROCm 平台上会导致 ImportError
  2. 显存开销风险:MXFP8 模拟路径将权重反量化到 BF16,对于 B200 等原生 MX 设备若模拟路径被选中(如因 kernel block size 不满足条件),可能导致显存翻倍。
  3. 稀疏注意力回归:新增的注意力后端可能与现有 V1 引擎的 AttentionMetadata 不兼容,需要逐步集成以确保正确性。
  4. 维护负担:AMD/NVIDIA 两套近重复的模型实现增加了后续同步成本。

用户影响:用户现在可以使用 HuggingFace 上的 MiniMax-M3 系列模型,支持文本、图像和视频输入,并启用推理和工具调用。
系统影响:模型加载时间增加,显存占用取决于量化模式(MXFP8 原生 vs 模拟)。
团队影响:需要维护接近 15000 行新增代码,特别是两个平台的模型实现需要保持功能一致性。

跨平台导入错误 MXFP8 模拟显存翻倍 SM120/Blackwell 不支持 潜在稀疏注意力兼容性 AMD/NVIDIA 同步成本

关联 Issue

#45360 [Feature]: Support for MiniMax Sparse Attention (MSA)

完整报告

参与讨论