AI agent 调试昇腾自定义算子的自动化验证回路 看结果 + 抓编译错误
·
这是 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 应是 300,1s 是 ls,*.1og 是 *.log)
source set_env.sh:加载 CANN 9.2 的运行环境ASCEND_OPP_PATH:指向算子库路径LD_LIBRARY_PATH加上vendors/custom_op/.../op_api/lib:这是自定义算子编译产物的动态库目录——昇腾的自定义算子编译成 so 后,推理框架运行时要去这里加载 kerneltimeout 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 迭代里贴出来的检查命令。
更多推荐



所有评论(0)