尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
CANN opbase 错误码 EZ0021 深度解析:多参数张量数据类型校验失败(Invalid Argument Tensor Dtype)
CANN opbase 错误码 EZ0021 深度解析多参数张量数据类型校验失败Invalid Argument Tensor Dtype【免费下载链接】opbase本项目是CANN算子库的基础框架库为算子提供公共依赖文件和基础调度能力。项目地址: https://gitcode.com/cann/opbase本篇文章面向 CANN 算子库基础框架opbase的算子开发者与 aclnn 接口实现者围绕错误码EZ0021Invalid Argument Tensor Dtype展开。该错误码用于描述一个算子或接口的多个参数同时存在数据类型不匹配的场景是算子入参校验中最常见的失败类型之一。阅读本文后你将掌握 EZ0021 的错误格式与占位符语义、它对应的日志宏OP_LOGE_FOR_INVALID_DTYPES_WITH_REASON的调用方式以及从源码层面定位、复现与修复此类 dtype 校验失败的完整思路。EZ0021 是什么错误码定位与适用场景EZ0021 属于 opbase 错误码体系中的Operator Errors算子错误分类错误码全称为EZ0021 Invalid_Argument_Tensor_Dtype。在 错误码索引 中它与 EZ0001EZ0038 一起构成算子侧参数校验错误的完整集合。它的典型适用场景是算子的多个输入/输出 Tensor 之间的数据类型相互约束被违反。典型情况包括多个输入 Tensor 的数据类型应当保持一致如两个输入必须同为 FLOAT16多个输入 Tensor 的数据类型应当与某个期望类型集合匹配如要么全为 FLOAT32要么全为 FLOAT16成对出现的输入如位置编码算子中的 cos 与 sin 表数据类型不匹配。与单参数 dtype 错误EZ0019、EZ0020不同EZ0021 专门面向多个参数同时出错且需要附带具体失败原因的场景因此它的错误信息中同时携带参数名列表、实际数据类型列表和原因描述三段信息便于开发者一次性定位多个错误输入。错误信息格式与占位符语义EZ0021 的错误信息遵循如下固定模板定义见 log.cpp 错误注册表Parameters %s of %s have incorrect dtypes %s. Reason: %s.四个%s占位符按顺序依次表示占位符含义典型取值示例第 1 个 %s参数名称列表多个参数名用 and 连接cos and dy第 2 个 %s算子名称或 aclnn 接口名称RotaryPositionEmbeddingGrad第 3 个 %s实际传入的错误数据类型列表FLOAT16 and FLOAT32第 4 个 %s错误原因描述The dtypes of input cos and input dy should be the same.模板中的单数/复数使用是精确的因为本错误码面向多参数场景所以主语是复数Parameters、谓语是have数据类型同样以复数形式dtypes呈现。这条规则与同族错误码 EZ0019单参数、期望类型明确、EZ0020单参数、附带原因形成严格区分。官方错误示例EZ0021 文档 给出的真实示例来自旋转位置编码反向算子RotaryPositionEmbeddingGradParameters cos and dy of RotaryPositionEmbeddingGrad have incorrect dtypes FLOAT16 and FLOAT32. Reason: The dtypes of input cos and input dy should be the same.这条信息可以拆解为出错实体RotaryPositionEmbeddingGrad算子出错参数cos和dy两个输入 Tensor实际数据类型FLOAT16cos与FLOAT32dy不一致失败原因算子要求输入 cos 与输入 dy 的数据类型必须相同。值得注意的是RotaryPositionEmbeddingGrad在 opbase 错误码文档中是一个高频示例算子兄弟错误码 EZ0013 也以该算子的dy、cos、sin三个参数为例说明维度数必须同为 3D 或 4D。这从侧面印证了该算子存在一套完整的参数约束校验链先校验形状再校验数据类型任一环节失败都会抛出对应的 EZ 错误码。底层实现OP_LOGE_FOR_INVALID_DTYPES_WITH_REASON 日志宏EZ0021 错误码在源码中的生成入口是日志宏OP_LOGE_FOR_INVALID_DTYPES_WITH_REASON其完整定义位于 include/op_common/log/log.h#define OP_LOGE_FOR_INVALID_DTYPES_WITH_REASON(entityName, paramNames, incorrectDtypes, reason) \ do { \ std::string _safe_entityName_(entityName); \ std::string _safe_paramNames_(paramNames); \ std::string _safe_incorrectDtypes_(incorrectDtypes); \ std::string _safe_reason_(reason); \ OP_LOGE_LIBOPAPI_REPORT(_safe_entityName_.c_str(), \ Parameters %s of %s have incorrect dtypes %s. Reason: %s., \ _safe_paramNames_.c_str(), _safe_entityName_.c_str(), \ _safe_incorrectDtypes_.c_str(), _safe_reason_.c_str()); \ const std::vectorconst char* msgKey {param_names, op_name, incorrect_dtypes, reason}; \ const std::vectorconst char* msgvalue {_safe_paramNames_.c_str(), _safe_entityName_.c_str(), \ _safe_incorrectDtypes_.c_str(), _safe_reason_.c_str()}; \ REPORT_PREDEFINED_ERR_MSG(EZ0021, msgKey, msgvalue); \ } while (0)该宏接收四个参数宏参数类型支持说明entityNameconst char* / std::string算子名称或 aclnn 接口名称paramNamesconst char* / std::string参数名称列表字符串形式如cos and dyincorrectDtypesconst char* / std::string实际数据类型列表字符串形式如FLOAT16 and FLOAT32reasonconst char* / std::string错误原因描述从实现可以看出该宏的两个关键设计双重上报机制宏内部先用OP_LOGE_LIBOPAPI_REPORT输出一条带日志上下文的 ERROR 级别日志再用REPORT_PREDEFINED_ERR_MSG以结构化字段param_names、op_name、incorrect_dtypes、reason上报预定义错误码EZ0021。前者面向日志文件排查后者面向错误码框架与上层接口报错链路二者通过同一组_safe_*局部变量保持信息一致。空指针安全宏先把入参拷贝为std::string_safe_*前缀即暗示这一点避免调用方传入临时对象或空指针导致格式化崩溃同时保证msgKey/msgvalue中使用的c_str()指针在整个宏作用域内有效。日志上报链路从宏到日志系统OP_LOGE_LIBOPAPI_REPORT本身也是一个宏定义在 log.h其核心逻辑是#define OP_LOGE_LIBOPAPI_REPORT(opName, fmt, ...) \ do { \ if (CheckLogLevel(static_castint(OP_MODULE_ID), DLOG_ERROR) 1) { \ DlogRecord(static_castint(OP_MODULE_ID), DLOG_ERROR, \ [%s:%d][%s] [%s][% PRIu64 ] OpName:[%s] fmt, \ __FILE__, __LINE__, OP_SUBMOD_NAME, __FUNCTION__, Ops::Base::GetTid(), \ Ops::Base::GetSafeStr(Ops::Base::GetOpInfo(opName)), ##__VA_ARGS__); \ } \ } while (0)该链路中值得关注的工程细节日志模块 IDOP_MODULE_ID固定为 63算子侧日志均挂载在该模块下级别控制EZ0021 以DLOG_ERROR数值 3级别上报且上报前先调用CheckLogLevel做级别开关判断——当模块日志级别被调高关闭 ERROR时该条日志会被静默丢弃避免无谓开销上下文信息日志自动携带__FILE__、__LINE__、OP_SUBMOD_NAME默认OPS_BASE、函数名与线程 ID通过syscall(__NR_gettid)获取方便在多线程算子执行场景中定位问题线程空指针防护GetSafeStr与GetOpInfo会把nullptr归一化为nil保证无论传入算子名还是算子上下文对象GetNodeType/GetNodeName都能安全打印。错误码注册表EZ0021 的定义位置EZ0021 的元信息错误码、错误模板、参数列表、解决方案建议注册在 src/op_common/log/log.cpp 的内置错误表中{ errClass: Operator Errors, errTitle: Invalid_Argument_Tensor_Dtype, ErrCode: EZ0021, ErrMessage: Parameters %s of %s have incorrect dtypes %s. Reason: %s., Arglist: param_names, op_name, incorrect_dtypes, reason, suggestion: { Possible Cause: N/A, Solution: Check whether the dtypes of input/output tensors meet the condition. } }这份注册表把错误码 → 消息模板 → 结构化参数列表 → 解决建议四者绑定在一起Arglist中给出的四个字段正是上述宏中REPORT_PREDEFINED_ERR_MSG的msgKey。也就是说只要算子代码调用一次OP_LOGE_FOR_INVALID_DTYPES_WITH_REASON框架即可据此把日志消息与结构化字段自动关联成完整的 EZ0021 错误记录。同族错误码辨析EZ0019 / EZ0020 / EZ0021dtype 校验错误在 opbase 中共有三个相邻错误码选用哪个取决于参数数量与是否需要附加原因。三者定义与宏映射如下错误码适用场景消息模板对应日志宏EZ0019单参数 dtype 错误且能给出期望类型Parameter %s of %s has incorrect dtype %s. It should be %s.OP_LOGE_FOR_INVALID_DTYPE见 log.hEZ0020单参数 dtype 错误需要附加原因Parameter %s of %s has incorrect dtype %s. Reason: %s.OP_LOGE_FOR_INVALID_DTYPE_WITH_REASON见 log.hEZ0021多参数 dtype 错误需要附加原因Parameters %s of %s have incorrect dtypes %s. Reason: %s.OP_LOGE_FOR_INVALID_DTYPES_WITH_REASON选择建议只有一个参数类型错误、且约束是必须是某类型时优先用 EZ0019错误信息更直观单参数错误但失败原因需要解释如需与另一参数保持一致但另一参数本身合法时用 EZ0020多个参数同时不满足类型约束时必须使用 EZ0021——它把参数名与错误类型以列表形式一并呈现一条日志即可覆盖全部问题参数。错误信息中的单复数措辞Parameters/have/dtypes与上述宏一一对应这也是排查时判断错误码归属的一个快速线索。实战在算子实现中使用 EZ0021EZ0021 的实际调用方式可以参考 中文接口文档 中的调用示例。以下代码展示在RotaryPositionEmbeddingGrad反向实现中如何校验 cos 与 dy 的数据类型一致性并上报 EZ0021// 预期输出: Parameters cos and dy of RotaryPositionEmbeddingGrad have incorrect dtypes // FLOAT16 and FLOAT32. Reason: The dtypes of input cos and input dy should be the same. if (cosDtype ! dyDtype) { std::string dtypeMsg Ops::Base::ToString(cosDtype) and Ops::Base::ToString(dyDtype); OP_LOGE_FOR_INVALID_DTYPES_WITH_REASON(RotaryPositionEmbeddingGrad, cos and dy, dtypeMsg.c_str(), The dtypes of input cos and input dy should be the same.); return ge::GRAPH_FAILED; }调用要点拼接数据类型列表第三个参数incorrectDtypes是字符串需要用Ops::Base::ToString(dtype)把枚举类型的 dtype 转成FLOAT16这类可读名称后拼接多参数用 and 连接返回值约定上报错误后通常立即返回ge::GRAPH_FAILED结束算子校验阶段阻断后续计算日志宏的位置OP_LOGE_FOR_INVALID_DTYPES_WITH_REASON仅供算子实现或 aclnn 接口实现内部使用log.h 中明确注明以下接口仅供算子或 aclnn 实现使用普通用户代码不应直接调用头文件依赖使用该宏需包含 include/op_common/log/log.h并依赖其中#include base/err_msg.h提供的REPORT_PREDEFINED_ERR_MSG上报能力。排查与解决方案收到 EZ0021 后怎么办按照 EZ0021 文档 与错误注册表给出的建议收到该错误码后的排查步骤为定位出错实体与参数从错误信息的第 2、3 个字段确认是哪个算子/接口、哪些参数出错核对实际与期望类型比较第 3 个字段给出的实际 dtype 列表与算子约束如两输入须同 dtype之间的差异检查调用侧张量创建代码确认输入 Tensor 的创建/转换环节是否设置了正确的 dtype例如误将 CPU 侧默认的 FLOAT32 数据喂给了要求 FLOAT16 的输入必要时做显式转换若业务上允许可通过aclTensor的 dtype 转换或框架的 cast 能力将输入统一到期望类型结合日志上下文深挖在日志中搜索OpName:[RotaryPositionEmbeddingGrad]定位具体代码行日志带__FILE__:__LINE__确认校验分支是否命中了正确的错误上报路径。需要说明的是EZ0021 描述的是参数校验失败而不是计算执行失败因此它的出现几乎总是意味着调用方传入的 Tensor 数据类型与算子定义不符。修复应优先发生在调用侧或算子侧的前置转换逻辑而非执行侧。延伸阅读错误码官方英文说明EZ0021-Invalid_Argument_Tensor_Dtype中文版见 docs/zh/error_code/Operator-Errors/EZ0021-Invalid_Argument_Tensor_Dtype.mdOperator Errors 全量索引Operator-Errors.md日志宏接口文档OP_LOGE_FOR_INVALID_DTYPES_WITH_REASON、日志接口总览、op_common API 介绍宏定义与日志上报实现include/op_common/log/log.h、src/op_common/log/log.cpp同族错误码对比EZ0019/EZ0020 单参数 dtype 错误EZ0013 多参数 shape 维度错误同为多参数 reason 模式可参考其排查思路【免费下载链接】opbase本项目是CANN算子库的基础框架库为算子提供公共依赖文件和基础调度能力。项目地址: https://gitcode.com/cann/opbase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

