已开启
AIC_err95 严重怀疑是环境问题 950pr DevEnv_320519 (D2026082922026) 已经修改好了 MIX_AIC_1_2改成MIX_AIC_1_1 就好了 #52
zhangfeng1133创建于  6 天前
zhangfeng1133
6 天前 创建

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」证据链

提交对象: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


1. 结论摘要

在 Atlas 950PR 混合核(1 AIC + 2 AIV)上,Sageattention2Fp8 运行稳定触发 AIC core0 error 95「MTE DDR address out of range」。经可信构建下的二分闭环,该错误与以下因素全部无关

  • 内核计算/数据通路内容(空转内核也触发,见 §4-b64b)
  • 核数 / blockDim(bd=1 单核也触发)
  • 全部搬运参数(K^T/V/P8 的 Nd2Nz + LoadData 全跳也触发)
  • L1 缓冲布局(4×→2× 回退也触发)
  • 跨核事件同步(撤除 SOFTMAX_VS_EVENT 同步也触发)
  • workspace 契约(sys+user+GUA 与 user-only+raw-ptr 两种均触发)

基线 commit 2ab902daf 提交信息自记同一遗留错误,非本轮引入。据此判定为环境/runtime 层问题,请求协助定位。


2. 稳定错误签名(跨所有二进制/配置恒定)

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(伴随超时,非独立错误)。

关键点:

  • error code 恒定 95MTE DDR address out of range),pc start=0x120041000000 恒定(指向内核加载基址),aic error mask=0x395856 恒定。
  • 该签名在最小空转内核、全通路内核、不同 workspace 契约、不同 L1 布局下一字不变

3. 环境

硬件 Atlas 950PR
CANN 9.2.0-beta.1
coreType MIX(1 AIC : 2 AIV)
taskRation 1:2
测试 shape B=1, Hq=1, Hkv=1, Sq=Sk=128, D=128, br=bc=64
workspace user=129024B(CalcWorkspaceSize),sys=16MB(GetLibApiWorkSpaceSize)
健康检查 npu-smi Health=OK

4. 可信构建二分矩阵(核心证据)

方法论说明:此前发现 makesrc_copy 不感知 experimental/ 源码修改,导致 b40-b57 多轮编译的是陈旧快照、结论作废。b59 起建立「cp 同步 → diff 校验 → rm compile_stop.flag → make -j1 → 时间戳+md5 验新鲜」的可信构建流程,以下全部为可信构建。

