基于C++ extensions方式,通过torch_npu框架调用AscendC自定义算子的完整适配开发流程。本样例展示了如何将AscendC算子集成到PyTorch生态中,实现高效的NPU加速计算。
在开始之前,请确保您已完成以下环境的安装。
[object Object]
[object Object]
以下步骤均以add算子为例。
- 在算子适配层C++代码目录(csrc)中的*.asc文件(如add_custom.asc)完成C++侧算子代码、适配代码、注册自定义算子schema及绑定具体实现。在add_custom.asc中定义了一个名为cpp_extension_acs的命名空间,并在其中注册了ascendc_add函数。在ascendc_add函数中通过
[object Object]函数获取当前NPU上的流,并通过内核调用符<<<>>>调用自定义的Kernel函数add_custom,在NPU上执行算子。PyTorch提供TORCH_LIBRARY宏来定义新的命名空间,并在该命名空间里注册schema。注意命名空间的名字必须是唯一的。具体示例如下:
[object Object]
在
[object Object]目录下的[object Object]及[object Object]文件中,添加ops调用及读取so文件,具体示例如下:[object Object]
完成了算子适配开发后,即可实现C++ extensions的方式调用自定义算子。
下载示例代码。
[object Object]执行如下命令,完成编译、安装,并运行测试脚本。
[object Object]得到结果如下即为执行成功。
[object Object]
算子功能:
Add算子实现了两个数据相加,返回相加结果的功能。对应的算子原型为:
[object Object]算子规格:
[object Object]
算子功能:
该算子入参为x, out_sin ,out_cos, 算子调用后,out_sin会被原地修改为sin(x)计算结果,out_cos会被原地修改为cos(x)计算结果,返回值tan(x)计算结果。对应的算子原型为:
[object Object]算子规格:
[object Object]