已关闭
[Bug-Report|缺陷反馈]: aclnnGeluQuant 非法 dtype 返回 361001 而非 161002 #5528
majinglan创建于  9月3日关闭于  20 天前
majinglan
majinglan
9月3日 创建

Thanks for sending an issue! Please fill in the following template to help quickly solve your problem.

Describe the current behavior / 问题描述 (Mandatory / 必填)

测试环境

  • CANN 版本:9.1.0-beta.1(aarch64)
  • NPU:910B3
  • 仓库:ops-nn(commit cf0e89de0),算子路径:activation/gelu_quant/op_host/op_api/
  • 二进制:/opt/mjl/exp0829/ops-nn/build/tests/ut/op_api/nn_op_api_ut
  • 编译命令:bash build.sh -u --noexec --ops=gelu_quant --soc=ascend910b -j8

缺陷描述

aclnnGeluQuantGetWorkspaceSize 无 CheckDtypeValid 函数(全仓 dtype_checks=0)。self 参数传非法 dtype(INT32,应 FLOAT/FLOAT16/BF16)时返回 361001(RUNTIME_ERROR),应返回 161002(PARAM_INVALID)。同时 CheckPlatform() 返回 ACLNN_ERR_RUNTIME_ERROR 也不规范(RC3)。

复现命令

source /usr/local/Ascend/ascend-toolkit/latest/set_env.sh
BIN=/opt/mjl/exp0829/ops-nn/build/tests/ut/op_api/nn_op_api_ut

$BIN --gtest_filter="l2GeluQuantProbeTest.x_invalid_dtype_int32"
# 期望 rc=1,日志 "Which is: 361001"(应 161002)

期望行为 vs 实测行为

置空/非法参数 期望返回码 实测返回码 实测 rc
self=INT32(应 FLOAT/FLOAT16/BF16) 161002 361001 1 (FAIL)

Which is 日志

Expected equality of these values:
  aclRet
    Which is: 361001    ← 实际(RUNTIME_ERROR,应 PARAM_INVALID)
  161002                 ← 期望

缺陷点

  • 文件:activation/gelu_quant/op_host/op_api/aclnn_gelu_quant.cpp
  • CheckDtypeValid 函数缺失(dtype_checks=0)
  • CheckPlatform() 返回 ACLNN_ERR_RUNTIME_ERROR(:251),非规范返回码

修复建议

  1. 新增 CheckDtypeValid 函数,校验 self/inputScale/inputOffset/y/outScale 的 dtype
  2. CheckPlatform() 返回码改为 ACLNN_ERR_PARAM_INVALID(161002)

探针用例路径

/opt/mjl/exp0829/ops-nn/nullptr_audit/archive/gelu_quant/test_aclnn_gelu_quant_probe.cpp

一键复现

bash /opt/mjl/exp0829/ops-nn/nullptr_audit/repro.sh --case=17

交付件与完整复现步骤

交付件

附件 nullptr_audit_deliverables.tar.gz,解压后结构:

nullptr_audit_deliverables/
├── archive/                          # 全部探针用例源码(按算子归档)
│   └── <算子>/<探针文件>.cpp
├── repro.sh                          # 一键复现脚本(支持 --case=N --gdb)
├── logs/                             # 全部执行日志 + gdb 堆栈
└── issues/                           # 全部 issue 文档

完整复现步骤

# Step 0: 准备环境(每次新 shell 需执行)
source /usr/local/Ascend/ascend-toolkit/latest/set_env.sh
REPO=/path/to/ops-nn                   # 替换为你的仓库路径
cd $REPO

# Step 1: 解压交付件
tar xzf nullptr_audit_deliverables.tar.gz -C /tmp/nullptr_audit

# Step 2: 部署探针用例到仓内
mkdir -p activation/gelu_quant/tests/ut/op_host/op_api
cp /tmp/nullptr_audit/archive/gelu_quant/test_aclnn_gelu_quant_probe.cpp activation/gelu_quant/tests/ut/op_host/op_api/

# Step 3: 编译
bash build.sh -u --noexec --ops=gelu_quant --soc=ascend910b -j8

# Step 4: 执行探针
BIN=build/tests/ut/op_api/nn_op_api_ut
$BIN --gtest_filter="l2GeluQuantProbeTest.x_invalid_dtype_int32"
# 判读:rc=1(断言FAIL)= 缺陷存在;rc=0(PASS)= 已修复

# Step 5(可选):gdb 调试(仅 P0 崩溃缺陷)

# Step 6: 一键复现(替代 Step 2-5)
bash /tmp/nullptr_audit/repro.sh --case=17

# Step 7: 修复后回归验证
$BIN --gtest_filter="l2GeluQuantProbeTest.x_invalid_dtype_int32"
# 期望输出:[ PASSED ] 1 test.(rc=0)

修复回归判据

状态 rc 含义
缺陷存在 1(断言FAIL) 探针检测到缺陷
已修复 0(全部PASS) 探针通过,缺陷已消除

Environment / 环境信息 (Mandatory / 必填)

c502dca3221e4ec3bc76c070c69dfad3.gz

Steps to reproduce the issue / 重现步骤 (Mandatory / 必填)

附件有测试脚本

Describe the expected behavior / 预期结果 (Mandatory / 必填)

附件有测试脚本

附件有测试脚本

Special notes for this issue/备注 (Optional / 选填)

likedislike
yuning_chenyuning_chen成员
9月3日 将 east_yang 设为负责人
yuning_chen
yuning_chen成员
9月3日 评论:

您好,感谢反馈,问题已收到,当前 @east_yang 正在跟踪处理。

likedislike
guijianwei
guijianwei
20 天前 评论:

/assign

likedislike
CANN-robotCANN-robot成员
20 天前 将 guijianwei 设为负责人
guijianweiguijianwei
20 天前 关联了pull request:fix errorCode for invalid self dtype (INT32) on 910B
guijianwei
guijianwei
20 天前 评论:

经核实,CheckDtypeValid 实际已存在(activation/gelu_quant/op_host/op_api/aclnn_gelu_quant.cpp:180,
并在 CheckParams 中被调用,见 :267),自算子初始版本即有,并非缺失。

真正根因是 CheckParams 中 CheckPlatform() 先于 dtype 检查执行(aclnn_gelu_quant.cpp:252)。
GeluQuant 仅支持 arch3510,在 910B3 等非 3510 平台上平台检查先失败,
CHECK_RET(CheckPlatform(), ACLNN_ERR_RUNTIME_ERROR) 直接返回 361001,
CheckDtypeValid 尚未执行到——探针因此将平台检查的错误码误归因为 dtype 缺检。

已修复CheckParam错误码为ACLNN_ERR_PARAM_INVALID

likedislike
guijianweiguijianwei
20 天前 关联了pull request:fix errorCode for invalid self dtype (INT32) on 910B
CANN-robotCANN-robot成员
20 天前 关闭了 issue
CANN-robotCANN-robot成员
20 天前 添加了label:resolved