轮次 配置(bd=1) 结果
b59 全修复全通路 ON,sys+user+GUA AIC 95
b62 + kSkipAicLoads(跳 K/V/P8 Nd2Nz+LoadData) AIC 95
b63 + kSkipAicQInit(AIC 零 GM 访问 AIC 95
b64b 极限空转(全开关 true,flags/同步/Q 量化全关,AIC 零 GM 访问) AIC 95
b65a 撤除 SetFlag/WaitFlag<SOFTMAX_VS_EVENT> 同步 AIC 95
b65b L1 缓冲 4×→2× 回退 AIC 95
b66 user-only + 原始 ptr + 全通路 AIC 95 + AIV0 95(该契约下 AIV 写 OOR,属另一问题)
b67/b68 恢复 sys+user+GUA + 全通路(生产定案) AIV 全净,仅 AIC 95

决定性证据:b64b 空转内核仍 95

b64b 配置下,内核所有数据通路关闭

  • KvTile 整体跳过(kSkipKvTileAll=true
  • AIC 侧全部 Nd2Nz + LoadData 跳过(K/V/P8/Q 均不搬)
  • AIC 侧 Mmad 计算跳过(kSkipCompute=true
  • AIV 侧量化/softmax/StageD 累加全跳过
  • 跨核 flags 全关(kFlagsUpTo=0)、Init 同步关(kInitSyncOn=false

AIC 全程零 GM 访问、零 L1 搬运、零计算,仍报「MTE DDR address out of range」。这排除了一切内核内容因素。


5. 排除清单

因素 排除依据
内核数据通路内容 b64b 空转内核仍 95
核数 / blockDim bd=1 单核仍 95
K^T/V/P8 搬运参数 b62 全跳仍 95
Init Q 搬运 b63 关仍 95
L1 缓冲布局 b65b 回退仍 95
跨核事件同步 b65a 撤除仍 95
workspace 契约 b66/b67 两契约均 95
陈旧二进制 b59 起全程可信构建 + md5 验新鲜

6. 基线自记(非本轮引入)

基线 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 契约、搬运参数修正)未能消除它,且二分证明它不是这些代码路径引入的。


7. 请求协助

  1. 确认 Atlas 950PR + CANN 9.2.0-beta.1 混合核(MIX_AIC_1_2)是否有已知的 AIC「MTE DDR address out of range」runtime 问题或补丁版本。
  2. 提示 mte error info=0x190000020386aic error mask=0x395856 在该平台上的解码语义。
  3. 若有可用的升级 CANN 版本 / 修复补丁,请求验证。

附:复现材料

  • 内核源码:experimental/attention/sageattention2/op_kernel/sageattn_fp8/attn_kernel.cpp
  • E2E 测试:experimental/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」

====================================================================
一、基本信息

  • 硬件平台 :Atlas 950PR
  • CANN 版本 :9.2.0-beta.1
  • coreType :MIX(1 AIC : 2 AIV)
  • taskRation :1:2
  • 算子 :Sageattention2Fp8(INT8 QK^T + FP8 PV,AscendC 混合核算子)
  • 测试 shape :B=1, Hq=1, Hkv=1, Sq=Sk=128, D=128, br=bc=64
  • 健康检查 :npu-smi Health=OK
  • 发生时间 :2026-08-29

====================================================================
二、问题现象(稳定错误签名,跨所有二进制/配置恒定)

运行算子在 device 侧稳定报错:

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(伴随超时,非独立错误)。

关键点:

  • error code 恒定 95("MTE DDR address out of range")
  • pc start=0x120041000000 恒定(指向内核加载基址)
  • aic error mask=0x395856 恒定
  • 该签名在最小空转内核、全通路内核、不同 workspace 契约、不同 L1 布局下均一字不变

====================================================================
三、二分定位过程(核心证据:可信构建闭环)

(说明:此前发现 make 的 src_copy 不感知源码修改,导致多轮编译了陈旧快照、
结论作废;b59 起建立「cp 同步 → diff 校验 → 删 compile_stop.flag → make -j1
→ 时间戳+md5 验新鲜」的可信构建流程,以下全部为可信构建。)

轮次 配置(blockDim=1) 结果
b59 全修复全通路 ON,sys+user+GUA AIC 95
b62 + 跳过 K/V/P8 的 Nd2Nz+LoadData AIC 95
b63 + 跳过 Init Q 搬运(AIC 零 GM 访问) AIC 95
b64b 极限空转(全开关关,flags/同步/Q量化全关,AIC零GM访问) AIC 95
b65a 撤除 SOFTMAX_VS_EVENT 跨核事件同步 AIC 95
b65b L1 缓冲 4x→2x 回退 AIC 95
b66 user-only + 原始指针 + 全通路 AIC 95 + AIV0 95
b67/b68 恢复 sys+user+GUA + 全通路(生产定案) AIV 全净,仅 AIC 95

【决定性证据】b64b 空转内核仍报 95:
在该配置下,内核所有数据通路关闭——KvTile 整体跳过、AIC 侧全部 Nd2Nz+LoadData
跳过、AIC 侧 Mmad 计算跳过、AIV 侧量化/softmax/StageD 全跳过、跨核 flags 全关、
Init 同步关。即 AIC 全程零 GM 访问、零 L1 搬运、零计算,仍报
「MTE DDR address out of range」。这排除了内核内容因素。

====================================================================
四、已排除因素清单

因素 排除依据
内核数据通路内容 b64b 空转内核仍 95
核数 / blockDim bd=1 单核仍 95
K^T/V/P8 搬运参数 b62 全跳仍 95
Init Q 搬运 b63 关仍 95
L1 缓冲布局 b65b 回退仍 95
跨核事件同步 b65a 撤除仍 95
workspace 契约 b66/b67 两契约均 95
陈旧二进制 b59 起全程可信构建+md5

====================================================================
五、基线自记(证明非本轮引入)

基线 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 契约、搬运参数修正
均未能消除它,且二分证明它不是这些代码路径引入的。

====================================================================
六、请求协助

  1. 确认 Atlas 950PR + CANN 9.2.0-beta.1 混合核(MIX_AIC_1_2)是否存在已知的
    AIC「MTE DDR address out of range」runtime 问题或补丁版本。
  2. 请提示 mte error info=0x190000020386 与 aic error mask=0x395856 在该平台上的
    解码语义(有助于进一步定位是哪个地址越界)。
  3. 如有可用的升级 CANN 版本 / 修复补丁,请求提供并验证。

====================================================================
七、复现材料

  • 内核源码:experimental/attention/sageattention2/op_kernel/sageattn_fp8/attn_kernel.cpp
    (及 stage_a_qk / stage_b_softmax / stage_c_pv / stage_d_accum 各阶段)
  • E2E 测试:experimental/attention/sageattention2/tests/e2e/(make && ./test_small)
  • 完整进展:experimental/attention/sageattention2/PROGRESS.md(b59-b68 二分细节)

(复现材料已随仓库整理,可应要求提供。)

====================================================================
期望答复

  • 该 AIC error 95 在 950PR 混合核上的已知原因 / 规避方式 / 补丁版本。
  • 或确认这是 CANN 9.2.0-beta.1 的 bug 并给出修复计划。

没有截图呢

likedislike