ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

CANN opbase 算子库 EZ0031 文件解析失败错误码(File_Operation_Error_Parse)排查指南

CANN opbase 算子库 EZ0031 文件解析失败错误码(File_Operation_Error_Parse)排查指南 CANN opbase 算子库 EZ0031 文件解析失败错误码File_Operation_Error_Parse排查指南【免费下载链接】opbase本项目是CANN算子库的基础框架库为算子提供公共依赖文件和基础调度能力。项目地址: https://gitcode.com/cann/opbaseCANN opbase 是 CANN 算子库的基础框架库为算子提供公共依赖、日志与错误码上报能力。本文围绕算子库错误码体系中的 EZ0031File_Operation_Error_Parse文件解析失败详细讲解该错误码的报错格式、占位符语义、典型报错场景、底层上报实现机制以及定位与修复方法帮助开发者在算子开发与配置阶段遇到该错误时快速收敛问题。读完本文你将掌握 EZ0031 的完整排查路径并能区分它与 EZ0029/EZ0030/EZ0032 以及 Nnopbase 侧 EZ1004/EZ1005 等相邻错误码的差异。错误码总览EZ0031 属于 CANN 错误码体系中的Operator Errors算子错误类别错误标题为File_Operation_Error_Parse含义是算子运行或编译过程中对某个配置文件、算子描述文件或参数文件进行**内容解析parse**时失败。它与相邻错误码共同构成文件操作错误序列边界如下错误码错误标题触发阶段典型场景EZ0029File_Operation_Error_Invalid_Path路径校验传入的文件路径非法EZ0030File_Operation_Error_Open文件打开文件不存在或无读权限EZ0031File_Operation_Error_Parse文件内容解析配置文件缺少配置项、格式错误、语法非法EZ0032Config_Error配置项取值配置项存在但取值非法对应文档可参考 EZ0029-File_Operation_Error_Invalid_Path、EZ0030-File_Operation_Error_Open 与 EZ0032-Config_Error。错误信息格式解析根据 EZ0031 错误码文档该错误码的报错格式为Failed to parse file %s. Reason: %s.其中两个%s占位符的含义依次为第一个 %s发生解析失败的文件路径file path通常是完整绝对路径用于快速定位是哪个文件出了问题第二个 %s解析失败的具体原因error cause由触发方在调用日志宏时显式传入用于描述为什么解析失败。在错误码注册表中EZ0031 的参数列表被声明为file_name, reason。具体注册信息见 src/op_common/log/log.cpp 中的错误码描述 JSON{ errClass: Operator Errors, errTitle: File_Operation_Error_Parse, ErrCode: EZ0031, ErrMessage: Failed to parse file %s. Reason: %s., Arglist: file_name, reason, suggestion: { Possible Cause: N/A, Solution: Modify the configuration file by referring to the specifications in the user guide. } }报错示例逐行解读原文档给出的报错示例如下Failed to parse file /home/ops-cv/build/tests/ut/op_host/aipp_ut_test_26.cfg. Reason: The AIPP operator configuration file does not contain configuration item aipp_mode.逐字段解读文件路径/home/ops-cv/build/tests/ut/op_host/aipp_ut_test_26.cfg这是编译产物目录下的一个 AIPPAI PreProcessing图像预处理算子配置文件扩展名为.cfg。从路径看它来自算子 Host 侧单元测试构建目录说明该错误可在算子 UT 或编译阶段复现报错原因The AIPP operator configuration file does not contain configuration item aipp_mode解析器在读取该.cfg文件时发现文件中缺少名为aipp_mode的配置项。aipp_mode是 AIPP 配置文件中的关键配置项用于声明 AIPP 的处理模式。在相邻错误码 EZ0032-Config_Error 的示例中可以看到它的合法取值约束Value NA of configuration item aipp_mode ... is invalid, it should be static or dynamic.即aipp_mode的合法取值应为static或dynamic。二者结合可以推断出若配置文件中根本没有aipp_mode配置项 → 触发 EZ0031文件解析失败缺少配置项若aipp_mode存在但取值不在static/dynamic范围内 → 触发 EZ0032配置项取值非法。由此可见EZ0031 描述的是结构/内容层面缺失导致无法完成解析的问题而 EZ0032 描述的是取值合法性问题。在 CANN 算子库中AIPP 相关错误也对应有内部错误码INVALID_AIPP_ERROR 70014可见于 include/op_common/log/error_code.h。错误码的上报机制从宏到日志与错误上报日志宏 OP_LOGE_FOR_FILE_PARSEEZ0031 在算子库中通过日志宏OP_LOGE_FOR_FILE_PARSE触发上报其声明位于 include/op_common/log/log.h/** * EZ0031: File operation parse error * fileName:string - File name * reason:string - Reason for the error * errMessage: Failed to parse file [fileName]. Reason: [reason]. */ #define OP_LOGE_FOR_FILE_PARSE(opName, fileName, reason) \ do { \ std::string _safe_opName_(opName); \ std::string _safe_fileName_(fileName); \ std::string _safe_reason_(reason); \ OP_LOGE_LIBOPAPI_REPORT(_safe_opName_.c_str(), Failed to parse file %s. Reason: %s., \ _safe_fileName_.c_str(), _safe_reason_.c_str()); \ const std::vectorconst char* msgKey {file_name, reason}; \ const std::vectorconst char* msgvalue {_safe_fileName_.c_str(), _safe_reason_.c_str()}; \ REPORT_PREDEFINED_ERR_MSG(EZ0031, msgKey, msgvalue); \ } while (0)宏的完整调用链可以拆解为两个动作输出 ERROR 级别日志OP_LOGE_LIBOPAPI_REPORT以算子/接口名称opName为上下文输出格式化错误日志Failed to parse file fileName. Reason: reason.与错误码文档中描述的报错格式完全一致上报预定义错误码REPORT_PREDEFINED_ERR_MSG(EZ0031, msgKey, msgvalue)将参数对{file_name, fileName}、{reason, reason}与错误码 EZ0031 一起上报供上层框架、日志系统与错误码映射工具识别。宏的三个入参见 OP_LOGE_FOR_FILE_PARSE 接口文档说明如下参数名输入/输出说明opName输入算子名称或 aclnn 接口名称支持const char*或std::string类型fileName输入发生解析失败的文件名称路径支持const char*或std::string类型reason输入解析失败原因支持const char*或std::string类型宏内部会将三个入参先转换为局部std::string再使用因此调用方传入临时字符串或 C 风格字符串都是安全的。调用示例接口文档给出的典型调用场景是 JSON 配置文件解析失败if (!ParseJsonFile(fileName, config)) { OP_LOGE_FOR_FILE_PARSE(MyOp, fileName, invalid json format); return ge::GRAPH_FAILED; }这段代码的模式在算子 Host 侧非常通用先调用解析函数如ParseJsonFile读取并校验配置文件解析失败时立即通过OP_LOGE_FOR_FILE_PARSE记录日志并上报 EZ0031然后返回失败状态码终止流程。opName建议填写当前算子或 aclnn 接口名称便于在日志中快速区分出错主体。注意区分Nnopbase 侧的 EZ1004 / EZ1005需要特别说明的是opbase 仓库中还存在另一组标题同为File_Operation_Error_Parse的错误码——EZ1004 与 EZ1005它们属于 Nnopbase Errors 类别面向的是 Nnopbase 框架自身的文件解析场景例如算子 JSON 信息文件损坏与 EZ0031 面向算子侧配置文件的定位不同EZ1004文件解析失败对应宏OP_LOGE_FOR_FILE_OPERATION_ERROR_PARSE定义见 src/nnopbase/common/inc/nnopbase_error_msg.hEZ1005文件解析失败含内容非法语义多用于自定义/内置算子 JSON 文件损坏场景对应宏OP_LOGE_FOR_FILE_OPERATION_ERROR_PARSE_WITH_INVALID_CONTENT定义见 src/nnopbase/common/inc/nnopbase_error_msg.h两条错误码在 Nnopbase 错误码表中的注册信息见 src/nnopbase/composite_op/log/op_error_manager.cpp其中 EZ1005 的官方建议是1. 重新安装自定义算子包2. 重新安装内置算子包针对 JSON 文件损坏。详细文档可参考 EZ1004-File_Operation_Error_Parse 与 EZ1005-File_Operation_Error_Parse。判断准则如果你的报错码是 EZ0031问题出在算子侧解析的配置文件如 AIPP 的.cfg、算子 tiling 配置等应按下文定位与解决方法排查如果是 EZ1004/EZ1005则应优先检查算子信息 JSON 文件是否损坏或安装包是否完整。定位与解决方法原文档给出的解决方法是参考用户指南中的规格修改配置文件对应错误码注册表中的官方建议Modify the configuration file by referring to the specifications in the user guide.。结合示例与代码机制完整的排查路径建议如下1. 从报错中提取两个关键信息先读取报错文本分别提取第一个占位符对应的文件完整路径——确认该文件在磁盘上是否存在、路径是否正确第二个占位符对应的失败原因——这是定位根因的直接线索如缺少配置项 aipp_mode。2. 按原因类型分类处理原因类型示例处理方式缺少配置项does not contain configuration item aipp_mode打开配置文件对照用户指南的规格补全缺失配置项配置项取值非法语法层面无法解析枚举值拼写错误、类型不匹配参照规格修正取值例如aipp_mode应为static或dynamic文件格式/语法错误JSON 解析失败、INI 段落缺失、非法字符使用 JSON 校验工具或文本编辑器检查文件语法文件内容被截断/损坏文件不完整、编码异常重新生成或重新拷贝配置文件3. 从源码调用点反查解析逻辑如果无法从原因文本直接定位可以在算子源码中搜索OP_LOGE_FOR_FILE_PARSE的调用点找到触发解析的代码路径进而回溯对应的解析函数与校验逻辑确认解析器对配置文件的具体格式要求。这是从现象走向根因最直接的方式。4. 修复后回归验证修改配置文件后重新触发原操作重新编译算子、重跑 UT 或用例确认EZ0031 不再出现若配置项取值仍有问题可能继续抛出相邻错误码 EZ0032此时继续按 EZ0032-Config_Error 的说明修正取值。常见触发场景清单综合错误码定义与示例EZ0031 在 CANN 算子开发中最常见的触发场景包括AIPP 配置文件.cfg缺失必备配置项——即本文示例场景如缺少aipp_mode算子自定义 JSON 配置文件格式非法——如 tiling、shape 推导等自定义配置文件语法错误tiling/编译参数文件内容不完整——文件被截断或编码异常导致解析器中途失败第三方或工具生成的配置文件版本不兼容——配置项命名与当前解析器版本要求的规格不一致。总结EZ0031File_Operation_Error_Parse是 CANN 算子库 Operator Errors 体系中用于标识文件内容解析失败的标准错误码报错文本Failed to parse file %s. Reason: %s.中的文件路径与原因字段提供了定位问题的全部关键信息。在算子源码中它由OP_LOGE_FOR_FILE_PARSE日志宏统一触发同时完成 ERROR 级日志输出与 EZ0031 错误码上报在排查时应先区分它与 EZ0029/EZ0030/EZ0032 以及 Nnopbase 侧 EZ1004/EZ1005 的边界再根据原因字段对照用户指南修正配置文件即可完成问题收敛。相关实现细节可进一步阅读 include/op_common/log/log.h、src/op_common/log/log.cpp 与 OP_LOGE_FOR_FILE_PARSE 接口文档。【免费下载链接】opbase本项目是CANN算子库的基础框架库为算子提供公共依赖文件和基础调度能力。项目地址: https://gitcode.com/cann/opbase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表