开发者
资源
[object Object]

基于C++ extensions方式,通过torch_npu框架调用AscendC自定义算子的完整适配开发流程。本样例展示了如何将AscendC算子集成到PyTorch生态中,实现高效的NPU加速计算。

[object Object][object Object]

在开始之前,请确保您已完成以下环境的安装。

  1. 请参考《》安装昇腾NPU驱动和CANN软件(包含Toolkit、ops和NNAL包),并配置环境变量。
  2. 请参考《》完成PyTorch框架的安装。
[object Object]
[object Object]
[object Object]
[object Object]

以下步骤均以add算子为例。

  1. 在算子适配层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]
  1. [object Object]目录下的[object Object][object Object]文件中,添加ops调用及读取so文件,具体示例如下:

    [object Object]
[object Object]

完成了算子适配开发后,即可实现C++ extensions的方式调用自定义算子。

  1. 完成自定义算子工程创建、算子开发及编译部署流程,具体可参考《》。

  2. 下载示例代码。

    [object Object]
  3. 完成算子适配,具体可参考

  4. 执行如下命令,完成编译、安装,并运行测试脚本。

    [object Object]

    得到结果如下即为执行成功。

    [object Object]
[object Object][object Object]
  • 算子功能:

    Add算子实现了两个数据相加,返回相加结果的功能。对应的算子原型为:

    [object Object]
  • 算子规格:

    [object Object]
[object Object]
  • 算子功能:

    该算子入参为x, out_sin ,out_cos, 算子调用后,out_sin会被原地修改为sin(x)计算结果,out_cos会被原地修改为cos(x)计算结果,返回值tan(x)计算结果。对应的算子原型为:

    [object Object]
  • 算子规格:

    [object Object]