论文降AI率工具测评与实操指南

论文降AI率工具测评与实操指南

1. 论文降AI率工具测评背景与核心痛点最近两年,学术圈对AI生成内容的检测越来越严格。去年我带的几个研究生就遇到了这样的问题:明明是自己熬夜写的论文,查重率明明只有10%,但AI检测率却高达40%,直接被导师打回来要求重…

📅 2026/9/19 9:38:20
PHP+ThinkPHP构建冷水壶商城系统实战

PHP+ThinkPHP构建冷水壶商城系统实战

1. 项目概述:基于PHPThinkPHP的冷水壶商城系统设计与实现去年接手了一个校园创业团队的项目需求,要开发一款专营冷水壶的微信小程序商城。作为技术负责人,我选择了PHPThinkPHP的技术栈进行后端开发,配合MySQL数据库和微信小程序前…

📅 2026/9/19 9:38:20
大型零件三维扫描检测实战:摄影测量与精度控制全流程解析

大型零件三维扫描检测实战:摄影测量与精度控制全流程解析

做大型零件三维扫描检测这行久了,见过不少客户拿着图纸急吼吼找上门,开口就问“能不能扫,精度多少,几天能出报告”。说实话,小型零件你闭着眼睛都能扫,但一旦遇上两三米以上的铸件、焊接结构件、风电叶片或…

