固定shape场景下,通过AscendCL接口进行单算子调用的流程如下所示:
图1 固定Shape算子调用流程
主要过程为:
- 用户进行算子实现,包括如下交付件:
- 算子代码实现文件(.py)
- 算子原型定义
- 算子信息库定义
- 算子适配插件
- 通过ATC工具编译生成单算子模型文件(指定shape大小)。
- 用户App通过AscendCL接口加载和执行单算子模型文件,完成单算子调用。
动态shape场景下,提供如下方案进行算子调用:
图2 动态shape算子调用流程
主要过程为:
- 进行算子实现。
交付件仅包括算子代码实现文件(.py),不需要包括算子原型定义、算子信息库定义等算子交付件。
这里为了提高算子性能,用户可以针对不同的shape范围,制定不同的Tiling策略,从而形成多个算子实现文件(例如图中的op0.py、op1.py、op2.py)。
- 直接将算子实现文件编译成二进制文件(.o)。
- 由于上述步骤针对不同的shape范围生成的不同的.o文件,因此需要自定义算子选择器,主要功能是在算子执行时针对传入的shape,选择使用哪一种Tiling策略。
- 用户App通过AscendCL接口,根据算子选择器选择的Tiling策略执行对应的算子二进制文件,完成单算子调用。