文件最后提交记录最后更新时间
[fix] npu_cpp_extension build fix Co-authored-by: zqwenn<zhangqiongwen@huawei.com> # message auto-generated for no-merge-commit merge: !4304 merge master_cpp_extention_3_update into master [fix] npu_cpp_extension build fix Created-by: zqwenn Commit-by: zqwenn Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [x] 需求 - [ ] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 修复需求编包的问题 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [ ] 代码注释完备,正确记录错误日志 - [ ] 代码实现进行了返回值、空指针等校验 - [ ] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/op-plugin!43043 个月前
[feat][3/N]cpp extension support Co-authored-by: zhangqiongwen<zhangqiongwen@huawei.com> # message auto-generated for no-merge-commit merge: !4274 merge master_cpp_extention_3 into master [feat][3/N]cpp extension support Created-by: zqwenn Commit-by: zhangqiongwen Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [x] 需求 - [ ] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 1、新增add样例 2、原代码修复:cache_params改为引用传递、新增OpApiTaskQueueEnable函数 特性其余待合入/修复内容: 1、NPU_CHECK_ERROR宏 2、hit_cache_ext缓存命中bug # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 涉及样例readme # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 新增OpApiTaskQueueEnable函数 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 ![Snipaste_2026-02-14_15-36-40.png](https://raw.gitcode.com/user-images/assets/7403085/51804c48-3017-412c-a8c3-487dc680910f/Snipaste_2026-02-14_15-36-40.png 'Snipaste_2026-02-14_15-36-40.png') # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/op-plugin!42743 个月前
[feat][3/N]cpp extension support Co-authored-by: zhangqiongwen<zhangqiongwen@huawei.com> # message auto-generated for no-merge-commit merge: !4274 merge master_cpp_extention_3 into master [feat][3/N]cpp extension support Created-by: zqwenn Commit-by: zhangqiongwen Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [x] 需求 - [ ] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 1、新增add样例 2、原代码修复:cache_params改为引用传递、新增OpApiTaskQueueEnable函数 特性其余待合入/修复内容: 1、NPU_CHECK_ERROR宏 2、hit_cache_ext缓存命中bug # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 涉及样例readme # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 新增OpApiTaskQueueEnable函数 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 ![Snipaste_2026-02-14_15-36-40.png](https://raw.gitcode.com/user-images/assets/7403085/51804c48-3017-412c-a8c3-487dc680910f/Snipaste_2026-02-14_15-36-40.png 'Snipaste_2026-02-14_15-36-40.png') # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/op-plugin!42743 个月前
modify document Co-authored-by: molly123321<malei54@h-partners.com> # message auto-generated for no-merge-commit merge: !4896 merge master into master modify document Created-by: molly123321 Commit-by: molly123321 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [x] 资料更新 # 【修改方案】 doc ci工具扫描问题清理 CANN安装语言风格统一、主干跳转链接修改至最新CANN版本 # 【资料变更】 修改格式和跳转问题 CANN安装语言风格统一、主干跳转链接修改至最新CANN版本 # 【接口变更】 “不涉及” # 【功能验证】 不涉及 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/op-plugin!489626 天前
[feat][3/N]cpp extension support Co-authored-by: zhangqiongwen<zhangqiongwen@huawei.com> # message auto-generated for no-merge-commit merge: !4274 merge master_cpp_extention_3 into master [feat][3/N]cpp extension support Created-by: zqwenn Commit-by: zhangqiongwen Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [x] 需求 - [ ] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 1、新增add样例 2、原代码修复:cache_params改为引用传递、新增OpApiTaskQueueEnable函数 特性其余待合入/修复内容: 1、NPU_CHECK_ERROR宏 2、hit_cache_ext缓存命中bug # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 涉及样例readme # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 新增OpApiTaskQueueEnable函数 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 ![Snipaste_2026-02-14_15-36-40.png](https://raw.gitcode.com/user-images/assets/7403085/51804c48-3017-412c-a8c3-487dc680910f/Snipaste_2026-02-14_15-36-40.png 'Snipaste_2026-02-14_15-36-40.png') # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/op-plugin!42743 个月前
[fix] npu_cpp_extension build fix Co-authored-by: zqwenn<zhangqiongwen@huawei.com> # message auto-generated for no-merge-commit merge: !4304 merge master_cpp_extention_3_update into master [fix] npu_cpp_extension build fix Created-by: zqwenn Commit-by: zqwenn Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [x] 需求 - [ ] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 修复需求编包的问题 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [ ] 代码注释完备,正确记录错误日志 - [ ] 代码实现进行了返回值、空指针等校验 - [ ] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/op-plugin!43043 个月前
README.md

