适配说明

概述

C++ extensions插件提供了将自定义算子映射到昇腾AI处理器的功能,为使用PyTorch框架的开发者提供了便捷的NPU算子库调用能力,基于PyTorch原生提供的自定义算子扩展功能,用户可以编译安装自定义算子wheel包并运行。本章节基于C++ extensions的方式介绍如何在昇腾NPU上完成自定义算子开发和适配。PyTorch官方的C++ extensions功能具体可参考C++ extensions官方文档

适配样例目录

此目录下展示了C++ extensions构建自定义算子库的所有样例。

├── cpp_extension_base                 // 基础样例
├── cpp_extension_full                 // 完整样例
│   ├── module                         // 前反向绑定通过python实现
│   └── torch_library_impl             // 前反向绑定通过c++实现
├── cpp_extension_structured           // 结构化适配实现
├── cpp_extension_asc                  // 算子通过AscendC实现
└── cpp_extension_pybind               // 通过pybind绑定对外接口

适配方法

提供了六种适配样例以供用户选择,用户可根据需要选择对应适配方法。

适配方法 使用场景 功能范围 更多信息
cpp_extension_base(基础样例) 基础功能 算子定义、算子适配、ATen IR注册绑定 具体操作请参考基础调用适配样例
cpp_extension_full(完整样例-module) 完整功能 算子定义、算子适配、ATen IR注册绑定、meta注册、前反向绑定等 前反向绑定通过Python类的forwardbackward注册实现
具体操作请参考完整调用适配样例
cpp_extension_full(完整样例-TORCH_LIBRARY_IMPL 完整功能 算子定义、算子适配、ATen IR注册绑定、meta注册、前反向绑定等 前反向绑定通过TORCH_LIBRARY_IMPL注册实现
具体操作请参考完整调用适配样例
cpp_extension_structured(结构化) 结构化适配 算子定义、算子适配、ATen IR注册绑定 通过配置yaml自动完成适配,具体操作请参考结构化适配样例
cpp_extension_asc(AscendC) 自定义算子 算子定义、算子适配、ATen IR注册绑定 算子使用AscendC编写,具体操作请参考AscendC算子适配样例
cpp_extension_pybind(pybind) 灵活接口 算子定义、算子适配、Pybind绑定 具体操作请参考pybind绑定适配样例

Note

cpp_extension_structured(结构化实现)使用前提:opapi对应的aclnn与ATen IR语义一致,适配层除申请output tensor外无其他逻辑。