📅 2026/9/19 9:38:20
MORE NEWS

更多资讯

📰

SPSS相关与回归分析实战:从课件到落地,含语法与诊断

简介:这份SPSS相关分析与回归分析PPT课件面向统计学、数据分析初学者及需要完成课程作业或论文实证分析的高校学生与职场人士,帮助系统掌握变量间关系的测度与建模方法。课件围绕相关分析与回归分析两大主线展开,涵盖函数关系与统计关系的区分…

📰

YOLO26值不值得换?五代YOLO模型横评与选型指南

"YOLO26值不值得换?"这个问题最近一个月我被问了不下十次,算法群、私信、甚至公司内部周会都有人当场抛出来。每次讨论到最后,都会演变成"新版精度高就换,旧版够用就不换"的二元对立,但真正做过项…

📰

2026 Agent 产业全景图谱:五层架构与40+概念避坑指南

这两年只要打开技术社区,满屏都是 Agent、智能体、多 Agent 协作这些词。但真到要上手做项目、选架构方案的时候,很多人其实是被概念先绕晕了。我梳理了一份面向 2026 年的 Agent 产业与技术全景图谱,按“五层架构”这条主线,把从…

📰

ArkClaw托管平台:AI Agent从环境配置到稳定运行

1. 从"全员养虾"说起:ArkClaw到底是个什么东西字节跳动在火山引擎上悄悄上线了一个叫ArkClaw的东西,圈子里管它叫"养虾"。这个叫法挺有意思,Claw是钳子的意思,Ark是方舟,合起来就是"方舟上的…

📰

Wireshark发送方向数据包长度统计:从包长分布到性能排查实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

SPSS多元线性回归全流程:从数据准备到结果解读与避坑指南

简介:这份PDF面向备考统计类考试、需要掌握多元线性回归实操的读者,以雇员薪资数据为案例,完整呈现SPSS软件的操作截图流程。资源包共1个PDF文件,大小约7.91MB,内容涵盖数据输入、变量设置、模型建立、回归分析与结果解…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