资讯动态

CANN opbase 错误码 EZ0013 深度解析:Invalid_Argument_Tensor_Shape_Dim 多参数形状维度校验错误

发布时间:2026/9/19 6:12:35 来源:尧图企业网站定制
CANN opbase 错误码 EZ0013 深度解析Invalid_Argument_Tensor_Shape_Dim 多参数形状维度校验错误【免费下载链接】opbase本项目是CANN算子库的基础框架库为算子提供公共依赖文件和基础调度能力。项目地址: https://gitcode.com/cann/opbase本篇文章聚焦 CANN 算子库基础框架 opbase 中算子形状维度校验错误码EZ0013Invalid_Argument_Tensor_Shape_Dim当算子的多个输入/输出参数形状维度不满足预期关系时框架会输出 ERROR 级别日志并上报该错误码。读完本文你将掌握 EZ0013 的完整错误格式与占位符含义、其底层上报宏OP_LOGE_FOR_INVALID_SHAPEDIMS_WITH_REASON的源码实现原理、与同族错误码EZ0011/EZ0012 等的选用区分以及算子开发中实际排查与修复该类错误的完整方法。EZ0013 错误码概述EZ0013 属于 opbase 日志模块中Operator Errors算子错误错误分类下的Invalid_Argument_Tensor_Shape_Dim张量形状维度非法错误标题。与 EZ0001~EZ0010 等形状Shape校验错误不同EZ0013 专用于多参数场景下的形状维度Shape Dim即张量的维度数/秩校验失败并且错误信息中必须附带失败原因说明。从 错误码定义表 可以看到该错误码的完整注册信息字段值errClassOperator ErrorserrTitleInvalid_Argument_Tensor_Shape_DimErrCodeEZ0013ErrMessageParameters %s of %s have incorrect shape dims %s. Reason: %s.Arglistparam_names, op_name, incorrect_dims, reasonSolutionCheck whether the shape dimensions of input/output tensors meet the relationship.该错误码的完整清单同时收录于 Operator-Errors 错误码索引。错误信息格式与占位符语义EZ0013 上报的错误消息采用统一模板Parameters %s of %s have incorrect shape dims %s. Reason: %s.其中四个%s占位符按顺序依次表示参数名称列表param_names发生维度校验失败的多个参数名通常以逗号和 and 连接例如dy, cos and sin算子或接口名称op_name触发校验的算子名称或 aclnn 接口名称例如RotaryPositionEmbeddingGrad实际维度列表incorrect_dims各个参数实际的维度数dim 数量与参数名称一一对应例如3, 4 and 4错误原因reason描述维度应满足的约束关系例如The numbers of dimensions of input dy, cos and sin should all be 3D or 4D.。真实错误示例官方错误码文档 给出的真实输出为Parameters dy, cos and sin of RotaryPositionEmbeddingGrad have incorrect shape dims 3, 4 and 4. Reason: The numbers of dimensions of input dy, cos and sin should all be 3D or 4D.该示例传达的信息非常明确RotaryPositionEmbeddingGrad算子的三个输入dy、cos、sin的实际维度数分别为 3、4、4而算子约束要求三者必须同为 3D 或同为 4D因此校验失败并上报 EZ0013。源码实现EZ0013 由哪个接口产生EZ0013 并非由框架自动抛出而是由算子或 aclnn 实现中显式调用日志模块提供的错误上报宏触发。其核心定义位于 include/op_common/log/log.h#define OP_LOGE_FOR_INVALID_SHAPEDIMS_WITH_REASON(entityName, paramNames, incorrectDims, reason) \ do { \ std::string _safe_entityName_(entityName); \ std::string _safe_paramNames_(paramNames); \ std::string _safe_incorrectDims_(incorrectDims); \ std::string _safe_reason_(reason); \ OP_LOGE_LIBOPAPI_REPORT(_safe_entityName_.c_str(), \ Parameters %s of %s have incorrect shape dims %s. Reason: %s., \ _safe_paramNames_.c_str(), _safe_entityName_.c_str(), _safe_incorrectDims_.c_str(), \ _safe_reason_.c_str()); \ const std::vectorconst char* msgKey {param_names, op_name, incorrect_dims, reason}; \ const std::vectorconst char* msgvalue {_safe_paramNames_.c_str(), _safe_entityName_.c_str(), \ _safe_incorrectDims_.c_str(), _safe_reason_.c_str()}; \ REPORT_PREDEFINED_ERR_MSG(EZ0013, msgKey, msgvalue); \ } while (0)从源码可以拆解出该宏的两层作用日志输出通过OP_LOGE_LIBOPAPI_REPORT记录一条 ERROR 级别日志。该日志宏log.h 定义以算子模块 IDOP_MODULE_ID 63、日志级别DLOG_ERROR调用DlogRecord输出格式包含源文件、行号、子模块名、函数名、线程 IDGetTid()取自syscall(__NR_gettid)以及算子名称便于在日志中快速定位出错代码位置错误码上报通过REPORT_PREDEFINED_ERR_MSG(EZ0013, msgKey, msgvalue)将错误码与键值对param_names/op_name/incorrect_dims/reason上报与 log.cpp 中的错误码注册表 形成对应关系实现错误信息的统一序列化与检索。宏参数说明与约束OP_LOGE_FOR_INVALID_SHAPEDIMS_WITH_REASON共接收 4 个参数详见 OP_LOGE_FOR_INVALID_SHAPEDIMS_WITH_REASON API 文档参数名输入/输出说明类型约束entityName输入算子名称或 aclnn 接口名称支持const char*或std::stringparamNames输入多个参数名称的拼接描述如dy, cos and sin支持const char*或std::stringincorrectDims输入各参数实际维度列表的字符串描述如3, 4 and 4支持const char*或std::stringreason输入错误原因描述支持const char*或std::string返回值无。该接口仅供算子或 aclnn 实现内部调用无额外约束。实战用法算子内如何上报 EZ0013在算子实现尤其是 shape 推导 / 参数校验阶段中典型用法是先计算各参数的维度数并与期望值比较校验失败时拼接错误信息并调用宏。仓库 API 文档中的完整参考示例OP_LOGE_FOR_INVALID_SHAPEDIMS_WITH_REASON.md如下其预期输出正是文档中的 RotaryPositionEmbeddingGrad 示例// 预期输出: Parameters dy, cos and sin of RotaryPositionEmbeddingGrad have incorrect shape dims // 3, 4 and 4. Reason: The numbers of dimensions of input dy, cos and sin should all be 3D or 4D. if (dyDimNum ! expectedDim || cosDimNum ! expectedDim || sinDimNum ! expectedDim) { std::string dimMsg std::to_string(dyDimNum) , std::to_string(cosDimNum) and std::to_string(sinDimNum); OP_LOGE_FOR_INVALID_SHAPEDIMS_WITH_REASON(RotaryPositionEmbeddingGrad, dy, cos and sin, dimMsg.c_str(), The numbers of dimensions of input dy, cos and sin should all be 3D or 4D.); return ge::GRAPH_FAILED; }要点归纳多个参数的实际维度列表incorrectDims需手动拼接为可读字符串且顺序与paramNames中的参数顺序一一对应上报 EZ0013 后应同时返回失败码如示例中的ge::GRAPH_FAILED中断后续执行宏内部对每个入参先做std::string安全拷贝_safe_*_因此传参时即便使用临时字符串也不会悬垂。同族错误码辨析何时用 EZ0013EZ0013 是形状维度校验错误家族中的一员opbase 在 log.h 中为不同场景提供了多套宏选用依据是参数数量与是否附带原因/期望值错误码适用场景错误消息模板EZ0011单参数维度错误明确给出期望维度Parameter %s of %s has incorrect shape dim %s. It should be %s.EZ0012单参数维度错误附带原因Parameter %s of %s has incorrect shape dim %s. Reason: %s.EZ0013多参数维度错误附带原因Parameters %s of %s have incorrect shape dims %s. Reason: %s.对应宏分别为OP_LOGE_FOR_INVALID_SHAPEDIMEZ0011log.h#L370-L390、OP_LOGE_FOR_INVALID_SHAPEDIM_WITH_REASONEZ0012log.h#L401-L414与本文主角OP_LOGE_FOR_INVALID_SHAPEDIMS_WITH_REASONEZ0013log.h#L426-L440。此外还需注意 EZ0013 与形状本身非法EZ0008~EZ0010以及形状大小元素总数非法EZ0014~EZ0016的区别维度Dim指张量的秩即 shape 的层数/元素个数如 3D 张量的维度数为 3EZ0013 校验的是这一层关系形状大小Shape Size指张量的元素总数由 EZ0014~EZ0016 系列错误码单/多参数、含/不含原因覆盖形状Shape本身指各维度具体取值由 EZ0008~EZ0010 覆盖。从 error_code.h 可看到内部枚举INVALID_SHAPE_DIM 70011即对应形状维度非法这一基础校验类别EZ0011~EZ0013 是对该类别在不同上报场景下的细化。问题定位与解决方案当运行算子出现 EZ0013 错误时错误码文档 给出的核心排查思路是检查输入/输出张量的形状维度是否满足算子约定的关系。具体排查建议解析错误消息从消息中提取四个关键信息——出错的参数列表param_names、算子/接口名op_name、实际维度列表incorrect_dims、约束原因reason。incorrect_dims与param_names按位置一一对应据此可确定是哪个参数不满足约束核对算子约束结合reason中描述的约束例如三个输入必须同为 3D 或 4D在算子文档或实现中确认各参数的合法维度范围检查调用侧数据重点核对上游传入张量的 shape确认是否有参数被错误地构造为高维如 4D或低维如 3D张量修正后重跑调整张量维度使其满足算子约束关系该错误即不再触发若错误持续出现可结合日志中输出的源文件与行号OP_LOGE_LIBOPAPI_REPORT会自动带上__FILE__与__LINE__直接定位到上报该错误码的校验代码。关联资源EZ0013 官方错误码文档本文主依据Operator Errors 错误码总索引EZ0001~EZ0038 全量错误码列表OP_LOGE_FOR_INVALID_SHAPEDIMS_WITH_REASON API 文档含完整调用示例log.h 宏定义EZ0013 上报宏源码log.cpp 错误码注册表EZ0013 错误码元信息与建议error_code.h 内部错误枚举INVALID_SHAPE_DIM 70011【免费下载链接】opbase本项目是CANN算子库的基础框架库为算子提供公共依赖文件和基础调度能力。项目地址: https://gitcode.com/cann/opbase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价