资讯动态

CANN opbase 算子输入 Format 校验错误 EZ0006 Invalid_Input_Format 定位与排查指南

发布时间:2026/9/19 17:51:21 来源:尧图企业网站定制
CANN opbase 算子输入 Format 校验错误 EZ0006 Invalid_Input_Format 定位与排查指南【免费下载链接】opbase本项目是CANN算子库的基础框架库为算子提供公共依赖文件和基础调度能力。项目地址: https://gitcode.com/cann/opbaseEZ0006Invalid_Input_Format是 CANN opbase 算子库中Operator Errors错误类别下的预定义错误码之一用于标识算子某个输入参数的张量数据格式Format与算子预期不符。本文围绕 EZ0006 官方错误码文档展开结合仓库中的错误码注册表、日志上报宏与 API 文档源码讲解该错误的报错格式、占位符语义、触发机制、上报接口以及完整的排查与解决步骤帮助算子开发者在 host 侧校验和端到端运行中快速定位 Format 不匹配问题。一、EZ0006 错误码在 opbase 错误体系中的位置在 CANN opbase 中算子错误码统一归入 Operator Errors 类别索引清单见 Operator-Errors.md。该清单按 EZ0001EZ0038 顺序编排其中与输入参数校验相关的错误码形成一个完整家族EZ0004 Invalid_Input输入参数为空required but emptyEZ0005 Invalid_Input_ShapeSize输入张量的 shape 维度个数错误EZ0006 Invalid_Input_Format输入张量的Format数据格式错误EZ0007 Invalid_Input_Dtype输入张量的数据类型错误EZ0008EZ0016输入/输出张量 shape 及 shape 维度相关错误EZ0017/EZ0018/EZ0035参数 Format 校验错误的同族变体新接口对应错误码。EZ0006 专门面向张量数据布局格式这一类校验错误是 Format 校验场景下的核心错误码。二、错误信息格式与占位符语义根据 EZ0006 官方文档当算子输入参数格式校验失败时输出与上报的错误信息格式如下Input parameter %s of %s has incorrect format %s. It should be %s.其中 4 个占位符%s依次替换为下表字段占位符位置字段名含义示例1param_name发生格式错误的输入参数名x2op_name算子名称或 aclnn 接口名称BatchNorm3data_format实际传入的错误 Format 值NHWC4expected_format_list算子期望的 Format 值可为一个或多个NCHW上述字段名与仓库源码中该错误码的注册信息完全对应。在 src/op_common/log/log.cpp 的错误码注册表中EZ0006 定义如下{ errClass: Operator Errors, errTitle: Invalid_Input_Format, ErrCode: EZ0006, ErrMessage: Input parameter %s of %s has incorrect format %s. It should be %s., Arglist: param_name, op_name, data_format, expected_format_list, suggestion: { Possible Cause: N/A, Solution: N/A } }Arglist中的四个字段与文档占位符一一对应也是上报错误时携带的结构化键值。三、报错示例解读官方文档给出的典型报错示例如下Input parameter x of BatchNorm has incorrect format NHWC. It should be NCHW.逐段解读x是 BatchNorm 算子中发生校验失败的输入参数BatchNorm是触发错误的算子名NHWC是调用方实际传入的张量 FormatNCHW是 BatchNorm 算子声明支持的期望 Format。该示例说明调用方向算子传入了NHWC布局的张量而算子实现要求NCHW布局二者不一致导致 host 侧格式校验InferShape/校验逻辑直接失败。四、错误的底层上报机制EZ0006 的产生并非偶然而是通过 opbase 提供的日志上报宏主动触发的。在 include/op_common/log/log.h 中上报宏OP_LOGE_WITH_INVALID_INPUT_FORMAT的实现揭示了完整的调用链#define OP_LOGE_WITH_INVALID_INPUT_FORMAT(entityName, paramName, dataFormat, expectedFormatList) \ do { \ std::string _safe_entityName_(entityName); \ std::string _safe_paramName_(paramName); \ std::string _safe_dataFormat_(dataFormat); \ std::string _safe_expectedFormatList_(expectedFormatList); \ OP_LOGE_LIBOPAPI_REPORT(_safe_entityName_.c_str(), \ Input parameter %s of %s has incorrect format %s. It should be %s., \ _safe_paramName_.c_str(), _safe_entityName_.c_str(), _safe_dataFormat_.c_str(), \ _safe_expectedFormatList_.c_str()); \ const std::vectorconst char* msgKey {param_name, op_name, data_format, expected_format_list}; \ const std::vectorconst char* msgvalue {_safe_paramName_.c_str(), _safe_entityName_.c_str(), \ _safe_dataFormat_.c_str(), _safe_expectedFormatList_.c_str()}; \ REPORT_PREDEFINED_ERR_MSG(EZ0006, msgKey, msgvalue); \ } while (0)该宏的核心流程分为两步日志输出OP_LOGE_LIBOPAPI_REPORT以 ERROR 级别输出与 EZ0006 完全一致的日志文本Input parameter %s of %s has incorrect format %s. It should be %s.错误码上报REPORT_PREDEFINED_ERR_MSG(EZ0006, msgKey, msgvalue)将错误码 EZ0006 连同结构化字段param_name / op_name / data_format / expected_format_list上报给上层框架。同时在 include/op_common/log/error_code.h 中该错误对应的枚举值为INVALID_INPUT_FORMAT 70002供程序化判断与错误码转换使用。也就是说一个 Format 校验失败会同时留下人类可读的 ERROR 日志和机器可解析的错误码与键值对两条线索。五、上报接口的参数约定与调用示例OP_LOGE_WITH_INVALID_INPUT_FORMAT 接口文档给出了宏的完整参数约定参数名输入/输出说明entityName输入算子名称或 aclnn 接口名称支持const char*或std::string类型paramName输入输入参数名称支持const char*或std::string类型dataFormat输入实际数据格式如NHWC支持const char*或std::string类型expectedFormatList输入预期格式列表如NCHW, NCDHW支持const char*或std::string类型接口文档中的调用示例展示了典型用法以 ResizeBilinearV2 为例// 预期输出: Input parameter x of ResizeBilinearV2 has incorrect format ND. It should be NCHW or NHWC. if (format_ ! NCHW format_ ! NHWC) { OP_LOGE_WITH_INVALID_INPUT_FORMAT(ResizeBilinearV2, x, Ops::Base::ToString(format_).c_str(), NCHW or NHWC); return ge::GRAPH_FAILED; }该示例体现了一个通用编码范式先判断实际 Format 是否在算子支持的集合内不满足时调用宏上报 EZ0006 并返回失败状态。该接口在 op_common_api_introduction.md 中被登记为记录并上报算子输入格式校验错误上报 EZ0006 错误码是 Format 校验的标准上报入口。注意该宏已在较新版本中被标记为废弃官方建议使用OP_LOGE_FOR_INVALID_FORMAT替代。替代接口在 include/op_common/log/log.h 中定义上报的是同族错误码EZ0017消息为Parameter %s of %s has incorrect format %s. It should be %s.。此外还有带原因说明的变体OP_LOGE_FOR_INVALID_FORMAT_WITH_REASON单参数 Format 错误 原因说明上报EZ0035见 log.hOP_LOGE_FOR_INVALID_FORMATS_WITH_REASON多参数 Format 错误 原因说明上报EZ0018见 log.h。在新算子开发中应根据是否附带原因说明、是否涉及多个参数选择合适的宏使错误信息更加精确。六、解决方法与排查步骤官方文档给出的解决方法是按照报错提示修改参数值。结合上文对错误信息结构和上报机制的解析可将排查流程细化如下定位算子从报错信息第 2 个字段%sop_name确定是哪个算子或 aclnn 接口触发的校验失败并在对应算子的 host 侧实现InferShape、参数校验函数中找到 Format 校验代码定位参数从报错信息第 1 个字段param_name确定是哪个输入参数格式不合法对比实际值与期望值报错信息第 3 个字段是实际传入的 Format如NHWC第 4 个字段是算子期望的 Format如NCHW。两者即矛盾点所在修正调用侧将输入张量的 Format 改为期望值或调整算子的 Format 相关配置使其与算子支持范围一致。可通过上下文aclnn 接口、Tensor 的 Format 设置修改数据布局确认算子支持范围在算子的 API 文档docs/zh/api 下的 aclnn 与 opdev 文档中核对算子声明的 Format 支持集合确保调用侧传参落在声明范围内回归验证修改后重新执行算子确认 ERROR 日志不再出现、错误码不再上报。七、常见 Format 与同类错误码区分opbase 算子体系中常见的张量 Format 包括NCHW、NHWC、NDN-Dimensional 通用格式、NCDHW等不同算子对 Format 的支持范围差异较大如示例中 ResizeBilinearV2 支持NCHW/NHWCBatchNorm 要求NCHW。Format 相关工具与转换能力可参见 format_utils.h 及 format_utils.cpp。排查时还需注意与以下同族错误码的区分避免误判错误码场景错误信息关键词EZ0006输入参数 Format 错误旧接口Input parameter ... has incorrect formatEZ0017参数 Format 错误新接口单参数Parameter ... has incorrect formatEZ0035参数 Format 错误单参数带原因Parameter ... has incorrect format ... Reason:EZ0018多个参数 Format 错误带原因Parameters ... have incorrect formats ... Reason:EZ0007输入参数数据类型dtype错误Input parameter ... has incorrect dtype核心判别依据报错聚焦的是数据布局格式还是数据类型以及是否附带具体原因。Format 类错误统一围绕期望 Format 集合做文章解决方案就是让实际 Format 落入期望集合。八、总结EZ0006 Invalid_Input_Format 是 CANN opbase 面向算子输入张量 Format 校验的核心错误码其错误信息通过Input parameter %s of %s has incorrect format %s. It should be %s.完整携带了参数名—算子名—实际 Format—期望 Format四要素。开发者既可以直接依据报错提示修改调用侧参数值完成排障也可以通过 log.cpp 中的错误码注册表与 log.h 中的上报宏理解其底层触发机制并在新算子实现中选用更精确的替代接口EZ0017/EZ0018/EZ0035上报 Format 校验错误。【免费下载链接】opbase本项目是CANN算子库的基础框架库为算子提供公共依赖文件和基础调度能力。项目地址: https://gitcode.com/cann/opbase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

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

免费获取报价