【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skillsname: torch-custom-ops-guide description: 自定义算子入图完整指南。覆盖从零开发、Eager 算子适配 npugraph_ex 图模式torch.library.custom_op / torch.library.Library、Meta 推导函数编写等全流程。适用于两种纯 Python 自定义算子注册场景。关键词custom_op、torch.library.Library、register_fake、meta、mutates_args。自定义算子入图算子状态确认若用户未说明算子状态使用交互式提问工具发起问题您的算子处于什么状态路由还没开发从零开始 → 按 npugraph_ex 代码生成场景生成包含算子注册骨架参考torch-npugraph-ex-templateskill 中的「自定义算子代码块」 图模式编译调用的完整 MRE算子实现用# 用户实现占位。In-place 与 Out-of-place 的区别在custom_op路径上体现在mutates_args与register_fake返回值在torch.library.Library路径上体现在 schema 的 alias 标注和 Meta 返回值函数化转换由 TorchAir 自动完成无需手动实现已经能在 Eager 模式下运行需要适配图模式 → 进入已有 Eager 算子适配流程已经入图但遇到问题 → 转到问题定位加载torch-npugraph-ex-dfx-triageskill已有 Eager 算子适配图模式确认算子注册方式若用户未说明注册方式使用交互式提问工具发起问题您的算子是通过哪种方式注册的路由torch.library.custom_opPython 层在用户脚本中注册→register_fake写在用户脚本内与算子定义同文件。参考docs/zh/custom_op_graph/op_adapt_torchair.md以及non_in_place_op_cases.md/in_place_op_cases.md取决于算子类型纯 Pythontorch.library.LibraryPython 层在用户脚本中通过Library(..., FRAGMENT)define(...)impl(...)注册 schema 和 Eager 实现再通过Library(..., IMPL, Meta)注册 Meta→ schema、Eager 实现和 Meta 注册都写在用户脚本内Eager 实现通常使用impl(mylib, op_name, PrivateUse1)Meta 使用meta_lib Library(mylib, IMPL, Meta)impl(meta_lib, op_name)不确定 → 引导用户检查如果算子通过torch.library.custom_op装饰器定义则为torch.library.custom_op如果脚本中显式创建Library(namespace, FRAGMENT)并调用define(...)、impl(..., PrivateUse1)、Library(..., IMPL, Meta)则为纯 Pythontorch.library.Library编写 Meta 推导函数register_fake/ Meta implagent 行为规则请求用户提供算子签名和语义描述输入/输出 tensor 的 shape、dtype 映射关系。Meta 函数只关心操作的数学语义不关心具体计算实现若是torch.library.custom_op路径 → 在用户脚本内使用my_op.register_fake编写 Meta 推导函数若是纯 Pythontorch.library.Library路径 → 在用户脚本内使用meta_lib Library(namespace, IMPL, Meta)impl(meta_lib, op_name)编写 Meta 推导函数若用户能提供算子签名和语义 → 帮助编写完整 Meta 骨架遵循对应 template skill 中的「自定义算子代码块」格式若用户无法提供 → 给出骨架代码用# TODO: 根据算子语义推导输出 shape/dtype标注需用户填充的部分关键点Meta 推导函数只做 shape/dtype/device 推导不执行实际计算。写 Meta 函数只需理解操作的数学语义和 input→output 的映射关系。In-place 算子返回NoneOut-of-place 算子返回与输出同 shape/dtype 的空 tensor。后续步骤完成 Meta 推导函数后即可支持 npugraph_ex 入图无需额外步骤。下一步加载torch-npugraph-ex-knowledgeskill继续处理编译调用、调试定位或性能优化。纯 Pythontorch.library.Library写法对照用途为不使用torch.library.custom_op的用户提供一份对照表帮助他们在同一脚本内完成 schema、Eager 实现和 Meta 注册。阶段常见写法说明Schema 定义mylib Library(mylib, FRAGMENT)mylib.define(my_op(Tensor x) - Tensor)定义算子 schemaIn-place 算子需在 schema 中显式标注 alias如Tensor(a!)Eager 实现impl(mylib, my_op, PrivateUse1)为 NPU 后端注册实际执行逻辑Meta 注册meta_lib Library(mylib, IMPL, Meta)impl(meta_lib, my_op)注册 Meta 推导函数用于torch.compile入图agent 使用流程收到纯 Pythontorch.library.Library算子需求 → 先确认 schema 和算子语义 → 再按define(...)、impl(..., PrivateUse1)、impl(..., Meta)三步生成对应骨架。【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考