AIC err95 复现材料 本目录配套 docs/sageattention2_AIC_err95_证据链.md(提交给 CANN 团队的证据链), 提供内核源码与 E2E 复现测试。文件按 ops-transformer 仓库原始相对路径组织。
AIC_err95 严重怀疑是环境问题 950pr DevEnv_320519 (D2026082922026) 已经修改好了 MIX_AIC_1_2改成MIX_AIC_1_1 就好了
目录结构 experimental/attention/sageattention2/ ├── PROGRESS.md # 完整进展(b59-b68 二分细节) ├── op_kernel/ │ ├── common/ # 内核公共头文件(constants/tiling_data/cast 等) │ └── sageattn_fp8/ # 主内核 attn_kernel.cpp + Stage A-D + 头文件 └── tests/e2e/ # aclnn C++ 端到端冒烟(make && ./test_small) attention/common/op_kernel/matmul.h # LoadDataToL0A/B 参考(内核 include 依赖)
环境 硬件:Atlas 950PR,coreType=MIX(1 AIC : 2 AIV),taskRation=1:2 CANN:9.2.0-beta.1 测试 shape:B=1, Hq=1, Hkv=1, Sq=Sk=128, D=128, br=bc=64 复现步骤 将本目录按上述相对路径还原到 ops-transformer 仓库(或直接作为内核源码快照)。 编译算子(host/tiling 变更需 build.sh --pkg,kernel 变更需同步源码后 make -j1)。 E2E 冒烟:cd tests/e2e && make && ./test_small。 观察 device 日志:稳定报 aicore error exception, core id = 0, error code = 95 ("MTE DDR address out of range"),详见证据链 §2 签名。 外部依赖 catlass(catlass/catlass.hpp、tla/layout.hpp):独立仓 https://gitcode.com/cann/catlass.git,需切换到含 Arch::Ascend950 的新版。 CANN 9.2.0-beta.1 自带 kernel_operator.h、c_api/vector_datamove/ 等 AscendC 头文件。
提交对象:CANN / Atlas 950PR runtime 团队 算子:Sageattention2Fp8(INT8 QK^T + FP8 PV,混合核 MIX_AIC_1_2) 环境:Atlas 950PR,CANN 9.2.0-beta.1,coreType=MIX,taskRation=1:2 日期:2026-08-29 分支:mixaicv-sageatten-0829
Sageattention2Fp8
mixaicv-sageatten-0829
在 Atlas 950PR 混合核(1 AIC + 2 AIV)上,Sageattention2Fp8 运行稳定触发 AIC core0 error 95「MTE DDR address out of range」。经可信构建下的二分闭环,该错误与以下因素全部无关:
且 基线 commit 2ab902daf 提交信息自记同一遗留错误,非本轮引入。据此判定为环境/runtime 层问题,请求协助定位。
2ab902daf
aicore error exception, core id = 0, error code = 95 dump info: pc start: 0x120041000000 current: 0x120041000e2c mte error info: 0x190000020386 l1 error info: 0x7f9b000ff6de para base: 0x120000200000 aic error mask: 0x395856
同一时刻 AIV core0/1 报 error code=0(伴随超时,非独立错误)。
关键点:
MTE DDR address out of range
pc start=0x120041000000
aic error mask=0x395856
npu-smi
方法论说明:此前发现 make 的 src_copy 不感知 experimental/ 源码修改,导致 b40-b57 多轮编译的是陈旧快照、结论作废。b59 起建立「cp 同步 → diff 校验 → rm compile_stop.flag → make -j1 → 时间戳+md5 验新鲜」的可信构建流程,以下全部为可信构建。
make
src_copy
experimental/
kSkipAicLoads
kSkipAicQInit
SetFlag/WaitFlag<SOFTMAX_VS_EVENT>
b64b 配置下,内核所有数据通路关闭:
b64b
kSkipKvTileAll=true
kSkipCompute=true
kFlagsUpTo=0
kInitSyncOn=false
即 AIC 全程零 GM 访问、零 L1 搬运、零计算,仍报「MTE DDR address out of range」。这排除了一切内核内容因素。
基线 commit 2ab902daf(2026-08-27)提交信息原文:
fix(sageattn2): deploy chain + cross-core audit + aicore95 root-cause Remaining: aicore exception 95 "MTE DDR address out of range" at pc 0xccc8 — sTempOff_ workspace region suspect (attn_kernel.cpp:182,299).
即该错误在基线就已存在并被自记,本轮工作(跨核重构、workspace 契约、搬运参数修正)未能消除它,且二分证明它不是这些代码路径引入的。
mte error info=0x190000020386
experimental/attention/sageattention2/op_kernel/sageattn_fp8/attn_kernel.cpp
experimental/attention/sageattention2/tests/e2e/
make && ./test_small
experimental/attention/sageattention2/PROGRESS.md
【CANN 工单】Atlas 950PR 混合核 MIX_AIC_1_2 下自定义算子报 AIC error 95「MTE DDR address out of range」
运行算子在 device 侧稳定报错:
(说明:此前发现 make 的 src_copy 不感知源码修改,导致多轮编译了陈旧快照、 结论作废;b59 起建立「cp 同步 → diff 校验 → 删 compile_stop.flag → make -j1 → 时间戳+md5 验新鲜」的可信构建流程,以下全部为可信构建。)
【决定性证据】b64b 空转内核仍报 95: 在该配置下,内核所有数据通路关闭——KvTile 整体跳过、AIC 侧全部 Nd2Nz+LoadData 跳过、AIC 侧 Mmad 计算跳过、AIV 侧量化/softmax/StageD 全跳过、跨核 flags 全关、 Init 同步关。即 AIC 全程零 GM 访问、零 L1 搬运、零计算,仍报 「MTE DDR address out of range」。这排除了内核内容因素。
即该错误在基线就已存在并被自记;本轮跨核重构、workspace 契约、搬运参数修正 均未能消除它,且二分证明它不是这些代码路径引入的。
(复现材料已随仓库整理,可应要求提供。)
没有截图呢
AIC err95 复现材料
本目录配套 docs/sageattention2_AIC_err95_证据链.md(提交给 CANN 团队的证据链), 提供内核源码与 E2E 复现测试。文件按 ops-transformer 仓库原始相对路径组织。
AIC_err95 严重怀疑是环境问题 950pr DevEnv_320519 (D2026082922026) 已经修改好了 MIX_AIC_1_2改成MIX_AIC_1_1 就好了
目录结构
experimental/attention/sageattention2/
├── PROGRESS.md # 完整进展(b59-b68 二分细节)
├── op_kernel/
│ ├── common/ # 内核公共头文件(constants/tiling_data/cast 等)
│ └── sageattn_fp8/ # 主内核 attn_kernel.cpp + Stage A-D + 头文件
└── tests/e2e/ # aclnn C++ 端到端冒烟(make && ./test_small)
attention/common/op_kernel/matmul.h # LoadDataToL0A/B 参考(内核 include 依赖)
环境
硬件:Atlas 950PR,coreType=MIX(1 AIC : 2 AIV),taskRation=1:2
CANN:9.2.0-beta.1
测试 shape:B=1, Hq=1, Hkv=1, Sq=Sk=128, D=128, br=bc=64
复现步骤
将本目录按上述相对路径还原到 ops-transformer 仓库(或直接作为内核源码快照)。
编译算子(host/tiling 变更需 build.sh --pkg,kernel 变更需同步源码后 make -j1)。
E2E 冒烟:cd tests/e2e && make && ./test_small。
观察 device 日志:稳定报 aicore error exception, core id = 0, error code = 95 ("MTE DDR address out of range"),详见证据链 §2 签名。
外部依赖
catlass(catlass/catlass.hpp、tla/layout.hpp):独立仓 https://gitcode.com/cann/catlass.git,需切换到含 Arch::Ascend950 的新版。
CANN 9.2.0-beta.1 自带 kernel_operator.h、c_api/vector_datamove/ 等 AscendC 头文件。
SageAttention2 Atlas 950PR — AIC error 95「MTE DDR address out of range」证据链
1. 结论摘要
在 Atlas 950PR 混合核(1 AIC + 2 AIV)上,
Sageattention2Fp8运行稳定触发 AIC core0 error 95「MTE DDR address out of range」。经可信构建下的二分闭环,该错误与以下因素全部无关:且 基线 commit
2ab902daf提交信息自记同一遗留错误,非本轮引入。据此判定为环境/runtime 层问题,请求协助定位。2. 稳定错误签名(跨所有二进制/配置恒定)
同一时刻 AIV core0/1 报 error code=0(伴随超时,非独立错误)。
关键点:
MTE DDR address out of range),pc start=0x120041000000恒定(指向内核加载基址),aic error mask=0x395856恒定。3. 环境
npu-smiHealth=OK4. 可信构建二分矩阵(核心证据)
kSkipAicLoads(跳 K/V/P8 Nd2Nz+LoadData)kSkipAicQInit(AIC 零 GM 访问)SetFlag/WaitFlag<SOFTMAX_VS_EVENT>同步决定性证据:b64b 空转内核仍 95
b64b配置下,内核所有数据通路关闭:kSkipKvTileAll=true)kSkipCompute=true)kFlagsUpTo=0)、Init 同步关(kInitSyncOn=false)即 AIC 全程零 GM 访问、零 L1 搬运、零计算,仍报「MTE DDR address out of range」。这排除了一切内核内容因素。
5. 排除清单
6. 基线自记(非本轮引入)
基线 commit
2ab902daf(2026-08-27)提交信息原文:即该错误在基线就已存在并被自记,本轮工作(跨核重构、workspace 契约、搬运参数修正)未能消除它,且二分证明它不是这些代码路径引入的。
7. 请求协助
mte error info=0x190000020386与aic error mask=0x395856在该平台上的解码语义。附:复现材料
experimental/attention/sageattention2/op_kernel/sageattn_fp8/attn_kernel.cppexperimental/attention/sageattention2/tests/e2e/(make && ./test_small)experimental/attention/sageattention2/PROGRESS.md(b59-b68 二分细节)【CANN 工单】Atlas 950PR 混合核 MIX_AIC_1_2 下自定义算子报 AIC error 95「MTE DDR address out of range」
====================================================================
一、基本信息
====================================================================
二、问题现象(稳定错误签名,跨所有二进制/配置恒定)
运行算子在 device 侧稳定报错:
同一时刻 AIV core0/1 报 error code=0(伴随超时,非独立错误)。
关键点:
====================================================================
三、二分定位过程(核心证据:可信构建闭环)
(说明:此前发现 make 的 src_copy 不感知源码修改,导致多轮编译了陈旧快照、
结论作废;b59 起建立「cp 同步 → diff 校验 → 删 compile_stop.flag → make -j1
→ 时间戳+md5 验新鲜」的可信构建流程,以下全部为可信构建。)
【决定性证据】b64b 空转内核仍报 95:
在该配置下,内核所有数据通路关闭——KvTile 整体跳过、AIC 侧全部 Nd2Nz+LoadData
跳过、AIC 侧 Mmad 计算跳过、AIV 侧量化/softmax/StageD 全跳过、跨核 flags 全关、
Init 同步关。即 AIC 全程零 GM 访问、零 L1 搬运、零计算,仍报
「MTE DDR address out of range」。这排除了内核内容因素。
====================================================================
四、已排除因素清单
====================================================================
五、基线自记(证明非本轮引入)
基线 commit 2ab902daf(2026-08-27)提交信息原文:
即该错误在基线就已存在并被自记;本轮跨核重构、workspace 契约、搬运参数修正
均未能消除它,且二分证明它不是这些代码路径引入的。
====================================================================
六、请求协助
AIC「MTE DDR address out of range」runtime 问题或补丁版本。
解码语义(有助于进一步定位是哪个地址越界)。
====================================================================
七、复现材料
(及 stage_a_qk / stage_b_softmax / stage_c_pv / stage_d_accum 各阶段)
(复现材料已随仓库整理,可应要求提供。)
====================================================================
期望答复
没有截图呢