尧图精选

CANN opbase 算子属性错误 EZ0002 Invalid_Attr 排查指南:错误码解析与 OP_LOGE_WITH_INVALID_ATTR 使用详解

🕒 发布时间:2026/9/19 14:17:09 📁 来源:尧图网络
CANN opbase 算子属性错误 EZ0002 Invalid_Attr 排查指南错误码解析与 OP_LOGE_WITH_INVALID_ATTR 使用详解【免费下载链接】opbase本项目是CANN算子库的基础框架库为算子提供公共依赖文件和基础调度能力。项目地址: https://gitcode.com/cann/opbase本文围绕 CANN opbase 算子库的预定义错误码EZ0002 Invalid_Attr展开说明该错误在算子开发与 aclnn 接口实现中的出现场景、日志格式与占位符语义并结合仓库源码剖析其上报机制与日志接口用法帮助开发者在算子属性校验失败时快速定位根因并修复。阅读本文后你将掌握 EZ0002 的完整排查路径、日志输出样例解读方法以及如何在自定义算子中规范地触发与上报该错误码。一、EZ0002 是什么EZ0002错误标题Invalid_Attr是 CANN opbase 中用于表示算子属性值不合法的预定义错误码。在算子开发或 aclnn 接口实现中当传入的属性值Attribute不在算子定义所允许的范围内时框架会输出该错误码对应的日志用于辅助开发者定位问题。在仓库中EZ0002 属于Operator Errors算子错误这一错误类别其定义与说明位于英文错误码文档中文错误码文档算子错误码索引在错误码体系中EZ 前缀代表算子Operator相关错误与 aclnn 接口参数错误EZ1001 系列相区分。同系列的还有 EZ0001输入 Shape 错误、EZ0003属性大小错误等EZ0002 专门针对属性取值不正确这一场景。二、报错格式与占位符含义EZ0002 的报错格式如下Attribute %s of %s has incorrect value %s. It should be %s.其中各占位符的含义依次为占位符含义典型示例值第 1 个%s属性名attr_namedim第 2 个%s算子名或接口名op_nameKthValue第 3 个%s属性错误值incorrect_val5第 4 个%s属性正确值correct_val[-3, 2]官方文档给出的报错示例如下Attribute dim of KthValue has incorrect value 5. It should be [-3, 2].这条日志的含义是算子KthValue的属性dim被传入了错误的值5而该属性的合法取值范围是[-3, 2]。开发者应据此将属性值修正到合法区间内。三、错误码在源码中的定义EZ0002 不仅在文档中有说明还在仓库源码中登记为预定义错误消息。在 src/op_common/log/log.cpp 中可以看到其完整定义{ errClass: Operator Errors, errTitle: Invalid_Attr, ErrCode: EZ0002, ErrMessage: Attribute %s of %s has incorrect value %s. It should be %s., Arglist: attr_name, op_name, incorrect_val, correct_val, suggestion: { Possible Cause: N/A, Solution: Check whether the operator attribute is correct. } }这段定义与文档中的格式完全一致ErrMessage定义了日志模板Arglist说明了 4 个占位符的依次含义suggestion则给出了标准排查建议——检查算子的属性是否正确。四、如何触发 EZ0002OP_LOGE_WITH_INVALID_ATTR 接口在算子实现中EZ0002 错误码是通过日志宏OP_LOGE_WITH_INVALID_ATTR触发上报的。该接口定义在 include/op_common/log/log.h#define OP_LOGE_WITH_INVALID_ATTR(entityName, attrName, incorrectVal, correctVal) \ do { \ std::string _safe_entityName_(entityName); \ std::string _safe_attrName_(attrName); \ std::string _safe_incorrectVal_(incorrectVal); \ std::string _safe_correctVal_(correctVal); \ OP_LOGE_LIBOPAPI_REPORT(_safe_entityName_.c_str(), \ Attribute %s of %s has incorrect value %s. It should be %s., \ _safe_attrName_.c_str(), _safe_entityName_.c_str(), _safe_incorrectVal_.c_str(), \ _safe_correctVal_.c_str()); \ const std::vectorconst char* msgKey {attr_name, op_name, incorrect_val, correct_val}; \ const std::vectorconst char* msgvalue {_safe_entityName_.c_str(), _safe_attrName_.c_str(), \ _safe_incorrectVal_.c_str(), _safe_correctVal_.c_str()}; \ REPORT_PREDEFINED_ERR_MSG(EZ0002, msgKey, msgvalue); \ } while (0)该宏的调用过程可以拆解为两部分日志输出通过OP_LOGE_LIBOPAPI_REPORT打印 ERROR 级别日志日志内容为文档中描述的报错格式日志输出前会通过CheckLogLevel(static_castint(OP_MODULE_ID), DLOG_ERROR)见 include/op_common/log/log.h检查当前日志级别是否允许输出 ERROR 级别日志。错误码上报通过REPORT_PREDEFINED_ERR_MSG(EZ0002, msgKey, msgvalue)以键值对形式上报错误码及其参数便于上层框架统一采集与归档。值得注意的是宏内部将 4 个入参都先拷贝到std::string局部变量再统一取.c_str()使用避免了传入的字符串在日志拼接期间失效的问题。参数说明参数名输入/输出说明entityName输入算子名称或 aclnn 接口名称支持 const char* 或 std::string 类型。attrName输入属性名称支持 const char* 或 std::string 类型。incorrectVal输入实际错误属性值支持 const char* 或 std::string 类型。correctVal输入预期正确属性值支持 const char* 或 std::string 类型。返回值无。调用示例在算子 InferShape 或属性校验阶段可以按如下方式使用示例来自 OP_LOGE_WITH_INVALID_ATTR 接口文档// 预期输出: Attribute axis of MyOp has incorrect value 3. It should be 0 or 1. if (axis_ ! 0 axis_ ! 1) { OP_LOGE_WITH_INVALID_ATTR(MyOp, axis, std::to_string(axis_), 0 or 1); return false; }当属性axis不合法时会输出 ERROR 级别日志并上报 EZ0002 错误码。注意该接口文档中标注本接口已废弃建议使用 OP_LOGE_FOR_INVALID_VALUE 替代见 OP_LOGE_FOR_INVALID_VALUE 文档OP_LOGE_FOR_INVALID_VALUE 用于更通用的参数值校验场景上报的是 EZ0024 错误码用法与参数语义基本一致开发新算子时建议优先使用新接口。触发场景举例场景示例属性取值超出允许范围枚举类属性传入了未定义值如dim传入5而合法范围是[-3, 2]属性取值类型与定义不符整型属性传入了负数但定义要求非负属性间约束不满足属性 A 与属性 B 的取值组合不满足算子约束五、排查步骤与修复建议当算子执行报出 EZ0002 错误时按以下步骤排查解析日志占位符按属性名 → 算子名 → 错误值 → 正确值的顺序定位问题属性。以Attribute dim of KthValue has incorrect value 5. It should be [-3, 2].为例问题属性是KthValue的dim其值为5合法范围为[-3, 2]。核对算子属性定义查阅该算子在算子信息库op info或算子定义文档中的属性约束确认属性的合法取值、类型与默认值。检查调用方传参确认调用侧如 aclnn 接口调用方或构图侧传入的属性值是否符合算子定义修正越界的属性值。修正后复测将属性值修正到合法区间后重新执行若仍报错则需结合算子日志检查属性校验逻辑本身是否正确。六、相关资源错误码定义与建议英文 EZ0002-Invalid_Attr.md、中文 EZ0002-Invalid_Attr.md错误码总索引Operator-Errors.md错误码登记表src/op_common/log/log.cpp日志接口头文件include/op_common/log/log.h日志接口文档OP_LOGE_WITH_INVALID_ATTR、OP_LOGE_FOR_INVALID_VALUE【免费下载链接】opbase本项目是CANN算子库的基础框架库为算子提供公共依赖文件和基础调度能力。项目地址: https://gitcode.com/cann/opbase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →