Pull Request已成功合入, 合并人@CANN-robot
(感谢 why you 的贡献)变更摘要
本 PR 在 examples/custom_op/ 下新增三个 TileLang 自定义算子样例,分别演示如何用 TileLang 开发 Ascend 自定义算子并通过 GE 完成入图、在线编译和离线 OM 模型下沉,同时更新了 examples/custom_op/README.md 与 README_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.Kernel、T.alloc_ub、T.tile.add实现 element-wise Add kernel,经tilelang.jit编译后把生成的.so拷贝到指定路径;online/offline 版本支持[N] [output_path]命令行参数,便于运行时按 shape 动态编译。 -
入图样例
tilelang_add_custom:ge/add_custom.h通过REG_OP(AddCustom)注册算子(INPUT x/y、OUTPUT z、DT_FLOAT);ge/custom_op.cpp中AddCustom继承EagerExecuteOp/ShapeInferOp,按ASCEND_CUSTOM_OPP_PATH定位add_kernel.so并dlopen/dlsym("call"),Execute校验输入元素数(4096)后调用 kernel;session_run/main.cc构建 Data→AddCustom 图,经AddGraph/CompileGraph/LoadGraph/ExecuteGraphWithStreamAsync执行并做精度校验。 -
在线编译样例
tilelang_add_custom_online:AddCustomOnline继承CompilableOp/EagerExecuteOp/ShapeInferOp,Compile通过fork+execvp子进程调用python3 add_custom_kernel.py <n> <so_path>完成运行时编译,以 shape size 为 key 缓存并dlopen加载;Execute按 key 查找已编译 kernel 后调用。 -
离线下沉样例
tilelang_add_custom_offline:AddCustomOffline额外继承PortableOp,Serialize将编译产出的 kernel.so二进制(含 magic/version/条目数)写入模型缓冲,Deserialize校验kMaxEntryCount/kMaxSoSize等上限后经memfd_create创建内存文件再dlopen;配套graph_build导出 AIR 文件,run.sh调用 ATC 将 AIR 编译为 OM(默认soc_version为Ascend910_9362),model_exec通过aclmdlLoadFromFile/aclmdlExecute加载执行并校验结果。


Pull Request
描述
本次 PR 新增三个 TileLang 自定义算子样例,展示如何使用 TileLang 语言开发 Ascend 自定义算子并通过 GE 进行入图、在线编译和离线模型下沉:
同时更新了
examples/custom_op/README.md和README_en.md,添加 TileLang 样例索引。变更类型
关联的Issue
如何测试
examples/custom_op/tilelang_add_custom)bash run.sh运行样例核对清单
其他信息
样例参考了同目录下
triton_add_custom等已有算子样例的结构。每个样例包含完整的源码、CMakeLists.txt、README 和运行脚本。