适配开发及调用

概述

本样例展示了自定义算子通过torch原生提供的cppextension方式注册eager模式与torch.compile模式的注册样例,eager模式与torch.compile模式的介绍参考:Link

目录结构介绍

├── build_and_run.sh                // 自定义算子wheel包编译安装并执行用例的脚本
├── csrc                            // 算子适配层c++代码目录
│   ├── add_custom.cpp              // 自定义算子正反向适配代码以及绑定
│   ├── function.h                  // 正反向接口头文件
│   ├── pytorch_npu_helper.hpp      // 自定义算子调用和下发框架
│   └── registration.cpp            // 自定义算子aten ir注册文件
├── custom_ops                      // 自定义算子包python侧代码
│   ├── add_custom.py               // 提供自定义算子python调用接口
│   └── __init__.py                 // python初始化文件
├── setup.py                        // wheel包编译文件
└── test                            // 测试用例目录
    ├── test_add_custom_graph.py    // 执行torch.compile模式下用例脚本
    └── test_add_custom.py          // 执行eager模式下算子用例脚本

样例脚本build_and_run.sh关键步骤解析

  • 编译适配层代码并生成wheel包

    python3 setup.py build bdist_wheel
    
  • 安装编译生成的wheel包

    cd ${BASE_DIR}
    pip3 install dist/*.whl
    

自定义算子入图关键步骤解析

可以在test_add_custom_graph.py文件查看相关注册实现。

  • 根据Ascend C工程产生的REG_OP算子原型填充torchair.ge.custom_op的参数。

    AddCustom的REG_OP原型为:

    REG_OP(AddCustom)
        .INPUT(x, ge::TensorType::ALL())
        .INPUT(y, ge::TensorType::ALL())
        .OUTPUT(z, ge::TensorType::ALL())
        .OP_END_FACTORY_REG(AddCustom);
    
  • 注册自定义算子converter

    from torchair import register_fx_node_ge_converter
    from torchair.ge import Tensor
    @register_fx_node_ge_converter(torch.ops.myops.add_custom.default)
    def convert_npu_add_custom(x: Tensor, y: Tensor, z: Tensor = None, meta_outputs: Any = None):
        return torchair.ge.custom_op(
            "AddCustom",
            inputs={"x": x, "y": y,},
            outputs=['z']
        )
    

运行样例算子

该样例脚本基于Pytorch2.1、python3.9 运行

1.编译算子工程

运行此样例前,请参考编译算子工程完成前期准备。

2.pytorch调用的方式调用样例运行

  • 进入到样例目录

    以命令行方式下载样例代码,master分支为例。

    cd ${git_clone_path}/samples/operator/ascendc/0_introduction/1_add_frameworklaunch/CppExtensionInvocation
    
  • 样例执行

    样例执行过程中会自动生成测试数据,然后运行pytorch样例,最后检验运行结果。具体过程可参见build_and_run.sh脚本。

    bash build_and_run.sh
    

其他样例运行说明

  • 环境安装完成后,样例支持单独执行:eager模式与compile模式的测试用例

    • 执行pytorch eager模式的自定义算子测试文件

      python3 test_add_custom.py
      
    • 执行pytorch torch.compile模式的自定义算子测试文件

      python3 test_add_custom_graph.py
      

其他说明

更加详细的Pytorch适配算子开发指导可以参考[LINK](https://gitee.com/ascend/op-plugin/wikis)中的“算子适配开发指南”。

更新说明

时间 更新事项
2025/01/17 新增本readme