深度解读:含义、触发场景与定位指南)
CANN Runtime 错误码 EE1011Invalid_Argument深度解读含义、触发场景与定位指南【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtimeEE1011 是 CANN RuntimeRTS 模块中用于报告参数取值非法Invalid_Argument的核心错误码出现在rtStreamSwitchN、rtStreamSwitchEx、rtStreamActive、设备/内存/SoC 版本查询等大量 Runtime 接口的参数校验路径上。本文基于开源仓库的官方错误码文档与源码实现逐字段拆解 EE1011 的报错格式还原典型报错如stm-modelNum非法背后的真实代码逻辑并给出检查参数范围 检查调用关系两条可落地的排查方法论帮助开发者快速定位并修复此类问题。一、错误码概览EE1011 是什么EE1011 属于 RTS-Errors 错误码系列EE10xx段错误码全称为Invalid_Argument语义是接口调用时传入的某个参数值非法。它与其他同类错误码EE1001、EE1003、EE1012、EE1017、EE1022 等共同构成 Runtime 层对入参校验失败这一类问题的错误上报体系。从源码看EE1011 的正式定义位于 src/runtime/core/inc/common/error_code_meta.h 的 X-Macro 错误码元数据表中/* EE1011 - Invalid_Argument */ X(EE1011, EE1011, (func, value, param, reason), %s failed. Value %s for parameter %s is invalid. Reason: %s. ErrorCodeEE1011.\n, DLOG_ERROR)这里给出了该错误码的四个参数与完整消息模板参数名含义对应报错字段func报错阶段调用的接口或执行的操作%s failed中的第一个%svalue非法的参数值Value %sparam非法的参数名parameter %sreason报错原因补充说明为何非法Reason: %s同时该表还声明了错误日志级别为DLOG_ERROR即 EE1011 属于 Error 级错误会写入 Runtime 的 plog 日志。这也是 如何获取和解读 Runtime 异步错误码 中排查问题时的关键日志线索。二、错误信息格式逐字段拆解占位符官方错误码文档 EE1011-Invalid_Argument.md 给出的报错格式为%s failed. Value %s for parameter %s is invalid. Reason: %s.其中四个%s占位符的含义依次为报错阶段通常是被调用的接口名如rtStreamSwitchN或内部操作描述参数值实际传入的非法数值打印为十进制字符串参数名触发校验失败的参数标识如stm-modelNum、logicId、geModelIdx报错原因对为什么非法的补充说明例如流未绑定模型。需要特别说明的是完整的运行时日志还会在末尾追加ErrorCodeEE1011后缀这是error_code_meta.h中消息模板自带的部分便于日志检索与自动化归因。三、典型报错示例StreamSwitchN 与模型流绑定文档中给出的报错示例如下StreamSwitchN failed. Value 0 for parameter stm-modelNum is invalid. Reason: The stream is not bound to a model.逐字段解读报错阶段StreamSwitchN即rtStreamSwitchN流条件切换接口参数值0参数名stm-modelNum目标流的模型编号成员报错原因The stream is not bound to a model该流未绑定模型。该报错对应的真实代码逻辑位于 src/runtime/api/impl/api_impl.cc 的ApiImpl::StreamSwitchN实现中for (uint32_t i 0U; i elementSize; i) { NULL_PTR_RETURN_MSG_OUTER_WITH_FUNC_DESC( trueStreamPtr[i], RT_ERROR_STREAM_NULL, Switching between multi-dimensional streams based on conditional operators); COND_RETURN_AND_MSG_OUTER( !trueStreamPtr[i]-IsModelStream(), RT_ERROR_STREAM_MODEL, ErrorCode::EE1011, Switching between multi-dimensional streams based on conditional operators, 0, trueStreamPtr[ std::to_string(i) ]-modelNum, RtFmtMsg(The stream (stream_id%d) is not bound to a model, trueStreamPtr[i]-Id_())); } COND_RETURN_AND_MSG_INVALID_CONTEXT_STREAM_WITH_FUNC_DESC( stm, curCtx, RT_ERROR_STREAM_CONTEXT, Switching between multi-dimensional streams based on conditional operators); COND_RETURN_AND_MSG_OUTER( !stm-IsModelStream(), RT_ERROR_STREAM_MODEL, ErrorCode::EE1011, Switching between multi-dimensional streams based on conditional operators, 0, stm-modelNum, RtFmtMsg(The stream (stream_id%d) is not bound to a model, stm-Id_()));可以清晰看到 EE1011 的产生路径当条件流切换接口被调用时Runtime 会逐一校验trueStreamPtr[]中每个流以及目标流stm是否为模型流IsModelStream()。只要某个流尚未与模型绑定modelNum为 0就会以RT_ERROR_STREAM_MODEL为内部错误码、以 EE1011 为对外错误码上报。同样的校验逻辑也出现在流激活接口ApiImpl::StreamActiveapi_impl.cc和条件流切换接口ApiImpl::StreamSwitchExapi_impl.cc中它们的报错字段分别指向stm-modelNum与activeStream-modelNum报错原因一致。这说明流必须先绑定模型才能参与条件切换/激活是 Runtime 层的通用约束。四、触发场景EE1011 在哪些接口中会出现通过检索源码EE1011 被广泛用于多个 Runtime 接口的入参校验主要可分为以下几类场景1. 流管理类接口模型流绑定校验rtStreamSwitchEx/rtStreamSwitchN/rtStreamActive见上文 api_impl.cc校验modelNum是否为 0。2. 流管理类接口参数规模与越界校验rtStreamSwitchN的对外入口 api_c_stream.cc 中除了空指针与零值校验外还专门用 EE1011 报告elementSize溢出COND_RETURN_EXT_ERRCODE_AND_MSG_OUTER( ((INVALID_UINT32 / size) elementSize), RT_ERROR_INVALID_VALUE, ErrorCode::EE1011, __func__, std::to_string(elementSize), elementSize, elementSize should be less than INVALID_UINT32 / size to avoid total data size overflow);3. 设备管理类接口api_c_device.cc校验geModelIdxGE 模型索引取值非法。4. 内存管理类接口api_c_memory.cc校验logicId逻辑设备 ID取值非法包括0与非法非零值的两种分支。5. SoC 版本与平台查询类接口api_c_soc.cc上报输入 SoC 版本不受支持The input SoC version is not supported参数名为verapi_c_standard_soc.cc校验流优先级priority非法。6. 算子加载与参数解析类接口api_error.cc校验blockDimblock 维度在 SIMT 参数场景下为 0 的非法情况。可以看到EE1011 覆盖了数值越界、非法取值、受支持范围不符、对象状态不满足前提等多类参数非法问题凡接口文档中标注了参数取值范围或前提条件的地方都可能触发该错误码。五、解决方法从两条主线入手官方文档给出的解决方法高度凝练为两条这里结合源码展开为可执行的排查步骤。1. 检查接口的输入参数范围EE1011 的报错信息中已经精确指出了参数名与非法参数值因此第一步是定位到具体参数并核对取值范围从报错中提取parameter %s与Value %s例如stm-modelNum值为0、logicId值非法、priority值非法对照接口头文件确认取值要求Runtime 对外接口声明位于 include/external/acl 目录如acl_rt.h、acl_base_rt.h各接口的入参约束以头文件注释与 API 参考文档流管理见 06_stream_management.md为准检查数值是否溢出如elementSize过大导致size * elementSize溢出对应 api_c_stream.cc 的INVALID_UINT32 / size保护检查对象是否为空指针EE1011 通常与空指针校验对应 EE1004配合使用若报错前还有NULL提示需先处理指针生命周期问题。2. 检查接口的调用关系EE1011 的报错原因Reason字段往往会透出调用前提不满足例如示例中的The stream is not bound to a model。这类问题的根因不在参数值本身而在于调用顺序或对象状态确认对象是否完成前置初始化例如参与条件切换rtStreamSwitchN/rtStreamSwitchEx与流激活rtStreamActive的流必须先与模型绑定使IsModelStream()返回真梳理接口调用时序对照接口文档中前置条件章节确认诸如aclrtSetDevice→ 建流 → 模型绑定 → 条件切换的执行顺序确认上下文归属Runtime 接口通常要求流、事件、模型等对象归属当前上下文对应 EE1010、EE1018 等相邻错误码的排查逻辑上下文不匹配可能被归因为参数非法。3. 结合日志与错误码体系进一步定位EE1011 以DLOG_ERROR级别写入日志可依据 设置日志级别 与 查看日志 的方法定位到具体报错点异步执行场景下错误码通过 错误上报相关 API 在流/回调中传递可参考 如何获取和解读 Runtime 异步错误码 建立完整的错误归因链路若日志中出现ErrorCodeEE1011后缀说明错误已由 Runtime 错误码表统一格式化输出直接以该字符串检索日志即可。六、与相邻错误码的区分EE1011 属于 RTS-Errors 系列中参数校验一族实际排查中容易与以下错误码混淆可通过报错信息形态快速区分错误码名称报错特征典型场景EE1001Invalid_Argument仅携带扩展信息Reason通用参数非法无参数名/参数值字段EE1003Invalid_Argument含Expected value给出期望值参数值越界且文档明确期望范围EE1004Invalid_Argument_Null_Pointercannot be a NULL pointer空指针入参EE1011Invalid_Argument含Value、parameter、Reason三个字段参数值非法且附带具体原因EE1012Invalid_Argument消息模板为for %s is invalid无parameter字样同族变体EE1017Invalid_Argument消息模板为Parameter %s is invalid无Value字段参数非法但未打印值EE1018Invalid_Argument_API_Call_Sequence报错含API call sequence相关原因接口调用顺序错误各错误码的完整模板均可从 error_code_meta.h 的错误码表中查阅整个系列的全量索引见 RTS-Errors.md。定位时建议先按报错信息是否包含Value/parameter/Reason三段式来判断是否命中 EE1011再按本文第五节的方法排查。七、小结EE1011 是 CANN Runtime 上报参数值非法的标准错误码其三段式报错信息值、参数名、原因本身就提供了相当精确的定位线索。面对该错误码时遵循先核对参数取值范围、再核对接口调用关系与对象状态的两步排查法并善用日志与错误码家族对照表绝大多数参数非法问题都能快速收敛尤其对条件流切换、流激活这类依赖模型流绑定状态的接口务必确认流对象已先完成模型绑定再参与后续操作。【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考