已合并
feat(custom_op): 新增 TileLang 自定义算子入图/在线编译/离线模型下沉样例 #4520
feat(custom_op): 新增 TileLang 自定义算子入图/在线编译/离线模型下沉样例 #4520
已合并
why you创建于 20 天前
why you成员
20 天前

Pull Request

描述

本次 PR 新增三个 TileLang 自定义算子样例,展示如何使用 TileLang 语言开发 Ascend 自定义算子并通过 GE 进行入图、在线编译和离线模型下沉:

  1. tilelang_add_custom — TileLang 算子入图样例,演示将 TileLang 编译的 kernel 注册为 GE 自定义算子并通过 Session 执行
  2. tilelang_add_custom_online — TileLang 算子在线编译样例,演示在运行时动态编译 TileLang kernel 并执行
  3. tilelang_add_custom_offline — TileLang 算子离线 OM 模型下沉样例,演示将 TileLang 算子编译为离线 OM 模型并执行

同时更新了 examples/custom_op/README.mdREADME_en.md,添加 TileLang 样例索引。

变更类型

关联的Issue

如何测试

  1. 进入对应样例目录(如 examples/custom_op/tilelang_add_custom
  2. 参考 README.md 配置环境变量(ASCEND_HOME_PATH 等)
  3. 执行 bash run.sh 运行样例
  4. 验证输出结果与预期一致

核对清单

其他信息

样例参考了同目录下 triton_add_custom 等已有算子样例的结构。每个样例包含完整的源码、CMakeLists.txt、README 和运行脚本。

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 why you 的贡献)
Wwhy you成员
20 天前 创建了 pull request,commit 53b79e7d
atomgit-bot
atomgit-bot
20 天前 评论:

变更摘要

本 PR 在 examples/custom_op/ 下新增三个 TileLang 自定义算子样例,分别演示如何用 TileLang 开发 Ascend 自定义算子并通过 GE 完成入图、在线编译和离线 OM 模型下沉,同时更新了 examples/custom_op/README.mdREADME_en.md 的样例索引。三个样例共用同一份 TileLang element-wise Add kernel 源码:由 tilelang.jit 装饰的 vec_add 编译产出导出 call(uint8_t* A, uint8_t* B, uint8_t* C, aclrtStream stream) 签名的 .so,GE 侧通过 dlopen/dlsym("call") 加载并调用。

主要改动

  • TileLang kernel 编译脚本(三个样例均含 add_custom_kernel/add_custom_kernel.py:使用 T.KernelT.alloc_ubT.tile.add 实现 element-wise Add kernel,经 tilelang.jit 编译后把生成的 .so 拷贝到指定路径;online/offline 版本支持 [N] [output_path] 命令行参数,便于运行时按 shape 动态编译。

  • 入图样例 tilelang_add_customge/add_custom.h 通过 REG_OP(AddCustom) 注册算子(INPUT x/yOUTPUT zDT_FLOAT);ge/custom_op.cppAddCustom 继承 EagerExecuteOp/ShapeInferOp,按 ASCEND_CUSTOM_OPP_PATH 定位 add_kernel.sodlopen/dlsym("call")Execute 校验输入元素数(4096)后调用 kernel;session_run/main.cc 构建 Data→AddCustom 图,经 AddGraph/CompileGraph/LoadGraph/ExecuteGraphWithStreamAsync 执行并做精度校验。

  • 在线编译样例 tilelang_add_custom_onlineAddCustomOnline 继承 CompilableOp/EagerExecuteOp/ShapeInferOpCompile 通过 fork + execvp 子进程调用 python3 add_custom_kernel.py <n> <so_path> 完成运行时编译,以 shape size 为 key 缓存并 dlopen 加载;Execute 按 key 查找已编译 kernel 后调用。

  • 离线下沉样例 tilelang_add_custom_offlineAddCustomOffline 额外继承 PortableOpSerialize 将编译产出的 kernel .so 二进制(含 magic/version/条目数)写入模型缓冲,Deserialize 校验 kMaxEntryCount/kMaxSoSize 等上限后经 memfd_create 创建内存文件再 dlopen;配套 graph_build 导出 AIR 文件,run.sh 调用 ATC 将 AIR 编译为 OM(默认 soc_versionAscend910_9362),model_exec 通过 aclmdlLoadFromFile/aclmdlExecute 加载执行并校验结果。

likedislike
不准确?
atomgit-bot
atomgit-bot
20 天前 评论:

代码审查

✅ 未发现问题

likedislike
不准确?
CANN-robotCANN-robot成员
20 天前 添加了label:stat/needs-squash
CANN-robotCANN-robot成员
20 天前 添加了label:cann-cla/yes
此处折叠了165条消息 查看更多
夏国正成员
19 天前 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
19 天前 添加了label:lgtm
张德鹏成员
19 天前 评论:

/approve

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