news 2026/9/20 2:09:44

CANN Runtime 错误码 EH0005 Invalid_Argument 详解:AIPP 参数非法排查与修复指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN Runtime 错误码 EH0005 Invalid_Argument 详解:AIPP 参数非法排查与修复指南
  • CANN
  • Ascend
  • 人工智能
  • 任务调度

【免费下载链接】runtime

本项目提供CANN运行时组件和维测功能组件。

项目地址:https://gitcode.com/cann/runtime
点击查看免费下载

EH0005 是 CANN Runtime 中 ACL(AscendCL)对外 API 层的"输入参数非法(Invalid Argument)"专用错误码之一,用于上报AIPP(AI 图像预处理)相关参数不合法的场景。本文以 EH0005-Invalid_Argument.md 为基础,结合 error_code.json、log_inner.h 等仓库源码,系统讲解 EH0005 的报错格式、占位符语义、典型示例解读、错误码在源码中的注册现状,以及与 AIPP 相关的关联错误码与排查思路。读完本文,你将能够准确读懂 EH0005 报错信息、定位 AIPP 参数越界问题,并在开发中正确使用与区分 AIPP 系列错误码。

错误码速览

项目内容
错误码EH0005
错误分类(errTitle)Invalid_Argument(输入参数非法)
错误类(errClass)ACL Errors(ACL 对外 API 层)
模板消息AIPP argument %s is invalid. Reason: %s.
占位符 Arglistparam, reason
适用场景AIPP 参数非法

该定义可以在仓库的错误码注册表 src/dfx/error_manager/error_code.json 中直接查到(EH0005 条目位于 errClass 为ACL Errors、errTitle 为Invalid_Argument的段落),同时以宏常量形式定义于 src/acl/common/log_inner.h:

constexpr const char_t* const INVALID_AIPP_MSG = "EH0005";

EH0005 属于EH 系列错误码。根据仓库错误码使用规范(error-code-guide.md),CANN Runtime 有两层错误码:EE 系列对应 Runtime 核心层(src/runtime/),EH 系列对应 ACL 对外 API 层(src/acl/)。EH0005 即归属于 ACL 层、专为 AIPP 参数校验而预留。

报错格式与占位符语义

EH0005 的报错格式如下:

AIPP argument %s is invalid. Reason: %s.

消息中包含两个占位符,含义依次为:

占位符语义示例取值
第一个%s非法的参数名(param)batch_index
第二个%s参数非法的原因(reason)batch_index 3 is greater than or equal to batch_number 2

从 error_code.json 中的Arglist: "param,reason"可以确认,该错误码在调用AclErrorLogManager::ReportInputError上报时,需要依次传入参数名与报错原因两个字符串。这种"参数名 + 具体原因"的设计让报错信息自解释,无需额外查阅即可定位到具体是哪个 AIPP 参数、以什么方式非法。

报错示例解读

官方文档给出的示例如下:

AIPP argument batch_index is invalid. Reason: batch_index 3 is greater than or equal to batch_number 2.

对照占位符语义,可以拆解出以下信息:

  • 参数名batch_index(AIPP 的 batch 索引)
  • 非法原因batch_index 3 is greater than or equal to batch_number 2,即传入的 batch 索引值3大于等于配置的 batch 数量2

AIPP(AI Preprocessing)是模型推理前对输入图像进行裁剪、缩放、归一化等预处理的机制,其配置支持 batch 维度。batch_indexbatch_number共同描述 AIPP 处理任务所在的 batch 位置:batch_index表示当前请求希望使用的 batch 序号,batch_number表示 AIPP 配置中声明的 batch 总数。当batch_index不小于batch_number时,索引越界,即触发本示例所示的校验失败。

错误码在仓库中的注册与使用现状

从源码证据来看,EH0005 在仓库中存在"三处定义、一处使用约束"的格局:

  1. 错误码注册表:src/dfx/error_manager/error_code.json 中完整登记了EH0005的 errClass、errTitle、ErrCode、ErrMessage 与 Arglist,属于正式的对外错误码。
  2. ACL 日志头文件:src/acl/common/log_inner.h 中定义了INVALID_AIPP_MSG = "EH0005"宏常量,供 ACL 层代码通过AclErrorLogManager::ReportInputError上报错误时引用。
  3. Compact 运行时错误表:src/runtime_compact/c_base/src/error_manager.c 中 EH0005 条目以注释形式存在,注释标注了// AIPP,说明在 Compact 运行时的主线错误表中该码处于预留/停用状态。

特别需要注意的是:根据仓库的错误码使用规范文档 error-code-guide.md,EH0005 被标记为🔸(已定义但源码中无实际使用),属于"AIPP 专用码,预留未使用"。也就是说:

  • 该错误码的格式、语义、注册信息均已就绪;
  • 但当前开源仓库主线的 ACL 代码中尚没有调用点实际触发 EH0005;
  • 它是为 AIPP 参数校验预留的专用通道,开发者不应在非 AIPP 场景下复用该码。

这一点与 EH 系列中 EH0001(兜底码)、EH0002(空指针码)等"⛔ 不应增量调用"的约束不同,EH0005 是"场景专用、预留待用"。

与 AIPP 相关的关联错误码

