算子调用流程

固定shape场景下,通过AscendCL接口进行单算子调用的流程如下所示:

图1 固定Shape算子调用流程

主要过程为:

  1. 用户进行算子实现,包括如下交付件:
    • 算子代码实现文件(.py)
    • 算子原型定义
    • 算子信息库定义
    • 算子适配插件
  2. 通过ATC工具编译生成单算子模型文件(指定shape大小)。
  3. 用户App通过AscendCL接口加载和执行单算子模型文件,完成单算子调用。

动态shape场景下,提供如下方案进行算子调用:

图2 动态shape算子调用流程

主要过程为:

  1. 进行算子实现。

    交付件仅包括算子代码实现文件(.py),不需要包括算子原型定义、算子信息库定义等算子交付件。

    这里为了提高算子性能,用户可以针对不同的shape范围,制定不同的Tiling策略,从而形成多个算子实现文件(例如图中的op0.py、op1.py、op2.py)。

  2. 直接将算子实现文件编译成二进制文件(.o)。
  3. 由于上述步骤针对不同的shape范围生成的不同的.o文件,因此需要自定义算子选择器,主要功能是在算子执行时针对传入的shape,选择使用哪一种Tiling策略。
  4. 用户App通过AscendCL接口,根据算子选择器选择的Tiling策略执行对应的算子二进制文件,完成单算子调用。