这是 OpenCode(AI agent)在华为昇腾 NPU 上**调试自定义算子(2)**时,用来「等编译 → 查编译错误 → 跑测试 → 查设备日志」的一套收尾命令。拆开看:

1. 轮询等待后台构建完成

for i in $(seq 1 48); do
  sleep 20
  grep -q "BUILD+INSTALL OK" /tmp/opencode/rt34.log && break
  ps aux | grep -q "[r]ebuild test.sh" || break
done
  • 每 20 秒检查一次,最多 48 次(≈16 分钟)
  • 退出条件二选一:
    • 日志里出现 BUILD+INSTALL OK(构建成功)
    • 进程列表里不再有 rebuild test.sh(注意 [r]ebuild 这个写法——用 [r] 技巧让 grep 匹配不到它自己这条 grep 进程,构建进程挂了/结束了)
      典型场景:agent 把重建脚本丢到后台跑,用这个循环等它跑完,避免干等或超时卡死。

2. Check Results + Extract Compilation Errors

cat /tmp/opencode/rt34.log
grep -inE ": error" /tmp/opencode/build_rt.log | head -3

打印测试日志,然后从构建日志里抓前 3 条 : error 行——这是 agent 快速判断「编译挂没挂、挂在哪」的方式,只看前几条就够了。

3. 加载昇腾环境并跑测试

source /usr/local/Ascend/ascend-toolkit/set_env.sh
export ASCEND_OPP_PATH=/usr/local/Ascend/cann-9.2.0-beta.1/opp
V=.../opp/vendors/custom_op/.../op_api/lib
export LD_LIBRARY_PATH=$V:/tmp/opencode:$LD_LIBRARY_PATH
timeout 300 /tmp/opencode/test_sage_attention2 2>&1 | tail -4

(你贴的里有几个 OCR/笔误:30e 应是 3001sls*.1og*.log

  • source set_env.sh:加载 CANN 9.2 的运行环境
  • ASCEND_OPP_PATH:指向算子库路径
  • LD_LIBRARY_PATH 加上 vendors/custom_op/.../op_api/lib:这是自定义算子编译产物的动态库目录——昇腾的自定义算子编译成 so 后,推理框架运行时要去这里加载 kernel
  • timeout 300:测试最多跑 5 分钟,防止设备 hang 死把会话卡住
  • tail -4:只看输出结尾,一般测试程序结尾才是 pass/fail 和耗时统计
    test_sage_attention2 就是 2(量化注意力加速算子)的移植验证程序——大概率是和 CUDA/参考实现对比精度 + 测速。

4. 查 NPU 设备侧日志

L=$(ls -t /root/ascend/log/debug/plog/*.log | head -1)
echo "aivec: $(grep -icE 'aivec error' $L) aic-fail: $(grep -icE 'sqe_type=...(aic)' $L)"

这是最“昇腾特色”的一步:

  • 昇腾 NPU 的底层错误不会打到 stdout,而是写进 host 侧的 plog 调试日志里
  • ls -t | head -1:取最新的那份 plog
  • 统计两个关键错误计数:
    • aivec error:AI Vector 核(负责 fp32/向量运算部分)执行出错
    • aic-fail / sqe_type=aic:AI Cube 核(负责 matmul/矩阵乘, 的 QK^T 就在这上面跑)的队列执行失败
      这样 agent 不用翻几万行日志,直接看两个数字是不是 0,就能判断算子在设备上跑得干不干净。

整体在干嘛

一句话:这是 AI agent 调试昇腾自定义算子的自动化验证回路——后台重新编译算子 → 等编译结束 → 查编译错误 → 设置 CANN 环境、加载自定义算子库 → 跑 2 精度/性能测试 → 最后扫设备日志确认 AI Core / AI Vector 没有静默失败。
这类脚本通常出现在用 OpenCode/Claude Code 之类 agent 做「CANN 算子移植」任务时,agent 会反复执行它来闭环:改代码 → rebuild → 跑测试 → 看错误 → 再改。你这份大概率是 agent 一次 debug 迭代里贴出来的检查命令。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