ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

CANN Runtime 错误码 E40023(Invalid Path)排查指南:文件路径校验失败的原因与解决方法

CANN Runtime 错误码 E40023(Invalid Path)排查指南:文件路径校验失败的原因与解决方法 CANN Runtime 错误码 E40023Invalid Path排查指南文件路径校验失败的原因与解决方法【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime导读E40023File_Operation_Error_Invalid_Path是 CANN 图融合TEFusion链路中与文件路径校验强相关的错误码当算子图融合、调试信息落盘等流程所需的目录路径无法通过真实路径realpath解析时会触发。本文基于 CANN Runtime 开源仓库中的错误码文档与错误上报实现完整解析该错误码的报错格式、占位符含义、典型触发场景并给出从定位到解决的完整排查路径帮助开发者快速确认路径不存在或访问权限不足两类根因。错误码概述E40023 的身份信息E40023 属于TEFusion Errors图融合错误错误类别错误标题为File_Operation_Error_Invalid_Path即文件操作错误——路径无效。在仓库的错误码注册表中可以找到它的完整定义见 error_code.json{ errClass: TEFusion Errors, errTitle: File_Operation_Error_Invalid_Path, ErrCode: E40023, ErrMessage: Path %s for %s is invalid. Result: %s. Reason: %s., Arglist: path,arg,result,reason, suggestion: { Possible Cause: N/A, Solution: N/A } }从定义可见E40023 的核心语义是某个功能参数如调试目录参数要求传入一个有效的文件系统路径但该路径在校验时被判定为无效。完整的错误码家族索引可参考 TEFusion-Errors.md其中与文件/目录操作相关的同类错误码还包括错误码标题语义E40003File_Operation_Error_Open文件打开失败E40023File_Operation_Error_Invalid_Path路径无效本文主题W40011Directory_Operation_Error_Create_Failed目录创建失败E40023 与 E40003 的区别在于E40003 面向文件存在但打开出错的场景而 E40023 面向路径本身不可解析/不可访问的场景二者互为补充。错误信息格式四个占位符的完整语义E40023 的报错格式固定如下Path %s for %s is invalid. Result: %s. Reason: %s.四个占位符%s按顺序依次为占位符位置变量名对应 Arglist含义示例值第 1 个path被校验的文件路径/aaa/bbb第 2 个arg传入该路径的参数名--debug_dir第 3 个result校验动作的结果real path get failed第 4 个reason失败的具体原因the path does not exist or its access permission is denied该格式与 error_code.json 中定义的ErrMessage与Arglist严格一一对应说明这是一条参数模板化的结构化错误信息上层调用方只需按path, arg, result, reason的顺序填充四个实参即可生成规范统一的报错文本。报错示例逐段解读官方文档给出的报错示例如下Path /aaa/bbb for --debug_dir is invalid. Result: real path get failed. Reason: the path does not exist or its access permission is denied.逐段拆解这条报错Path /aaa/bbb被校验的路径是/aaa/bbbfor --debug_dir该路径来源于--debug_dir命令行参数调试目录配置项说明用户通过该参数指定了一个用于存放调试信息的目录Result: real path get failed校验动作是调用真实路径解析realpath即解析符号链接并规整为绝对路径的操作解析失败Reason: the path does not exist or its access permission is denied失败原因被归纳为两类——路径不存在或当前进程对该路径没有访问权限。也就是说这条示例报错在传达这样一个事实为--debug_dir传入的/aaa/bbb目录既不存在于文件系统中或虽然存在但运行进程没有足够的访问权限导致 realpath 解析失败。触发场景与根因分析根因一路径不存在路径不存在是最常见的触发场景具体可细分为参数中拼写了错误的目录名或文件名大小写、拼写错误目录尚未创建程序期望目录已存在而非自动创建路径中引用了不存在的挂载点或未挂载的磁盘目录使用了绝对路径但遗漏了路径前缀或相对路径在进程工作目录变化后失效。根因二访问权限不足即使路径真实存在若当前进程的用户身份不满足以下任一条件realpath 校验同样会失败对路径的各级父目录缺少x执行/进入权限导致无法穿越目录链对目标目录缺少r读或w写权限无法满足后续的读写操作路径受限于chroot、容器挂载隔离、SELinux 或 AppArmor 等安全策略。与调试目录--debug_dir的典型关联从报错示例可以推断E40023 在 TEFusion 图融合调试场景中出现频率较高当开发者通过--debug_dir等参数指定调试信息如融合过程 dump 文件的输出目录时融合框架会先对该目录执行真实路径解析与可达性校验校验失败即抛出 E40023。因此该错误往往出现在开启调试开关的第一次执行阶段而非运行中途。排查与解决步骤按照报错信息中的Result与Reason字段逐步排查可快速收敛问题确认路径书写正确检查path字段中的路径是否存在拼写错误、多余空格、错误的斜杠方向以及相对/绝对路径是否与预期一致。确认目录确实存在在运行环境尤其是容器、训练/推理集群环境中执行以下命令验证ls -ld /aaa/bbb若提示No such file or directory则需要先创建该目录mkdir -p /aaa/bbb确认访问权限检查路径各级目录的权限位与属主ls -ld /aaa /aaa/bbb id # 查看当前运行用户的 uid/gid确保运行进程的用户对每一级父目录都拥有进入权限x对目标目录拥有读写权限r/w。验证 realpath 解析结果用与校验动作一致的方式复现解析确认问题是否复现realpath /aaa/bbb若输出为空或报错则说明路径确实无法解析若输出正常则需要进一步核对参数传入的上下文例如参数是否被引号包裹、环境变量是否展开正确。修正参数并重跑根据上述结论将--debug_dir或其他报错中提到的参数改为一个存在且可访问的目录后重新执行。说明错误码注册表中suggestion.Possible Cause与Solution均为N/A即官方未给出比报错文本更多的静态建议因此排查的核心依据就是报错信息中Result与Reason两个字段本身这也是该错误码设计为四段式格式的原因——让原因直接可见。仓库实现机制错误码如何注册与上报理解 E40023 的底层实现有助于开发者阅读同类错误码的上报逻辑。1. 错误码注册表所有 CANN Runtime 的错误码统一注册在 src/dfx/error_manager/error_code.json 中该 JSON 文件以errClass分类、ErrCode为键组织错误定义其中就包含本文的 E40023位于 TEFusion Errors 分类下。这种集中注册的设计使得错误码文本、占位符参数顺序与错误类别可以统一维护并在编译期或运行期生成规范格式。2. 错误上报实现src/dfx/error_manager/error_manager.cc 是错误上报的核心实现其通过ReportInnerErrorMessage等函数接收错误码、格式化字符串与可变参数列表将占位符实参填充进模板后经由日志模块dlog_error模块名为GE输出到运行时日志。也就是说E40023 这类错误码最终会同时体现在用户可见的报错与运行时日志两层排查时除查看终端报错外也可结合 CANN 运行日志中的[ERROR]级别日志模块标记GE获取更多上下文。3. 错误码的分类定位从 TEFusion-Errors.md 索引可以看到E4 系列的其余错误码E40001 环境变量无效、E40002 Python 版本错误、E40021 编译错误、E40022 参数无效等共同覆盖了图融合阶段环境检查—参数校验—文件操作—编译执行的完整失败面E40023 正是其中负责文件路径校验的一环。预防建议为避免在真实项目中反复触发 E40023建议遵循以下实践在配置脚本中预创建目录在执行依赖目录的程序前先通过mkdir -p确保目录存在使用环境变量统一路径避免在多个参数中硬编码路径减少拼写不一致导致的无效路径区分已存在目录与自动创建目录两类参数对要求路径必须预先存在的参数如--debug_dir务必先确认目录就绪对支持自动创建的目录确认其父级路径具备写权限容器/集群场景先验证挂载在多机训练或容器化部署时先确认相关目录已被正确挂载且对运行用户可见再做调试目录配置关注日志中的 GE 模块错误将运行时日志中的[ERROR]与终端报错对照查看可以定位到更完整的调用上下文。总结E40023 是 CANN 图融合TEFusion链路中一个语义清晰、易于定位的文件路径校验错误码。它的四段式报错格式路径、参数名、结果、原因将根因直接暴露在报错文本中开发者只需对照Result: real path get failed与Reason字段按路径不存在 → 权限不足的顺序排查即可在大多数场景下快速恢复。结合仓库中 error_code.json 的注册定义与 error_manager.cc 的上报机制还能进一步理解整个 CANN Runtime 错误码体系的组织与输出方式为排查同族的 E4 系列错误码如 E40003 文件打开失败奠定基础。【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进