已关闭
[Documentation|文档反馈]: aclnnMaxV2 资料错误码表 161002 缺少「out 形状与归约推导不符」子项 #4262
liuhanwen8创建于 5 天前关闭于 2 天前
5 天前 添加了label:documentation
陈思
4 天前 评论:
4 天前 评论:
您好,核对 ae087b184,CheckShape / CheckParams 会根据 dims、keepDims、noopWithEmptyDims 推导归约形状,输出不满足现有检查时返回 161002;错误码表 目前只列出类型、轴越界和重复轴,确实遗漏了这类原因。
建议补充“out 的形状不满足按 dims/keepDims/noopWithEmptyDims 推导的结果要求”,同步更新表格 rowspan,并保持与既有形状比较规则一致。此项是返回码说明补充,无需改变现有校验或支持面;设备返回码依据您提供的 910B3 记录,本轮未重复设备测试。


4 天前 将 chen_0715 设为负责人
4 天前 添加了label:pending-confirmation
4 天前 删除了label:pending-confirmation
4 天前 将 m0_55003149 设为负责人
4 天前 移除了负责人 chen_0715
3 天前 关联了pull request:docs(reduce): 澄清 MeanV2/MaxV2/AminmaxAll 接口约束
2 天前 关闭了 issue
1 天前 添加了label:resolved
现象
docs/aclnnMaxV2.md的「返回值」表格中,161002(ACLNN_ERR_PARAM_INVALID)只列出三个子项:但
op_api/aclnn_max_v2.cpp的CheckParams在CheckShape失败时同样返回161002(op_api/aclnn_max_v2.cpp:173-184与:198-199):reduce_maxInferShape(self->GetViewShape(), dims, keepDims, noopWithEmptyDims, reduceShape); // out的shape必须满足Infer shape OP_CHECK_SHAPE_NOT_EQUAL_WITH_EXPECTED_SIZE(out, reduceShape, return false); ... // 4. 检查out的shape是否满足reduce推导 CHECK_RET(CheckShape(self, dims, keepDims, noopWithEmptyDims, out), ACLNN_ERR_PARAM_INVALID);即 out 形状与
reduce_maxInferShape的推导不一致时也返回161002,资料错误码表缺少该子项。期望
docs/aclnnMaxV2.md的 161002 子项中补充一条:out 的 shape 与按 dims/keepDims/noopWithEmptyDims 推导的结果不一致。环境
/usr/local/Ascend/cann-9.2.0,version.info 显示 26.1.1)347457003073e2ebc9b08ab5f8275ec1b6417cfb(2026-10-29)复现步骤
repro_maxv2.cpp保存到任意目录。source /usr/local/Ascend/cann-9.2.0/set_env.sh。g++ -std=c++17 -O1 repro_maxv2.cpp -o repro_maxv2 -I/usr/local/Ascend/cann-9.2.0/include -L/usr/local/Ascend/cann-9.2.0/aarch64-linux/lib64 -lopapi_math -lnnopbase -lopapi -lascendcl -Wl,-rpath,/usr/local/Ascend/cann-9.2.0/aarch64-linux/lib64./repro_maxv2,观察首段返回码。复现脚本
// aclnnMaxV2 out 形状与归约推导不符时的返回码探针 #include <cstdio> #include <unistd.h> #include <vector> #include "acl/acl.h" #include "aclnnop/aclnn_max_v2.h" int main() { if (aclInit(nullptr) != ACL_SUCCESS) { return 2; } if (aclrtSetDevice(0) != ACL_SUCCESS) { return 2; } aclrtStream stream = nullptr; aclrtCreateStream(&stream); // 静态数组:aclCreateTensor 不保证复制 shape/strides static int64_t selfShape[2] = {4, 6}; static int64_t selfStride[2] = {6, 1}; static int64_t outShape[2] = {1, 6}; // 正确应为 [6] static int64_t outStride[2] = {6, 1}; void* selfDev = nullptr; void* outDev = nullptr; aclrtMalloc(&selfDev, 4 * 6 * sizeof(float), ACL_MEM_MALLOC_HUGE_FIRST); aclrtMalloc(&outDev, 1 * 6 * sizeof(float), ACL_MEM_MALLOC_HUGE_FIRST); std::vector<float> hostSelf(24, 1.0f), hostOut(6, 0.0f); aclrtMemcpy(selfDev, 24 * sizeof(float), hostSelf.data(), 24 * sizeof(float), ACL_MEMCPY_HOST_TO_DEVICE); aclrtMemcpy(outDev, 6 * sizeof(float), hostOut.data(), 6 * sizeof(float), ACL_MEMCPY_HOST_TO_DEVICE); aclTensor* self = aclCreateTensor(selfShape, 2, ACL_FLOAT, selfStride, 0, ACL_FORMAT_ND, selfShape, 2, selfDev); aclTensor* out = aclCreateTensor(outShape, 2, ACL_FLOAT, outStride, 0, ACL_FORMAT_ND, outShape, 2, outDev); static int64_t dimsData[1] = {0}; aclIntArray* dims = aclCreateIntArray(dimsData, 1); uint64_t wsSize = 0; aclOpExecutor* executor = nullptr; auto ret = aclnnMaxV2GetWorkspaceSize(self, dims, false, false, out, &wsSize, &executor); printf("aclnnMaxV2GetWorkspaceSize ret=%d (expect 161002)\n", static_cast<int>(ret)); fflush(stdout); _exit(ret == 0 ? 1 : 0); }实测输出:
同一形态另有 8 条变体(out 比推导多一维 / 少一维 / 元素数不符 / keepDims 取反 / noop 取反 / 多维顺序错 / 全 1),首段同样返回
161002。影响
self=[4,6]、dims=[0]时把 out 建成[1,6])会拿到161002,按现有资料会误判成「dtype 不支持」或「dims 非法」,排查方向被带偏。建议
在 161002 子项中补充「out 的 shape 与按 dims/keepDims/noopWithEmptyDims 推导的结果不一致」,与
CheckShape的四处校验保持一致。