十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

CANN Runtime 错误码 E40021 详解:算子编译失败(Compilation_Error)的报错格式与排查指引

CANN Runtime 错误码 E40021 详解:算子编译失败(Compilation_Error)的报错格式与排查指引 CANN Runtime 错误码 E40021 详解算子编译失败Compilation_Error的报错格式与排查指引【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime导读E40021 是 CANN Runtime 错误码体系中 TEFusion 错误族的一个编译类错误码errTitle 为 Compilation_Error当算子编译流程异常终止时由编译侧抛出。本文以 E40021-Compilation_Error.md 为主体结合仓库中的错误码注册表、相邻错误码文档与日志查看指南完整解析该错误码的消息格式、占位符含义、真实报错样例并给出从 Host 日志到 Python 堆栈的逐步排查方案帮助你快速定位算子编译失败的根本原因。一、错误码速览| 属性 | 值 | | -- | -- | | 错误码 | E40021 | | 错误码族 | TEFusion Errors | | 错误标题 | Compilation_Error | | 严重级别 | ErrorE | | 消息模板 |Failed to compile Op %s. oppath is %s and optype is %s.| | 占位符参数 | op_name算子名称、opp_path算子路径、op_type算子类型 | | 官方建议 | 查看 Host 日志获取详细信息然后检查报错日志所在位置的 Python 堆栈 |该错误码的定义同时存在于中英文文档与统一错误码注册表中英文文档docs/en/error_code_ref/TEfusion-Errors/E40021-Compilation_Error.md中文文档docs/zh/error_code_ref/TEfusion-Errors/E40021-Compilation_Error.md错误码注册表errClass 为TEFusion Errors、ErrCode 为E40021、Arglist 为op_name,opp_path,op_typesrc/dfx/error_manager/error_code.json#L366-L376在注册表中E40021 的suggestion字段记录为Possible Cause: N/A未给出固定的可能原因Solution: See the host log for details, and then check the Python stack where the error log is reported.。这意味着该错误的原因高度依赖具体编译场景必须借助运行时日志逐层回溯这正是本文排查章节的核心。二、错误信息格式解析E40021 的报错消息是固定模板其中包含 3 个%s占位符按出现顺序依次为Failed to compile Op %s. oppath is %s and optype is %s.各占位符含义如下| 占位符按顺序 | 字段名 | 含义 | | -- | -- | -- | | 第 1 个%s| op_name | 发生编译失败的算子名称 | | 第 2 个%s| opp_path | 算子软件包OPP的路径即算子定义与编译资源所在目录 | | 第 3 个%s| op_type | 算子类型 |解读该模板时需要注意算子名称与算子类型可能相同也可能不同。算子名称是当前编译实例中该算子的实例名算子类型则是其所属的算子类别一个类型下可以有多个同名/不同名的实例。oppath是全局路径而非相对路径其内容通常是 CANN 算子软件包的安装位置可用于核对当前进程实际加载的算子包版本与路径是否与预期一致。该模板在注册表中的 Arglist 顺序为op_name, opp_path, op_type与消息中三个占位符一一对应可作为解析日志的权威依据。三、真实报错示例拆解原文档给出的报错示例如下Failed to compile Op QuantBatchMatmulV3. oppath is /usr/local/Ascend/cann/opp and optype is QuantBatchMatmulV3.拆解这条报错op_name算子名称QuantBatchMatmulV3即正在进行编译的量化批量矩阵乘算子。oppath算子路径/usr/local/Ascend/cann/opp。从路径命名可以推断这是 CANN 安装目录下算子软件包OPP的默认位置报错时该算子的编译过程在此路径对应的算子包环境中进行。optype算子类型QuantBatchMatmulV3与算子名称一致说明该场景下算子实例名即类型名。值得说明的是同一个算子的编译失败在 CANN 错误码体系中可能以不同错误码呈现。例如 FE 错误族中的 E20001-Compilation_Error.md 会报出Operator QuantBatchMatmulV3 compilation failed. Optype is QuantBatchMatmulV3.的同类信息二者分别对应图编译FE阶段与 TE 融合编译阶段的失败遇到QuantBatchMatmulV3相关编译错误时可同时对照这两个错误码进行排查。四、错误产生的背景TEFusion 错误族与算子编译链路4.1 错误码族归属E40021 属于 TEFusion Errors 错误族。该错误族在错误码参考文档中与 RTS Errors、ACL Errors、Dump Errors、Profiling Errors、FE Errors 等并列汇总入口见 docs/zh/error_code_ref/README.md 与 docs/en/error_code_ref/TEfusion-Errors/TEFusion-Errors.md。从仓库文档目录可以确认TEFusion 错误族共包含 8 个 E 级错误码E40001、E40002、E40003、E40020、E40021、E40022、E40023、E40024和 3 个 W 级告警码W40010、W40011、W40012。E40021 处于该错误族的“算子编译失败”环节是其核心成员之一。4.2 从相邻错误码看编译链路虽然 E40021 本身没有给出固定的可能原因注册表中为 N/A但该错误族的相邻错误码报错内容可以帮助我们还原 E40021 所处的编译链路E40003-File_Operation_Error_Open.md 的报错示例为Failed to open the JSON file: /usr/local/Ascend/cann/ascend-toolkit/opp/built-in/op_impl/ai_core/tbe/kernel/config/fusion_ops.json。该路径中的tbe/kernel/config/fusion_ops.json表明编译链路涉及 TBETensor Boost Engine的算子实现与融合算子配置文件可以推断 TEFusion 错误族与 TBE 算子编译及融合配置读取环节密切相关。E40020-Environment_Error_Import_Python_Module_Failed.md 的报错示例为Failed to import Python module tbe.common. Reason: ModuleNotFoundError: No module named tbe.common说明该错误族的编译流程运行在 Python 侧依赖tbe等 Python 模块。E40002Environment_Error_Incorrect_Python_Version与 E40024Environment_Error_Call_Python_Function_Failed进一步说明Python 版本、Python 依赖库与 CANN 环境变量都会影响编译环节的成败。结合这些证据可以推断E40021 是 TBE/TE 融合编译链路上Python 侧执行算子编译失败时上报的顶层错误码真正的失败原因语法错误、算子实现异常、依赖缺失、参数非法、资源问题等被封装在后续的 Python 异常堆栈与 Host 日志细节中。这也是官方解决方案明确要求“先看 Host 日志、再看 Python 堆栈”的原因——报错模板本身只给出“编译失败”的事实原因必须向下游日志挖掘。五、核心排查步骤Step by Step官方解决方案为See the host log for details, and then check the Python stack where the error log is reported.展开后的完整排查流程如下步骤 1确认报错上下文先完整记录 E40021 报错消息本身重点关注三要素算子名称哪一个算子编译失败例如QuantBatchMatmulV3oppath当前使用的算子包路径是否为预期版本例如默认安装路径/usr/local/Ascend/cann/oppoptype算子类型便于在算子实现目录中定位对应实现。同时记录报错发生前的模型/脚本入口便于复现时缩小范围。步骤 2打开 Host 侧 plog 日志E40021 是编译侧Host 侧错误其详细信息记录在 Host 侧的应用类日志中。日志默认存储于$HOME/ascend/log目录目录结构如下摘自 docs/zh/log_ref/viewing_logs_ep.md$HOME/ascend/log/ ├── debug │ ├── device-0 │ │ └── device-pid_时间戳.log │ └── plog │ └── plog-pid_时间戳.log ├── run │ ├── device-0 │ │ └── device-pid_时间戳.log │ └── plog │ └── plog-pid_时间戳.log └── security ├── device-0 │ └── device-pid_时间戳.log └── plog └── plog-pid_时间戳.log其中与 E40021 排查直接相关的文件为| 日志文件 | 内容说明 | | -- | -- | |$HOME/ascend/log/debug/plog/plog-pid_*.log| Host 侧运行应用程序产生的调试日志涵盖 compiler 中各组件如 GE、FE、AI CPU、TBE、HCCL 等的日志E40021 对应的 TBE 编译细节就在这里 | |$HOME/ascend/log/run/plog/plog-pid_*.log| Host 侧运行日志 |pid为业务进程 ID*为日志文件创建时间戳请以实际文件为准。在日志中检索 E40021 报错消息或其片段Failed to compile Op即可定位到报错发生的确切日志行。步骤 3顺着报错点查看 Python 堆栈官方解决方案的关键一步是check the Python stack where the error log is reported即在报错日志出现的位置向后查看 Python 异常堆栈。由于编译环节运行在 Python 侧依赖tbe等模块真正的根因通常表现为堆栈顶部的异常类型与堆栈中涉及的编译函数例如Python 模块缺失对应 E40020 场景的ModuleNotFoundError算子实现代码异常自定义算子实现中的语法/逻辑错误算子参数非法或融合配置不合法编译资源不足或文件路径不可访问对应 E40003/E40023 场景。将 Python 堆栈与 E40021 报错行进行时间戳和线程对齐即可确认是哪一层编译调用抛出了 E40021。步骤 4根据堆栈结论处理根据堆栈分析结果采取对应动作若为自定义算子实现异常检查算子实现代码与入参修复后重新编译若为Python 模块缺失或版本不匹配参照 E40020 与 E40002 的解决方案核对 Python 路径与安装目录是否一致必要时重新运行安装包中的 set_env.sh若为算子包路径或配置文件异常核对 oppath 指向的算子包是否存在、权限是否可读并参照 E40003 检查fusion_ops.json等配置文件若为内置算子且无法定位按 E20001 的指引获取完整 Host 日志与运行环境信息后联系技术支持分析。步骤 5设置日志级别复现若默认日志级别下细节不足可在复现前提升日志采集粒度再重现一次编译失败以获得更完整的堆栈与中间日志通过环境变量 ASCEND_GLOBAL_LOG_LEVEL.md 调整全局日志级别例如设为 DEBUG 级别通过环境变量 ASCEND_PROCESS_LOG_PATH.md 自定义日志落盘路径便于集中收集与清理通过环境变量 ASCEND_HOST_LOG_FILE_NUM.md 控制日志文件数量避免多次复现导致日志被老化清理掉。日志进程或落盘异常时的额外排查可参考 docs/zh/log_ref/faq.md。六、与相近错误码的辨析E40021 容易与以下错误码混淆排查前请先确认报错码归属| 错误码 | 错误族 | 报错重点 | 与 E40021 的区别 | | -- | -- | -- | -- | | E40021 | TEFusion Errors |Failed to compile Op %s. oppath is %s and optype is %s.| 算子编译失败关注 Host 日志与 Python 堆栈 | | E20001 | FE Errors |Operator %s compilation failed. Optype is %s.| 图编译前端阶段的算子编译失败示例算子同为 QuantBatchMatmulV3可交叉对照 | | E40020 | TEFusion Errors |Failed to import Python module %s. Reason: %s.| Python 模块导入失败属于 E40021 的常见底层诱因之一 | | E40003 | TEFusion Errors |Failed to open the JSON file: %s.| 编译配置 JSON 文件打开失败路径中可见tbe/kernel/config/fusion_ops.json| | E40024 | TEFusion Errors |Failed to call Python Method %s. Reason: %s.| Python 编译方法调用失败可能原因包括方法不存在、依赖库缺失、CANN 环境变量错误 |此外TEFusion 错误族中 W 级告警W40010 环境变量配置、W40011 目录创建失败、W40012 参数非法多为可恢复的弱提示而 E40021 属于 E 级错误一旦出现即表示编译流程中断需要按本文流程处理。七、预防与最佳实践保持环境一致性编译前确认 Python 版本、tbe等 Python 模块、CANN 环境变量与当前安装的 CANN 版本匹配可显著降低编译类错误概率。核对算子包路径定期确认oppath如/usr/local/Ascend/cann/opp指向的算子包完整、权限正确避免因算子包缺失或损坏引发 E40021。自定义算子先行自测开发自定义算子时先在最小用例下单独验证实现与入参再进入完整编译流程。提前开启日志在批量编译或长时训练前合理设置 ASCEND_GLOBAL_LOG_LEVEL.md 与 ASCEND_PROCESS_LOG_PATH.md避免出错时日志不足、无法回溯 Python 堆栈。异步错误码联动若错误发生在 Runtime 执行阶段而非编译阶段可结合 如何获取和解读Runtime异步错误码.md 与 如何通过plog日志定位Device侧异常.md 中的方法整体排查。参考资料错误码定义与建议docs/en/error_code_ref/TEfusion-Errors/E40021-Compilation_Error.md、docs/zh/error_code_ref/TEfusion-Errors/E40021-Compilation_Error.md错误码注册表src/dfx/error_manager/error_code.json#L366-L376错误族索引docs/en/error_code_ref/TEfusion-Errors/TEFusion-Errors.md、docs/zh/error_code_ref/README.md相邻错误码E40020、E40003、E20001Host 日志查看docs/zh/log_ref/viewing_logs_ep.md、docs/zh/log_ref/faq.md相关环境变量ASCEND_GLOBAL_LOG_LEVEL.md、ASCEND_PROCESS_LOG_PATH.md、ASCEND_HOST_LOG_FILE_NUM.md排障方法论如何获取和解读Runtime异步错误码.md、如何通过plog日志定位Device侧异常.md【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表