合并受阻
变更摘要
本 PR 基于 state-spaces/mamba 提交 48582f0,新增 Mamba-3 第一阶段反向算子 mamba_mimo_bwd_fwd 的 Triton-Ascend arch32 实现,并配套公开 Python API、参数校验、CPU FP32 golden、13 项单元测试、ATK 配置及算子文档。实现支持可选 D/Z、两种 DOUT 布局(mimo_o 是否传入决定是否 reduce)、GQA 和非整除尾 chunk,内部以 FP32 中间量计算并保持与上游一致的输出 dtype;性能验收按 CV 类 Vector-bound 口径折算,NPU(Ascend910_9382)实测中位数 59.59 ms,相对 H100 竞品(8.20 ms)的性能比 0.137621 高于要求值 0.115552,且五个输出(DMIMO_O、STATES、DZ、DMIMO_Z、QK_DOT)的 error ratio 均小于阈值 0.001,UT 结果为 13 passed。
主要改动
- 新增公开 Triton API:
mindspeed_ops/api/triton/mamba_mimo_bwd_fwd.py定义MambaMimoBwdFwdOutputsNamedTuple(含dmimo_o、states、dz、dmimo_z、qk_dot)与入口函数mamba_mimo_bwd_fwd,并在mindspeed_ops/api/triton/__init__.py中导出;_validate_inputs负责校验 arch32 限制(is_arch35()抛NotImplementedError)、BF16 dtype、NPU device、chunk_size * R范围、rotary_dim_divisor取值、mimo_o/z/mimo_z的组合约束及全部输入 shape/dtype。 - 新增 arch32 Triton kernel 实现:
mindspeed_ops/arch32/triton/mamba_mimo_bwd_fwd.py以多个@triton.jitkernel 实现完整计算流程,包括 control 预处理(mamba_mimo_token_control_kernel、mamba_mimo_rotary_control_kernel、mamba_mimo_causal_control_kernel)、Q/K bias 与 rotary 处理(分组 tile 路径mamba_mimo_qk_bias_kernel+mamba_mimo_qk_rotary_patch_kernel,大 tile 平铺 fallbackmamba_mimo_preprocess_kernel)、mamba_mimo_psi_kernel、持久化 recurrent state scan(mamba_mimo_state_scan_kernel)、mamba_mimo_output_kernel、mamba_mimo_qk_gather_kernel、mamba_mimo_projection_grads_kernel与mamba_mimo_dz_kernel,中间结果以 FP32 workspace 承载,输出再转回输入 dtype。 - 新增 CPU FP32 golden 参考实现:
tests/unit_tests/triton/mamba_mimo_bwd_fwd_reference.py提供mamba_mimo_bwd_fwd_golden,覆盖 chunk padding(_pad)、rotary(_rotate)、因果 mask、state scan、可选 D/Z 与 reduced/non-reduced DOUT 两种分支,作为精度比对基准。 - 新增 13 项单元测试:
tests/unit_tests/triton/test_mamba_mimo_bwd_fwd.py通过_run_case以get_err_ratio校验五个输出,覆盖 D/Z/reduceO 四种功能组合、GQA(heads=2)、非整除尾 chunk(seqlen=20)、多组(N, P, R, C)参数(含R=1fallback)以及非法 shape/dtype 校验。 - 新增 ATK 配置并调整代码检查:
tests/atk_tests/triton/mamba_mimo_bwd_fwd/新增 case 生成器generate_mamba_mimo_bwd_fwd.py(内置 4 组用例)、mamba_mimo_bwd_fwd.yaml(bf16_error: 0.001)及注册 torch golden 与 Triton API 的triton_mamba_mimo_bwd_fwd.py;.pre-commit-config.yaml将DOUT,dout加入 codespell 忽略词表。


