已合并
fix: 补充 example 样例文档与入口指引, 修复清理 output 后 UT 构建因三方库缓存失效而链接失败的问题 #649
yelongjian创建于 13 天前
fix: 补充 example 样例文档与入口指引, 修复清理 output 后 UT 构建因三方库缓存失效而链接失败的问题 #649
已合并
yelongjian创建于 13 天前
yelongjian成员
13 天前

Pull Request

描述

修复文档与脚本两处问题:

问题1:样例无文档化承接
quick_install.md「场景2:需要运行样例」指引新手寻找样例,但全仓文档零提及样例定义与入口,example/ 目录无 README。本次:

  • 新增 example/README.md / README_en.md:说明样例定义(tc_ge_irrun_open_api_0014:使用 GE IR Open API 构建 Relu 计算图并在 NPU 上执行)、前提条件(CANN Toolkit、NPU 驱动固件、Python 依赖)、运行方法、结果判定与排查步骤
  • docs/{zh,en}/quick_install.md 场景2 与 README{,_en}.md 快速开始补充样例入口链接
  • run_example.sh 移除 find|sed 调试打印,增加 set_env.sh/make/.bin 存在性检查与明确报错、透传退出码(原失败为 exit 255 且无有效错误信息),支持 ASCEND_HOME_PATH 覆盖安装路径(Makefile 同步)

问题2:清理 output 后 UT 构建链接失败且不自愈
先 bash build.sh 编译、再清理 output 目录、再 bash tests/run_test.sh -u 时,build_gcov 中残留的 ExternalProject install stamp 误判三方库已安装而跳过重装,output/third_party/lib_cache 中 libascend_protobuf.so 永久缺失,mmpa 链接失败,脚本仅报 "Metadef llt build failed."。本次:

  • tests/run_test.sh 增加自愈逻辑:检测到 lib_cache 中三方库缺失(且 ASCEND 安装目录亦无)而构建目录存在时,自动清理过期构建目录强制全量重建;失败提示改为引导查看 make 输出
  • docs/{zh,en}/build.md 4.4 补充 build_gcov 与 output/third_party/lib_cache 状态交互说明及手动自救方法(rm -rf build_gcov)

变更类型

关联的Issue

无

如何测试

  1. bash -n example/run_example.sh tests/run_test.sh 语法通过;本地 pre-commit 全部 Passed
  2. 无 CANN 环境执行 bash example/run_example.sh:输出明确报错并以 exit 1 退出(原为不可诊断失败)
  3. 自愈条件三场景模拟验证:lib_cache 缺失且构建目录存在→触发清理;libascend_protobuf.so 存在于 lib_cache 或 ASCEND 安装目录→不触发(不误伤增量构建)
  4. NPU 环境:清理 output 后执行 bash tests/run_test.sh -u,应自动清理 build_gcov 并全量重建通过
  5. 文档新增链接可达性检查

核对清单

其他信息

无

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 yelongjian 的贡献)
Yyelongjian成员
13 天前 创建了 pull request,commit 3a6f6e7c
atomgit-bot
atomgit-bot
13 天前 评论:

变更摘要

本 PR 主要修复两方面问题:一是补齐 example/ 样例的文档与入口指引,二是解决清理 output 目录后单元测试构建因三方库缓存失效而链接失败且无法自愈的问题。样例脚本 run_example.sh 由依赖固定路径、无错误处理改为支持 ASCEND_HOME_PATH 覆盖安装路径,并增加环境、构建、产物存在性检查与退出码透传;Makefile 同步支持该环境变量。测试脚本 tests/run_test.sh 增加三方库缺失检测与过期构建目录清理逻辑,强制全量重建。文档侧新增样例说明并提供入口链接,同时补充构建目录与 lib_cache 状态交互说明。

主要改动

  • 样例运行脚本增强: example/run_example.sh 改用 SCRIPT_DIR 定位自身目录,安装路径由 ASCEND_HOME_PATH 覆盖默认 /usr/local/Ascend/cann,并在 set_env.sh 缺失、make 失败、.bin 未生成、运行返回非零时输出明确错误并以对应退出码退出。
  • 样例构建路径可配置: example/tc_ge_irrun_open_api_0014/Makefile 中 ASCEND_PATH 改为优先取 ASCEND_HOME_PATH,未设置时回退默认 CANN 路径,与运行脚本保持一致。
  • UT 构建自愈逻辑: tests/run_test.sh 在 build_metadef 中检测 lib_cache 下的 libascend_protobuf.so 缺失且 ASCEND_INSTALL_PATH/lib64 亦不存在、而构建目录仍存在时,先删除过期构建目录以强制全量重建三方库,避免 ExternalProject stamp 误判导致链接失败。
  • 构建失败提示优化: tests/run_test.sh 中 Metadef llt build failed. 提示改为引导查看上方 make 输出以定位根因。
  • 样例文档与入口指引: 新增 example/README.md、example/README_en.md 说明样例定义(tc_ge_irrun_open_api_0014)、前提条件、运行方法与结果判定,并在 docs/{zh,en}/quick_install.md 场景2 与 README{,_en}.md 快速开始中补充样例入口链接。
likedislike
不准确?
atomgit-bot
atomgit-bot
13 天前 评论:

代码审查

审查结论

按文件逐项确认

  • example/run_example.sh:已逐行审查(SCRIPT_DIR 解析、ASCEND_HOME_PATH 覆盖、set_env.sh 校验与 source、cd/make/bin 存在性检查、退出码透传)。发现 2 项:set_env.sh 定位假设过强(P2)、source 返回码未校验(P3)。另已核实被删除的旧 mkdir tc_ge_irrun_open_api_0014_npu_output_ 无实际用途 —— 样例实际写入的是 ./tc_ge_irrun_open_api_0014/tc_ge_irrun_open_api_0014_npu_output_<i>.bin(源码第 365-367 行),与旧 mkdir 创建的目录并非同一路径,因此删除该逻辑不构成回归。
  • example/tc_ge_irrun_open_api_0014/Makefile:no issues。ASCEND_PATH := $(if $(ASCEND_HOME_PATH),$(ASCEND_HOME_PATH),/usr/local/Ascend/cann) 用 $(if) 正确处理了「未设置/空值」两种情形,与 run_example.sh 的默认值一致;去掉尾部斜杠后 $(ASCEND_PATH)/... 的拼接仍然正确,$(shell uname -m)、include/lib 路径未受影响。
  • tests/run_test.sh:已审查 build_metadef(新增自愈分支 + main 失败提示),确认 BUILD_PATH 恒由硬编码 build/build_gcov 拼接、不会为空,rm -rf 目标始终限定在 ${BASEPATH} 内,无「变量为空删除根目录」风险;local、[[ ]] 用法与文件既有风格一致。发现 1 项:自愈判据硬编码三方库路径(P3)。第三方库真实安装布局(cmake/ 目录)超出本次工具可访问范围,无法交叉核实,相关结论已相应降低置信度。

统计

  • P0:0,P1:0,P2:1,P3:2

总体风险判断

本次改动方向正确:把不可诊断的失败改为明确报错 + 透传退出码,并新增了清理 output 后的构建自愈路径,整体风险低。主要遗留风险集中在「路径/环境假设」上:run_example.sh 对 set_env.sh 位置的强假设可能让已正确配置 CANN 的用户直接失败;run_test.sh 的自愈判据若与实际三方库布局不一致,会在「每次全量重建」和「自愈不触发」之间二选一。建议至少把 run_example.sh 的 set_env.sh 检查降级为警告,并把 run_test.sh 的探测改为与具体文件名无关的判据。

类型 数量
🔴 阻塞 0
🟡 建议 1

💬 仅评论

likedislike
不准确?
CANN-robotCANN-robot成员
13 天前 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
13 天前 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here.
You can get sig-info at here.
You can self-configure the PR merge rules for this repository. For more details, please refer to Here.
For more, you also can visit HICANN.


PR Approval Progress

✅ Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
repo-cann/metadef ✅ yangyongqiang0606, kobemini (2/2) ✅ yangyongqiang0606 (1/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

yelongjian, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
CANN-robotCANN-robot成员
13 天前 将yangyongqiang0606,kobemini,tangqunzhang,depeng1994,wqtshg_wt,peiyang,shengnan666,zhanj,zhujingjing,wangxiaotian995设为评审人
CANN-robotCANN-robot成员
13 天前 将yangyongqiang0606,kobemini,tangqunzhang,depeng1994,wqtshg_wt,peiyang,shengnan666,zhanj,zhujingjing,wangxiaotian995设为审查人
yelongjian成员
13 天前 评论:

/compile

likedislike
Yyelongjian成员
13 天前 预合并成功(commit_id: a932fdb78b2c2f3b571ef9c9f3b0e97ae5836984)
CANN-robot
CANN-robot成员
13 天前 评论:
🚀 CI 流水线已启动
📋 执行详情: 点击查看流水线
likedislike
CANN-robotCANN-robot成员
13 天前 添加了label:ci-pipeline-running
CANN-robotCANN-robot成员
13 天前 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
13 天前 添加了label:ci-pipeline-passed
atomgit-bot
atomgit-bot13 天前进行代码检视2
example/run_example.sh
@@ -16,1 +18,4 @@
18+ echo "Error: '${ASCEND_INSTALL_PATH}/set_env.sh' not found."
19+ echo "Please install CANN Toolkit first, or set ASCEND_HOME_PATH to your Ascend install directory."
20+ exit 1
1621fi
atomgit-bot
atomgit-bot13 天前评论:

🟡 Medium Priority

建议:找不到 set_env.sh 时改为警告并继续(环境可能已 source),仅在关键头文件/库目录也缺失时 exit 1;或额外探测 bin/set_env.sh、父目录 set_env.sh 等常见位置。

likedislike
不准确?
yelongjian成员
13 天前 评论:

可以exit 1,功能上ok

Yyelongjian成员
13 天前 解决了最后一个问题
GengChao
GengChao成员
13 天前 评论:

/lgtm

likedislike
yangyongqiang
yangyongqiang成员
13 天前 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
13 天前 添加了label:lgtm
yangyongqiang
yangyongqiang成员
13 天前 评论:

/approve

likedislike
CANN-robotCANN-robot成员
13 天前 添加了label:approved
CANN-robotCANN-robot成员
13 天前 合入了pull request