CANN Runtime 错误码 W40010 排查指南:TEfusion 配置错误之环境变量值无效
【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime
CANN Runtime 在加载与解析软件包配置(如 TEfusion 算子融合、ADK 工具链路径)时,会对关键环境变量做合法性校验。当某个环境变量的取值不符合预期时,会抛出Config_Error_Invalid_Environment_Variable类错误码 W40010。本文基于开源仓库中的错误码定义与错误码参考文档,详解 W40010 的报错格式、字段含义、典型触发场景(如ASCEND_ADK_PATH指向不存在路径)以及标准处置流程,帮助你在运行、编译或部署阶段快速定位并修复环境变量配置问题。
错误码概览
W40010 属于TEFusion Errors(TEfusion 错误)类别,对应英文标题为Config_Error_Invalid_Environment_Variable(配置错误 · 环境变量无效)。它与同类别下功能相似的 E40001(同为“配置错误 · 环境变量无效”)、以及 RTS 侧的 EE2002、FE 侧的 E20002 相互呼应,共同覆盖 CANN 各组件对运行环境的配置校验场景。
在开源仓库的错误码注册表中,该错误码定义如下(见 error_code.json):
{ "errClass": "TEFusion Errors", "errTitle": "Config_Error_Invalid_Environment_Variable", "ErrCode": "W40010", "ErrMessage": "Value %s for environment variable %s is invalid. Result: %s. Reason: %s.", "Arglist": "path,arg,result,reason", "suggestion": { "Possible Cause": "N/A", "Solution": "N/A" } }从注册表可见,W40010 的错误消息包含 4 个占位符%s,依次对应path(环境变量值)、arg(环境变量名)、result(错误结果)、reason(报错原因)。需要说明的是,该条目的 Possible Cause 与 Solution 在注册表中为N/A,通用处置建议由错误码参考文档的“解决方法”章节统一给出;而具体报错原因以运行时填入的Reason字段为准。
说明:错误码以字母前缀区分等级。在 CANN 错误码体系中,
E开头通常表示错误(Error),W开头表示警告(Warning)。因此 W40010 属于警告级别的配置类错误,其 errTitle 中的Config_Error指明了错误发生在配置解析阶段。
报错格式与字段含义
W40010 的标准报错格式如下:
Value %s for environment variable %s is invalid. Result: %s. Reason: %s.各占位符(按出现顺序)含义如下表所示:
| 占位符 | 参数名(Arglist) | 含义 |
|---|---|---|
第 1 个%s | path | 当前被校验的环境变量值(即用户配置的实际取值) |
第 2 个%s | arg | 发生校验失败的环境变量名(如ASCEND_ADK_PATH) |
第 3 个%s | result | 错误结果,描述校验失败后所尝试操作的执行结果(如无法获取 ADK 版本信息) |
第 4 个%s | reason | 报错原因,说明该环境变量值为何无效(如路径不存在) |
官方报错示例
错误码参考文档给出的典型示例如下:
Value for environment variable ASCEND_ADK_PATH is invalid. Result: unable to get current adk version info. Reason: path does not exist.逐字段解读这条告警:
- 环境变量值(第 1 个字段):为空(
Value与for之间没有任何内容),说明ASCEND_ADK_PATH未被有效设置,或设置成了空字符串; - 环境变量名(第 2 个字段):
ASCEND_ADK_PATH,即 ADK(Ascend Development Kit,昇腾开发套件)的路径变量; - 错误结果(第 3 个字段):
unable to get current adk version info,即后续尝试获取当前 ADK 版本信息的操作失败; - 报错原因(第 4 个字段):
path does not exist,即所配置的路径在文件系统中不存在,导致无法基于该路径读取 ADK 版本信息。
从该示例可以还原出 W40010 的典型触发链路:TEfusion 在初始化或解析融合任务时,需要读取ASCEND_ADK_PATH指向的目录以获取 ADK 版本信息;若该变量为空或指向一个不存在的目录,则“读取版本信息”这一步以失败告终,随后以 W40010 的形式向外报告。
触发场景分析
W40010 主要出现在配置解析与软件包路径解析阶段,常见触发场景包括:
- 环境变量未设置或为空:如示例所示,
ASCEND_ADK_PATH未被导出,或导出为空字符串。此时 TEfusion 无法定位 ADK 安装目录,也就拿不到 ADK 版本信息。 - 环境变量指向的路径不存在:变量虽已设置,但目标目录或文件被移动、删除、卸载,或变量拼写/层级写错(例如误将
ASCEND_ADK_PATH指向软件包内不存在的子目录)。 - 环境变量指向的文件类型不符:变量期望指向特定类型的资源(目录或特定文件),实际却指向了其他类型,导致读取版本信息失败。
- 多环境/多版本切换后残留旧配置:在切换 CANN 版本或迁移部署目录后,旧环境变量值没有同步更新,指向了已失效的旧路径。
需要强调的是,W40010 的判定是动态校验的:报错原因完全由运行时根据环境变量实际取值计算得出并填入Reason字段。因此同一错误码可能对应多种具体原因,排查时应始终以报错信息中的Reason为第一依据,而非仅凭错误码本身判断。
解决方法
错误码参考文档给出的处置原则如下(见 W40010 文档):
Please set the environment variable as prompted in the Reason, or reconfigure it referring to the environment variable reference documentation.
即:按照 Reason 中的提示设置环境变量,或根据环境变量参考文档重新配置环境变量。具体操作建议如下:
第一步:按 Reason 定位根因
读取报错信息中Reason:之后的内容,判断失败类型。常见情形与对策:
| Reason 关键字 | 典型情形 | 处置建议 |
|---|---|---|
path does not exist | 路径不存在 | 用ls/test -d确认目标目录是否存在,检查是否存在拼写错误或目录层级写错 |
| 空值 | 变量未设置或为空 | 重新 source 环境脚本(如set_env.sh),或手动export正确路径 |
| 路径含空格/特殊字符 | 解析异常 | 对含空格或特殊字符的路径使用引号包裹后重新导出 |
第二步:重新配置环境变量
按变量语义设置正确的值。以ASCEND_ADK_PATH为例,在 bash 中可执行:
# 确认 ADK 实际安装目录(按实际部署位置调整) ls -d /usr/local/Ascend/ascend-toolkit/latest # 重新设置环境变量 export ASCEND_ADK_PATH=/usr/local/Ascend/ascend-toolkit/latest在运行环境变量数量较多、且需要与 CANN Runtime 其他组件保持一致时,建议统一通过 CANN 提供的环境设置脚本(例如安装目录下的set_env.sh)进行 source,避免手工 export 遗漏或覆盖其他相关变量:
source /usr/local/Ascend/ascend-toolkit/set_env.sh第三步:验证并复现
配置完成后,重新执行触发 W40010 的编译或运行命令,确认告警不再出现;同时可用echo $ASCEND_ADK_PATH等命令核对当前环境变量取值是否为预期路径。
进一步查阅环境变量参考文档
若无法确定该变量应配置为何值,可查阅 CANN Runtime 仓库中的环境变量参考文档(见 docs/zh/env_vars/README.md),其中按模块汇总了各环境变量的作用与配置要求;仓库中的 错误码参考总览 也提供了按组件分类的错误码检索入口。
同族错误码对照
W40010 与仓库中其他“环境变量无效”类错误码在信息粒度和触发组件上略有差异,排查时注意区分:
| 错误码 | 所属类别 | 报错格式 | 差异点 |
|---|---|---|---|
| W40010 | TEFusion Errors | Value %s for environment variable %s is invalid. Result: %s. Reason: %s. | 带Result(操作结果)与Reason(原因)两个字段,信息最完整 |
| E40001 | TEFusion Errors | Value %s for environment variable %s is invalid when %s. Reason: %s. | 多出when字段,用于描述失败发生的阶段(如执行python3 -V时) |
| E20002 | FE Errors | Value %s for environment variable %s is invalid. Reason: %s. | 仅带Reason,无Result |
| EE2002 | RTS Errors | Value %s for environment variable %s is invalid. Expected value: %s. | 直接给出期望取值(Expected value),如LD_LIBRARY_PATH需包含runtime/lib64的合法路径 |
其中 E40001 的官方示例(见 E40001 文档)进一步说明了 TEfusion 环境校验的典型形态——在通过PATH执行python3 -V与python -V检查 Python 版本阶段发现 Python 版本无效,同样属于“环境变量值无效”的配置类问题。
排查小结
当你在使用 CANN Runtime 过程中遇到 W40010 告警,可按以下思路快速收敛:
- 完整阅读报错:W40010 的
Result与Reason字段承载了绝大多数诊断信息,不要只看错误码; - 核对环境变量值:确认报错点名的环境变量(如
ASCEND_ADK_PATH)当前取值是否为空、路径是否存在、类型是否正确; - 重配并复验:按 Reason 提示修正取值,重新 source 环境脚本或 export 后复跑,直至告警消失;
- 必要时查阅文档:参考 环境变量参考文档 与 错误码参考总览 获取更多上下文。
错误码定义出处:src/dfx/error_manager/error_code.json;英文错误码参考:W40010-Config_Error_Invalid_Environment_Variable.md;中文错误码参考:W40010-Config_Error_Invalid_Environment_Variable.md。
【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考