Open
[Bug|算子缺陷][迭代加固]: aclnnRotaryPositionEmbeddingV2 非连续输入触发Contiguous适配层ViewCopy失败(合法√输入98.5%被拒,应正常连续化执行) #590
Alice_zhouAdd on  23 hours ago
Alice_zhouCollaborators
23 hours ago Create

一、问题描述(必填)

  • 接口名:aclnnRotaryPositionEmbeddingV2;测试场景:non_contig(multithread 场景同根因复现);压测日期:2026-11-13;执行卡号:1(Ascend 950 / CANN 9.3.0)
  • 压测结果:non_contig 9854 条 / 成功 146 / 失败 9708(98.5% 失败);multithread 5000 条 / 成功 114(2.3%)
  • bug 判定:是bug(合法非连续输入触发 CANN 内部 Contiguous 适配层失败)
  • md 约束核对:x/cos/sin「非连续Tensor」列均为 √(合法非连续输入),out 列 ×(已按连续构造)
  • 失败证据:GWS 内 l0op::Contiguous() 物化非连续输入时,ViewCopy 算子报 CheckViewCopyParams errno[161002] OpName:[aclnnRotaryPositionEmbeddingV2_N_ViewCopy] Output tensor should not from workspace,随后 561103 kernel 选型失败
  • 基线对照:连续(normal)场景 99.8% 成功无异常——失败集中在非连续注入

二、问题复现步骤(必填)

  1. 下载测试框架:https://gitcode.com/Alice_zhou/Vector_fuzz_cpp_testing/tree/main/turing_sec/aclnnAPI_fuzz/
  2. 环境准备:rm -rf aclnnAPI_fuzz/src/op/* ;将附件 aclnnRotaryPositionEmbeddingV2_non_contig.cpp 放入 aclnnAPI_fuzz/src/op/ 下
  3. 编译:cd aclnnAPI_fuzz/ ; make op_fuzz
  4. 执行:cd out ; export LD_LIBRARY_PATH=/usr/local/Ascend/ascend-toolkit/latest/x86_64-linux/lib64:$LD_LIBRARY_PATH ; ./aclnnAPI_fuzz aclnnRotaryPositionEmbeddingV2_non_contig_fuzz 1000
    (观察 plog 中 aclnnRotaryPositionEmbeddingV2_*_ViewCopy 的 CheckViewCopyParams "Output tensor should not from workspace" 报错)

三、附件与证据(必填)

💡 该问题由 fuzz 自动化压测平台发现;如需更多上下文请下载上方附件压缩件。

🔍 代码bug点定位(2026-11-13,结合 ops-* git 仓源码复核)

测试框架复核(F1~F7):通过

  • md「非连续Tensor」列 x/cos/sin 均 √(合法非连续输入),out 列 ×(fuzz 已按连续构造)✓
  • 基线对照:连续场景 99.8% 成功 ✓;失败集中在非连续注入(SLICE/ASSTRIDED/STORAGE_PADDED/TRANSPOSE 全场景复现)✓

代码排查(ops-transformer/posembedding/rotary_position_embedding/op_host/op_api/aclnn_rotary_position_embedding.cpp)

  1. PreProcess(:102-110):对 x/cos/sin/rotate 逐一调用 TensorContiguousProcess → l0op::Contiguous(tensor, executor)(:70-78)——aclnn 层设计上对全部非连续输入做连续化
  2. RotaryPositionEmbeddingCommonProcess(:112-141):Contiguous 后经 l0op::RotaryPositionEmbedding 计算,再 l0op::Contiguous(out) + l0op::ViewCopy(result, outContiguous, executor)(:139)
  3. 崩溃证据(plog):contiguous.cpp:636 CheckViewCopyParams errno[161002] "Output tensor should not from workspace",全场景 98.5% 复现

定位分析

  • 报错点位于 闭源 l0op 层(contiguous.cpp:636 不在开源仓内):ViewCopy 的输出张量来源校验拒绝 workspace 中间张量——疑为非连续输入连续化后,中间物化张量被路由到 ViewCopy 且被判为 workspace 来源
  • 修复方向(供 CANN 侧参考):Contiguous 适配链对"view 张量物化结果"的 workspace 判定(contiguous.cpp:636 Output tensor should not from workspace),或绕过 ViewCopy 直接物化输出
  • 确切行需 CANN l0 侧确认(contiguous.cpp 为闭源);已排查范围:本仓 aclnn 层全链(PreProcess/Contiguous 调用序/ViewCopy 参数)、tiling 无非连续分支;开源仓内无该报错串
likedislike
AAlice_zhouCollaborators
10 hours ago Modify description of issue