代码审查
I have completed my review within budget. Let me finalize with the closing summary.
Closing Summary
已审查文件清单
1. .pre-commit-config.yaml — no issues
仅向 codespell 忽略列表追加 DOUT,dout 两个词,属于正常的拼写白名单维护,无正确性问题。
2. mindspeed_ops/api/triton/__init__.py — no issues
新增包 __init__.py,从 mamba_mimo_bwd_fwd 导出两个公开符号。导入链无循环依赖(mamba_mimo_bwd_fwd 仅在函数体内惰性导入 arch32 kernel,顶层只依赖 torch 与 mindspeed_ops.utils,而后者不反向依赖本包)。
3. mindspeed_ops/api/triton/mamba_mimo_bwd_fwd.py — 2 个 P3 发现
- P3(conf 0.5):
_validate_inputs只校验seqlen/rank/groups为正,漏掉了batch维度的正值校验,batch=0会静默通过校验并以空 grid 启动 kernel、返回空输出,掩盖参数错误。 - P3(conf 0.4):
is_arch35()基于进程默认设备(torch_npu.npu.get_device_name())而非实际张量所在q.device判断架构,混合架构多卡环境下可能误抛NotImplementedError或误放行;且该函数被@lru_cache缓存,进程内切换默认设备后结果不更新。
统计与总体风险判断
- 共 2 个发现,均为 P3 低严重度(边界校验缺口与架构门控的设备绑定问题),无 P0/P1/P2 问题。
- 总体风险:低。核心校验逻辑(shape/dtype/device、GQA 整除、chunk 边界、reduceO/Z 组合一致性)与 arch32 kernel 的索引约定逐项核对一致,
MambaMimoBwdFwdOutputs字段顺序与 kernel 返回的 5 元组也完全匹配;两个发现均只在边界输入或多设备混合架构场景下触发,不构成常规路径的功能回归。
我已完成对所有 7 个变更文件的审查。核心发现已上报,现给出总结。
审查总结
各文件审查结果
-
mindspeed_ops/arch32/triton/mamba_mimo_bwd_fwd.py — 发现 1 个问题(P2):
- raw_output 越界写竞争(第 455–463 行):
mamba_mimo_output_kernel用(BF, BP)块写入(S*R, P)平铺缓冲,当fused = chunk_size*rank非 2 的幂时(BF > F),非末尾 chunk 的 store 会把零值写进相邻 chunk 的raw_output区域,与该 chunk 的 program 并发竞争,导致DMIMO_O/DZ非确定性损坏。所有现有 UT/ATK 用例的fused均为 2 的幂,故未被覆盖。
- raw_output 越界写竞争(第 455–463 行):
-
tests/atk_tests/triton/mamba_mimo_bwd_fwd/init.py — no issues(仅 docstring)。
-
tests/atk_tests/triton/mamba_mimo_bwd_fwd/generate_mamba_mimo_bwd_fwd.py — no issues:17 个 shape 与 yaml 输入顺序一一对应,注册名与 yaml
generate字段一致,_case_index类属性循环模式与仓库内既有 generator 一致。 -
tests/atk_tests/triton/mamba_mimo_bwd_fwd/mamba_mimo_bwd_fwd.yaml — no issues:
triton_name/api_type/triton_api_type/generate均与代码注册名匹配,single_bm/bf16_error/bf16_eb键结构与既有 ATK 配置一致,无键拼写错误。 -
tests/atk_tests/triton/mamba_mimo_bwd_fwd/triton_mamba_mimo_bwd_fwd.py — no issues:
_arguments的 19 个实参顺序与 golden/kernel 签名一致,import 风格与既有 ATK 用例一致。 -
tests/unit_tests/triton/mamba_mimo_bwd_fwd_reference.py — no issues:逐项核对(factor/gamma、rotary、diagonal、inter/intra、state 递推、dz/dmimo_z/dmimo_o 约简、permute 维度)均与 kernel 语义一致。
-
tests/unit_tests/triton/test_mamba_mimo_bwd_fwd.py — no issues:4 种 D/Z/reduceO 组合、GQA、尾 chunk、5 组 shape 参数、非法入参用例均合理。
总体风险评估
- 发现数量:P0 0 个、P1 0 个、P2 1 个、P3 0 个。
- 总体判断:该 PR 主体实现与 CPU FP32 golden 的数学语义高度一致,测试覆盖较完整(两条 kernel 路径、GQA、尾 chunk、可选输入组合均有覆盖),ATK 配置与既有仓库约定一致。唯一确认的问题是一个仅在
chunk_size*rank非 2 的幂时触发的越界写并发竞争(P2),属于边界配置下的潜在数据损坏,不影响当前已测试的全部 2 的幂配置;建议修复并补充非 2 的幂用例后再合入。整体风险可控。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 0 |
| 🟡 建议 | 1 |
💬 仅评论


