Closed
[Bug|算子缺陷]: aclnnApplyRotaryPosEmbV2 layout参数(int64)注入超int32值被拦截, 错误码561002/561103非161xxx参数码 #386
Alice_zhouAdd on  4 days agoClosed at  3 days ago
Alice_zhouCollaborators
4 days ago Create

一、问题描述(必填)

  • 接口名: aclnnApplyRotaryPosEmbV2 参数: layout (int64_t 常量attr)
  • 测试场景: normal_attr64(int64 attr超int32值注入专项)
  • 压测日期: 2026-11-09 执行卡号: davinci0 CANN: 9.3.0 注入值: 2147484000(INT32_MAX+353)
  • 注入结果分布: skip/GWS561002×1000
  • 基线对照: ATTR64_OFF=1不注入时30条/接口执行通过(详见附件执行步骤说明)

二、分析结论

注入值2147484000后全部用例被拒绝, 但返回码为561002/561103(内部错误)而非161001/161002(参数校验码)。资料描述: 取值范围:1-BSND、2-SBND、3-BNSD、4-TND。 Atlas推理系列产品 、 Atlas A2系列产品 、 Atlas A3系列产品 :支持1-BSND的4维Tensor、4-TND的3维Tensor。 Ascend 950PR&950DT系列产品 :支持1-BSND、2-SBND、3-BNSD的4维Tensor, 4-TND的3维Tensor。。分析结论: 拒绝语义符合资料取值范围, 但错误码不符合aclnn分层校验规范(参数非法应报161xxx), 影响问题定位与自动化判定, 属维测错误码问题。

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

  1. 下载测试框架: https://gitcode.com/Alice_zhou/Vector_fuzz_cpp_testing/tree/main/turing_sec/aclnnAPI_fuzz/
  2. 环境准备(清除原有内容,将附件 cpp 放入对应目录下): rm -rf aclnnAPI_fuzz/src/op/*;将附件 aclnnApplyRotaryPosEmbV2_attr64.cpp 放入 aclnnAPI_fuzz/src/op/
  3. 编译: cd aclnnAPI_fuzz/ ; make op_fuzz
  4. 执行: cd out ; export ASCEND_OPP_PATH=<cann>/opp ; export LD_LIBRARY_PATH=<cann_toolkit>/lib64:$LD_LIBRARY_PATH ; ./aclnnAPI_fuzz aclnnApplyRotaryPosEmbV2_attr64_fuzz 1000
    (基线对照: 命令前加 ATTR64_OFF=1)

四、附件与证据(必填)

  • 附件压缩件(执行步骤说明+CPP+1000条执行日志+plog): aclnnApplyRotaryPosEmbV2_attr64.zip 直链下载
  • 附件内日志含逐条 [FUZZ_ATTR64] 注入标记 / [FUZZ_PARAM] 完整参数 / [FUZZ_RESULT] 结果,plog含设备侧报错原文
  • 汇总报告: out_res/attr64_超int32专项压测总报告.md

💡 存在的问题(选填)

自动化压测平台attr64专项:int64常量attr超int32边界值(2147484000)处理行为测试。预期合理行为: 无资料上界则接受执行, 有资料上界则GWS层161001/161002干净拒绝。


发散核对复核(2026-11-09:关闭,资料与实际一致)

白盒(ops-*源码)+ 黑盒(注入实测)双向核对结论:资料描述与代码实际校验/实际支持范围完全一致,接口行为符合资料,非缺陷。

  • 资料: layout取值1-BSND/2-SBND/3-BNSD/4-TND; 白盒: 适配层校验layout∈{1,2,3,4}(plog "It should be 1, 2, 3 or 4"), 与资料一致; 黑盒: 基线合法值30/30成功, 2147484000被GWS拒绝并点名枚举

按维护方决定关闭本单。(备注:拒绝时返回码为561xxx而非161xxx参数码,错误码层级规范问题如需跟踪可另行汇总处理。)

likedislike
AAlice_zhouCollaborators
3 days ago Modify description of issue
AAlice_zhouCollaborators
3 days ago Close issue
wangxun21
2 days ago Comments:

【结论】问题成立,属文档描述错误;算子行为正确,只需修改文档。

【复现】Atlas 950(CANN 9.1.0)实测:layout=1 返回 0;layout=5 返回 561002,tiling 报 Parameter layout of ApplyRotaryPosEmb has incorrect value 5. It should be 1, 2, 3 or 4。layout=2147484000 在 int64 读取后走同一范围校验分支,返回 561002,与 issue 一致。

【修改方案(确定)】

  1. 修改 docs/aclnnApplyRotaryPosEmbV2.md 返回值表:将 layout、rotaryMode 两行的返回码由 161002(ACLNN_ERR_PARAM_INVALID) 改为 561002(ACLNN_ERR_INNER_TILING_ERROR),描述注明“tiling 阶段校验失败”;表头“第一段接口完成入参校验”改为“第一段接口(含 tiling 校验)”。
  2. 代码不改:layout 已按 int64 读取(apply_rotary_pos_emb_tiling.cpp:215、apply_rotary_pos_emb_tiling_base_arch35.cpp:423),值未截断;rotary_mode 为 String,char* 读取正确。
  3. 结论:2147484000 超出 1~4,拒绝行为符合预期,无功能问题。
likedislike
AlfengYuan
AlfengYuan
2 days ago Comments:

已在 CANN 9.3.0 + Ascend950PR 上实测复核(aclnn 直调探针):

  • layout=1(合法):返回 0,正常执行;
  • layout=2147484000:返回 561002;
  • layout=4294967297(2^32+1,截断探针):返回 561002,正确拒绝。

结论:本接口 layout 在 tiling 层按 int64 完整读取(apply_rotary_pos_emb_tiling_base_arch35.cpp),无截断问题;非法值拒绝语义与资料一致(资料记载 561002),维持关闭无误。

补充:同族排查中发现 RotaryPositionEmbedding/Grad 的 mode attr 存在截断静默接受缺陷(mode=2^32 被当 mode=0 返回成功),已另行修复,见 cann/ops-transformer#7470 及关联 MR(本接口不受影响)。

likedislike