- CANN
- Ascend
- 人工智能
- 任务调度
【免费下载链接】runtime
本项目提供CANN运行时组件和维测功能组件。
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. |
| 占位符 Arglist | param, 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_index与batch_number共同描述 AIPP 处理任务所在的 batch 位置:batch_index表示当前请求希望使用的 batch 序号,batch_number表示 AIPP 配置中声明的 batch 总数。当batch_index不小于batch_number时,索引越界,即触发本示例所示的校验失败。
错误码在仓库中的注册与使用现状
从源码证据来看,EH0005 在仓库中存在"三处定义、一处使用约束"的格局:
- 错误码注册表:src/dfx/error_manager/error_code.json 中完整登记了
EH0005的 errClass、errTitle、ErrCode、ErrMessage 与 Arglist,属于正式的对外错误码。 - ACL 日志头文件:src/acl/common/log_inner.h 中定义了
INVALID_AIPP_MSG = "EH0005"宏常量,供 ACL 层代码通过AclErrorLogManager::ReportInputError上报错误时引用。 - 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_AIPP | 100038 | 静态 AIPP 配置信息不存在 | 该码在 CANN 8.5.0 起标记为废弃,预计在 2026 年 12 月 30 日之后版本删除,请改用ACL_ERROR_GE_AIPP_NOT_EXIST;调用aclmdlGetFirstAippInfo接口时传入正确的 index 值 |
ACL_ERROR_GE_AIPP_BATCH_EMPTY | 145014 | 无效的 AIPP batch size | 检查 AIPP batch size 配置 |
ACL_ERROR_GE_AIPP_NOT_EXIST | 145015 | AIPP 配置不存在 | 检查模型转换时是否配置了 AIPP |
ACL_ERROR_GE_AIPP_MODE_INVALID | 145016 | 无效的 AIPP 模式 | 检查模型转换时配置的 AIPP 模式是否正确 |
可见,AIPP 类错误大致分为三类:参数类(EH0005 所代表的 AIPP 参数非法)、配置缺失类(ACL_ERROR_GE_AIPP_NOT_EXIST、ACL_ERROR_NOT_STATIC_AIPP)、模式/批大小类(ACL_ERROR_GE_AIPP_MODE_INVALID、ACL_ERROR_GE_AIPP_BATCH_EMPTY)。EH0005 聚焦于"参数值本身非法",而其余码覆盖配置存在性与合法性,二者互补。
解决方法与排查步骤
官方文档给出的解决思路为:根据报错提示调整参数值。结合 EH0005 的消息结构,推荐的排查流程如下:
- 解析报错消息:从
AIPP argument <param> is invalid. Reason: <reason>.中提取param(参数名)与reason(原因)。EH0005 的消息模板天然自描述,无需额外日志即可定位。 - 核对参数取值范围:将非法参数值与配置中的合法范围比对。例如示例中的
batch_index应满足0 <= batch_index < batch_number,即传入的索引必须在[0, batch_number)区间内。 - 检查调用链:确认 AIPP 参数在模型转换(ATC)阶段与推理运行阶段的配置是否一致,避免"转换时声明 batch 数、运行时传入更大索引"导致的越界。
- 对照关联返回码:若报错属于"配置不存在"或"模式非法",应优先检查
ACL_ERROR_GE_AIPP_NOT_EXIST(145015)与ACL_ERROR_GE_AIPP_MODE_INVALID(145016)对应的建议动作,即回查模型转换时的 AIPP 配置。 - 涉及静态 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运行时组件和维测功能组件。
相关推荐
CANN Runtime 错误码 EP0006 排查指南:Invalid_Argument 参数非法错误详解
CANN Runtime 错误码 EP0006 排查指南:Invalid_Argument 参数非法错误详解 EP0006 是 CANN 运行时数据落盘(Dum
CANNAscend人工智能任务调度CANN Runtime 错误码 EE1022 详解:Invalid_Argument 参数非法排查指南
CANN Runtime 错误码 EE1022 详解:Invalid_Argument 参数非法排查指南 本篇技术指南面向使用 CANN Runtime(本仓库
CANNAscend人工智能任务调度CANN Runtime Profiling 错误码 EK0001 Invalid_Argument 排查指南:参数校验机制与修复方法
CANN Runtime Profiling 错误码 EK0001 Invalid_Argument 排查指南:参数校验机制与修复方法 导读 本文围绕 CANN
CANNAscend人工智能任务调度
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考