Thanks for your pull-request.
The full list of commands accepted by me can be found at here。
You can get sig-info at here
PR Approval Progress
⚠️ This PR does not yet meet the following requirements:lgtm (requires ≥ 2 person(s) per module)、approve (requires ≥ 1 person(s) per module)
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| docs | ❌ (0/2)(You can also ask: 孙银磊, gitcode_lhp, zjchenn, 华郁秀, 周蓓蓉) | ❌ (0/1)(You can also ask: 刘哲续, 孙银磊, bigdog1206, 郑加利, 刘荣) |
| repo-Ascend/MindSpeed-Ops | ❌ (0/2)(You can also ask: 华郁秀, cjy840282, 周蓓蓉, guihaowen666, HANHU1CHEN) | ❌ (0/1)(You can also ask: 朱彦儒, 雷珍珍, bigdog1206, 周蓓蓉, 刘荣) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
hahahascend, thanks for your pull request. All authors of the commits have signed the CLA. 👍


🟡 Medium Priority
变更行:mamba_mimo_bwd_fwd_reference.py 第 136 行 dout_h = _pad(dout, padded_seqlen, 1).float().permute(0, 3, 1, 2, 4)。
证据链:
建议:将 reduce_o=False 分支的 permute 改为与 reduce_o=True 分支一致的 permute(0, 2, 1, 3),并补充一个 mimo_o=None 的 UT 用例验证该分支(若 PR 声称已覆盖 reduceO 组合,需确认该用例实际执行通过)。
| 137
| - dout_h = _pad(dout, padded_seqlen, 1).float().permute(0, |
|
137 | + dout_h = _pad(dout, padded_seqlen, 1).float().permute(0, 2, 1, 3) |


关联 Issue
#22
https://gitcode.com/Ascend/MindSpeed-Ops/issues/22
What this PR does / why we need it?
基于
state-spaces/mamba提交48582f0,新增 Mamba-3mamba_mimo_bwd_fwd算子的 Triton-Ascend arch32 实现。主要修改:
Does this PR introduce any user-facing change?
是。本 PR 新增以下 Triton API:
from mindspeed_ops.api.triton.mamba_mimo_bwd_fwd import mamba_mimo_bwd_fwd当前实现支持 Ascend arch32 和 BF16 输入。详细输入约束和使用方法见
docs/triton/mamba_mimo_bwd_fwd.md。How was this patch tested?
1. 测试对象和统一负载
NPU 和 H100 均只测试 Mamba-3 第一阶段反向算子
mamba_mimo_bwd_fwd,不包含第二阶段 backward kernel。性能负载:
统一计时边界:
2. 精度测试
精度以独立 CPU FP32 实现作为 golden,分别比较五个输出:
DMIMO_OSTATESDZDMIMO_ZQK_DOT精度 shape:
精度结果:
DMIMO_O1.02081e-61.43051e-5STATES1.52408e-63.05176e-5DZ7.89688e-54.88281e-4DMIMO_Z1.07553e-61.62125e-5QK_DOT00五个输出的 error ratio 均小于验收阈值
0.001,精度达标。完整 UT 还覆盖:
(N, P, R, C)参数;R=1fallback;UT 结果:
3. H100 竞品数据
竞品环境:
用于折算的 H100 硬件规格:
989.5 TFLOPS67 TFLOPS3350 GB/s未使用 sparse BF16 算力。
H100 三个独立进程结果:
预分配输出的诊断中位数为
8.075561 ms,由于不包含正式 API 中的分配开销,因此不用于验收换算。4. NPU 性能数据
NPU 环境:
NPU 三个独立进程结果:
5. 性能分类和折算方法
该实现同时包含矩阵乘和大量 Vector 计算,因此按照验收标准归为 CV 类算子。
NPU profile 显示主要时间消耗在 control、Q/K bias/rotary、PsiV、state update、output 和 QK gather 等阶段。这些阶段包含较多
exp/sigmoid/sin/cos、逐元素乘加、状态更新、数据重排和小矩阵计算,性能不由大规模 Cube GEMM 单独主导。因此采用 CV 类 Vector-bound 口径进行验收。验收使用以下硬件 Vector 算力:
11.06 TFLOPS67 TFLOPS先计算 NPU 与竞品的 Vector 算力比例:
CV 类算子的验收系数为
0.7,因此要求的实际性能比为:这里的性能比定义为:
由于时间越小代表性能越高,因此要求:
也可以换算为 NPU 允许的最大执行时间:
6. 达标结论
NPU 实测中位数为:
实测性能比:
与要求比较:
因此性能达标。
验收余量:
7. 其他检查
ATK 精度配置、输入生成脚本和算子入口已提交到:
当前开发环境未安装 ATK Python 包,因此本地未生成 ATK 报告;本 PR 不将 ATK 配置存在等同于 ATK 已执行通过。