已关闭
自定义算子与 CANN 内置算子同名时,ATK 进程内生效的是内置 tiling,无提示无开关 #30
Justbin创建于 9月4日关闭于 9月10日
lixiaolong9527
9月4日 评论:
9月4日 评论:
您好,欢迎向 ATK 提交Issue!
我们已收到您的反馈,感谢您对开源社区的支持。
处理时效:维护团队将在24小时内查看并回复您的问题(工作日)。
自助查询:再等待期间,建议您先查阅仓库内的文档资料,可能已有解决方案。
请确保Issue描述清晰,包含复现步骤和日志,这将帮我们更快定位问题。谢谢!


lixiaolong9527
9月4日 评论:
9月4日 评论:
您好,已收到反馈,届时将会查看确认这个问题并优化


9月7日 关联了pull request:feat: warn when custom OPP tiling registration is skipped by GE
9月10日 关闭了 issue
9月10日 issue状态由 TODO 改变为 DONE
9月10日 添加了label:resolved
现象
按独立安装方式部署自定义算子包(
ASCEND_CUSTOM_OPP_PATH指向 vendor 目录),用 ATK 跑该算子时:kernel.o来自自定义包(正确),但 tiling 解析到的是 CANN 内置那一份。即实际测的是「自定义包的 kernel + 内置的 tiling」这个混合组合,全程无告警、退出码正常。换成不链 torch_npu 的裸 aclnn C++ 程序,在完全相同的环境变量下调同一个算子,tiling 用的就是自定义包那份。
证据
tiling 函数在 DEBUG plog 里会打出所在源码的文件名与行号,两份实现行号不同:
ComputeTilingKey所在行[OPS_NN][OP_PROTO]GE 的 tiling 函数槽位是先到先得,日志措辞可区分。ATK 进程里(op type
IndexFill):自定义包那次注册全部被跳过。原因是 torch_npu 链着整套 GE(
ldd libtorch_npu.so可见libge_runner.so/libgert.so/libregister.so),GE 会更早把内置 op host 加载进来。影响
两份 tiling 会算出不同结果。同一条用例上,自定义包那份算出
tilingKey=1、内置那份算出0,发射的 kernel 不同,一个aclrtSynchronizeStream返回507015、一个通过。用 ATK 验收与内置同名的自定义算子时,结论指向的不是被测代码,而使用者没有任何提示。
试过但无效
ASCEND_CUSTOM_OPP_PATH指 vendor 目录 / 指 opp 根<CANN>/opp/vendors,安装脚本把 vendor 插到config.ini的load_priority最前LD_PRELOAD自定义包的liboptiling.soGE 算出的插件搜索路径里自定义 vendor 已排第一、
built-in排最后,但那个顺序只作用于扫描,不决定 tiling 函数槽位的归属。期望
至少能检出并告警「本次执行采用的 tiling 不来自
ASCEND_CUSTOM_OPP_PATH指向的算子包」。注册顺序发生在 GE 侧,可能需与 CANN 一并确认;提给 ATK 是因为它是这一问题的可观测入口,且直接影响 ATK 的结论是否指向被测算子包。
环境
ATK 26.8.8 / CANN 9.0.0-beta.1 / torch 2.10.0 / torch_npu 2.10.0 / Ascend910_93(A3)。被测算子为 ops-nn 的
experimental/index/index_fill,op typeIndexFill与 CANN 内置同名。