下载
中文
注册

自定义算子入图

当开发者在执行PyTorch/TensorFlow网络或者基于算子原型构造Ascend Graph时,如果遇到了“算子加速库”中不支持的算子,需要开发者先开发自定义算子,再将自定义算子入图。

本章节给出这几种场景下自定义算子开发及入图的整体流程。

PyTorch网络自定义算子开发

自定义Ascend C算子并将其入PyTorch图执行的开发流程如下图所示:

  1. 自定义算子开发。
    自定义算子入图前,首先需要基于Ascend C完成自定义算子的开发,包括如下几个步骤。
    1. 创建算子工程,并完成算子的原型定义、Kernel侧算子实现与Host侧Tiling实现。
    2. 实现shape推导与data type推导函数,从而将算子支持入GE图。
    3. 算子工程编译部署,编译生成自定义算子安装包并进行算子包的安装,将自定义算子部署到算子加速库。

    上述流程的详细描述可参见Ascend C自定义算子开发指南中的算子入图(GE图)开发

  2. PyTorch侧适配。
    自定义算子开发后,需要在PyTorch侧进行适配,以实现自定义算子入图,包括如下操作:
    1. 自定义算子在PyTorch框架中注册。
    2. 在torch_npu中注册meta函数,以支持入图时的shape与dtype推导。
    3. 生成GE构图函数。
    4. 向TorchAir注册自定义算子converter,完成PyTorch IR到CANN软件图GE IR转化。

    详细的自定义算子入PyTorch图的方法请参见TorchAir仓中“贡献 > converter补齐 > 新增自定义算子入图注册”章节。

Ascend Graph构图

自定义Ascend C算子并将其入Ascend Graph执行的开发流程如下图所示:

  1. 自定义算子开发。
    自定义算子入图前,首先需要基于Ascend C完成自定义算子的开发,包括如下几个步骤。
    1. 创建算子工程,并完成算子的原型定义、Kernel侧算子实现与Host侧Tiling实现。
    2. 实现shape推导与data type推导函数,从而将算子支持图模式调用。
    3. 算子工程编译部署,编译生成自定义算子安装包并进行算子包的安装,将自定义算子部署到算子加速库。

    上述流程的详细描述可参见Ascend C自定义算子开发指南中的算子入图(GE图)开发

  1. Ascend Graph构图。

    基于自定义算子构造Ascend Graph图的方式与其他CANN内置算子相同,通过算子原型调用即可,典型流程可参见Ascend Graph构图