CANN opbase 图节点无效错误日志宏 OP_LOGE_FOR_INVALID_GRAPH_NODE 使用与实现解析
CANN opbase 图节点无效错误日志宏 OP_LOGE_FOR_INVALID_GRAPH_NODE 使用与实现解析【免费下载链接】opbase本项目是CANN算子库的基础框架库为算子提供公共依赖文件和基础调度能力。项目地址: https://gitcode.com/cann/opbase本文以 CANN opbase 开源仓库的 OP_LOGE_FOR_INVALID_GRAPH_NODE 接口文档 为主体系统讲解该日志宏的功能定位、参数语义、调用方式与底层实现并结合仓库源码与 EZ0036 错误码文档说明它在图节点合法性校验场景下的完整使用链路。读者学完后可以在算子或图融合相关开发中正确使用该宏记录并上报无效图节点错误同时理解 ERROR 级别日志与 EZ0036 错误码的联动机制。功能说明记录并上报图节点无效错误OP_LOGE_FOR_INVALID_GRAPH_NODE是 opbase 公共日志模块log 分类提供的错误日志宏之一用于在图处理或算子开发过程中当输入图中包含无效节点时输出ERROR 级别日志日志内容包含触发位置文件、行号、函数、线程 ID 以及图节点名称同时上报EZ0036 错误码errTitle 为Invalid_Argument_Graph供上层框架和用户快速定位图结构问题。在 opbase 的接口体系中该宏属于 log 分类下的带错误码上报系列宏。在 op_common 接口列表 中它的定位是记录并上报图节点无效错误上报 EZ0036 错误码头文件为op_common/log/log.h即仓库中的 include/op_common/log/log.h。全部 log 分类接口的索引见 log 接口列表。函数原型OP_LOGE_FOR_INVALID_GRAPH_NODE(nodeName, reason)该宏为函数式宏使用方式与函数一致。与 opbase 中其他OP_LOGE_FOR_*系列宏如OP_LOGE_FOR_INVALID_SHAPE、OP_LOGE_FOR_FILE_OPEN等相同它不返回任何值仅负责打日志 上报错误码两个动作不承担节点有效性判断职责——是否调用该宏需要开发者先自行完成条件判断。参数说明参数名输入/输出说明nodeName输入图节点名称支持const char*或std::string类型。reason输入错误原因支持const char*或std::string类型。两个参数均会被宏内部转换为安全字符串后写入日志与错误码消息。关于类型支持的底层细节可从宏定义中看出宏体内通过std::string _safe_nodeName_(nodeName)与std::string _safe_reason_(reason)对参数做统一归一化因此两种字符串类型均可直接传入无需手动转换。返回值与约束说明返回值无。约束无。该宏没有参数个数、类型之外的额外使用限制可在算子 InferShape、图校验、融合 Pass 等代码路径中直接使用。源码实现解析宏的完整实现在 include/op_common/log/log.h核心代码如下#define OP_LOGE_FOR_INVALID_GRAPH_NODE(nodeName, reason) \ do { \ std::string _safe_nodeName_(nodeName); \ std::string _safe_reason_(reason); \ OP_LOGE_LIBOPAPI_REPORT(_safe_nodeName_.c_str(), The input graph contains an invalid node %s. Reason: %s., \ _safe_nodeName_.c_str(), _safe_reason_.c_str()); \ const std::vectorconst char* msgKey {node_name, reason}; \ const std::vectorconst char* msgvalue {_safe_nodeName_.c_str(), _safe_reason_.c_str()}; \ REPORT_PREDEFINED_ERR_MSG(EZ0036, msgKey, msgvalue); \ } while (0)其执行链路可拆解为两层ERROR 级别日志输出宏内部调用底层公共宏OP_LOGE_LIBOPAPI_REPORT同文件 include/op_common/log/log.h。该宏先通过CheckLogLevel(OP_MODULE_ID, DLOG_ERROR)判断当前 ERROR 级别日志是否开启开启时调用DlogRecord写入日志日志格式固定为[文件:行号][子模块名][函数名][线程ID] OpName:[节点名] 具体消息。其中OP_MODULE_ID定义为 63见 include/op_common/log/log.hOP_SUBMOD_NAME默认为OPS_BASE。EZ0036 错误码上报宏通过REPORT_PREDEFINED_ERR_MSG(EZ0036, msgKey, msgvalue)上报预定义错误码键值对为node_name与reason。EZ0036 对应的错误消息模板注册在 src/op_common/log/log.cpp{ errClass: Operator Errors, errTitle: Invalid_Argument_Graph, ErrCode: EZ0036, ErrMessage: The input graph contains an invalid node %s. Reason: %s., Arglist: node_name, reason, suggestion: { Possible Cause: N/A, Solution: 1. Refer to the official document for details about the dump graph. 2. Confirm and modify the input graph structure. } }该模板通过REG_FORMAT_ERROR_MSG注册见 src/op_common/log/log.cpp运行时以node_name、reason两个占位符实例化完整错误消息。调用示例原文档给出的关键代码示例如下仅供参考不支持直接拷贝运行if (nodeType nullptr) { OP_LOGE_FOR_INVALID_GRAPH_NODE(nodeName, node type is null); return ge::GRAPH_FAILED; }结合宏的语义这段代码的典型使用模式是先对图节点的关键属性如节点类型指针nodeType做有效性判断当判断不成立节点无效时调用OP_LOGE_FOR_INVALID_GRAPH_NODE传入节点名与错误原因完成日志输出和 EZ0036 错误码上报返回ge::GRAPH_FAILED结束当前处理流程。实际调用时nodeName可以是来自图遍历接口的节点名字符串reason建议填写足够定位问题的具体原因例如node type is null或融合规则约束等描述。关联错误码 EZ0036 与排障指引该宏上报的 EZ0036 错误码的完整说明见 EZ0036 Invalid_Argument_Graph 错误码文档其中给出了报错格式与真实示例The input graph contains an invalid node bias_1. Reason: In the fusion pass Conv2DPostCubeToExtendConv2DFusionPass, the output node connected to this node can only be of the following types: AscendDequant, AscendRequant.从示例可见reason中通常承载了关键排障信息——例如是在哪个融合 Passfusion pass中、对节点连接关系或输出节点类型存在何种约束。遇到 EZ0036 报错时官方给出的解决步骤为参考官方文档中关于 dump 图的详细信息导出并检查实际输入的图结构确认并修改输入图结构使图中节点满足对应 Pass 或算子的合法性约束。与其他日志宏的协作与区分在 opbase 的 log 分类中OP_LOGE_FOR_INVALID_GRAPH_NODE与下列宏同属带错误码上报系列但应用场景不同需要区分使用OP_LOGE/OP_LOGW/OP_LOGI/OP_LOGD通用级别日志宏不携带具体错误码OP_LOGE_FOR_INVALID_SHAPE/OP_LOGE_FOR_INVALID_DTYPE等针对张量 shape、dtype、format、stride 等参数校验错误上报 EZ0008~EZ0028 系列错误码OP_LOGE_FOR_FILE_PATH/OP_LOGE_FOR_FILE_OPEN/OP_LOGE_FOR_FILE_PARSE文件操作类错误上报 EZ0029~EZ0031OP_LOGE_FOR_INVALID_CONFIG*配置项校验错误上报 EZ0032~EZ0034OP_LOGE_FOR_INVALID_GRAPH_NODE图节点级错误上报 EZ0036是图结构合法性校验场景的首选宏。全套接口的横向对比可参考 op_common 接口列表 与 log 接口列表。总体而言选择哪个宏取决于错误发生的层级参数校验用OP_LOGE_FOR_INVALID_*系列文件操作用OP_LOGE_FOR_FILE_*系列而图节点无效则使用本文介绍的OP_LOGE_FOR_INVALID_GRAPH_NODE从而保证日志与错误码信息对排障人员始终是一致的、可检索的。【免费下载链接】opbase本项目是CANN算子库的基础框架库为算子提供公共依赖文件和基础调度能力。项目地址: https://gitcode.com/cann/opbase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考