排查 AIPP 相关问题时,EH0005 只是错误码体系中的一环。仓库还提供了多个与 AIPP 配置直接相关的 ACL 返回码(定义于 include/external/acl/error_codes 及 25-01_aclError.md),可对照使用:

返回码数值含义建议
ACL_ERROR_NOT_STATIC_AIPP100038静态 AIPP 配置信息不存在该码在 CANN 8.5.0 起标记为废弃,预计在 2026 年 12 月 30 日之后版本删除,请改用ACL_ERROR_GE_AIPP_NOT_EXIST;调用aclmdlGetFirstAippInfo接口时传入正确的 index 值
ACL_ERROR_GE_AIPP_BATCH_EMPTY145014无效的 AIPP batch size检查 AIPP batch size 配置
ACL_ERROR_GE_AIPP_NOT_EXIST145015AIPP 配置不存在检查模型转换时是否配置了 AIPP
ACL_ERROR_GE_AIPP_MODE_INVALID145016无效的 AIPP 模式检查模型转换时配置的 AIPP 模式是否正确

可见,AIPP 类错误大致分为三类:参数类(EH0005 所代表的 AIPP 参数非法)、配置缺失类ACL_ERROR_GE_AIPP_NOT_EXISTACL_ERROR_NOT_STATIC_AIPP)、模式/批大小类ACL_ERROR_GE_AIPP_MODE_INVALIDACL_ERROR_GE_AIPP_BATCH_EMPTY)。EH0005 聚焦于"参数值本身非法",而其余码覆盖配置存在性与合法性,二者互补。

解决方法与排查步骤

官方文档给出的解决思路为:根据报错提示调整参数值。结合 EH0005 的消息结构,推荐的排查流程如下:

  1. 解析报错消息:从AIPP argument <param> is invalid. Reason: <reason>.中提取param(参数名)与reason(原因)。EH0005 的消息模板天然自描述,无需额外日志即可定位。
  2. 核对参数取值范围:将非法参数值与配置中的合法范围比对。例如示例中的batch_index应满足0 <= batch_index < batch_number,即传入的索引必须在[0, batch_number)区间内。
  3. 检查调用链:确认 AIPP 参数在模型转换(ATC)阶段与推理运行阶段的配置是否一致,避免"转换时声明 batch 数、运行时传入更大索引"导致的越界。
  4. 对照关联返回码:若报错属于"配置不存在"或"模式非法",应优先检查ACL_ERROR_GE_AIPP_NOT_EXIST(145015)与ACL_ERROR_GE_AIPP_MODE_INVALID(145016)对应的建议动作,即回查模型转换时的 AIPP 配置。
  5. 涉及静态 AIPP 时注意废弃码:若使用ACL_ERROR_NOT_STATIC_AIPP(100038),请注意该码已废弃,应及时迁移到ACL_ERROR_GE_AIPP_NOT_EXIST

开发者注意事项

  • 不要在非 AIPP 场景使用 EH0005:它是 AIPP 专用预留码,泛化的"参数非法"场景应优先使用 EH 系列决策树中标记 ⭐ 的码,例如能给出期望值时用EH0007、能给出非法值与原因时用EH0009、空指针用EH0008、无法给出具体值时用EH0012(详见 error-code-guide.md 的 EH 层选择决策树)。
  • 消息保持自解释:若在自研代码中启用 EH0005,上报时reason应写明"参数当前值 + 合法范围 + 期望值",例如batch_index 3 is greater than or equal to batch_number 2这种可直接指导修改的表述。
  • 以官方注册表为准:错误码的权威定义始终以 src/dfx/error_manager/error_code.json 为准,开发前可先对照该文件确认 ErrCode、ErrMessage 与 Arglist 是否发生变化。

参考资料

  • 错误码官方文档:EH0005-Invalid_Argument.md、ACL-Errors 目录索引
  • 错误码注册表:src/dfx/error_manager/error_code.json
  • ACL 错误码宏定义:src/acl/common/log_inner.h
  • Compact 运行时错误表:src/runtime_compact/c_base/src/error_manager.c
  • 错误码使用规范:error-code-guide.md
  • ACL 返回码枚举:25-01_aclError.md
  • CANN
  • Ascend
  • 人工智能
  • 任务调度

【免费下载链接】runtime

本项目提供CANN运行时组件和维测功能组件。

项目地址:https://gitcode.com/cann/runtime
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/20 2:08:15

401 invalid_api_key?TaoToken + Roo Code 这样核对该模型 ID

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

作者头像 李华
网站建设 2026/9/20 2:06:01

VMware Workstation 17安装Windows10虚拟机全流程与避坑指南

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

作者头像 李华
网站建设 2026/9/20 2:01:10

VS Code 中 opencode AI 代理插件安装配置与使用指南

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

作者头像 李华
网站建设 2026/9/20 2:01:08

安防监控技术标书实战指南:参数计算、协议实现与等保设计

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

作者头像 李华
网站建设 2026/9/20 2:01:05

LLVM 编译器框架实战:从环境搭建到自定义 Pass 开发

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

作者头像 李华
网站建设 2026/9/20 2:00:57

BrewUI:给Homebrew套上图形化外壳的包管理利器

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

作者头像 李华