概述
加速库中定义了三种算子,即单算子(Operation)、图算子(GraphOperation)和自定义插件算子(PluginOperation)。
- 单算子(Operation)为一系列基础算子,提供了如矩阵乘、转置等功能。详细信息请参考atb/infer_op_params.h和atb/train_op_params.h。
- 图算子(GraphOperation)本质是多个单算子的组合,其作用是简化重复调用多个算子的步骤,加速库内部针对图算子进行了性能和内存优化,建议多个算子组合时优先使用图算子。
用户需要自行设计并定义图的结构,即图结构中节点(Node)的组合与依赖关系,包括节点对应的单算子、节点的输入tensor与输出tensor,并识别这些Tensor为图的输入tensor、输出tensor和中间tensor。图输入tensor为用户使用图算子时需要从外部输入的所有Tensor。图输出tensor为用户使用图算子时不会再进行下一步运算操作的所有Tensor。图中间tensor为图算子运算中产生的临时tensor,该tensor即不为图的输入,也不为图的输出。
如图1所示,该示例图算子由两个节点组成,这两个节点均为Elewise_Add算子。a、b、c为图算子的三个输入tensor,output为图算子的输出tensor,a_add_b_output为图算子的中间tensor。其中,节点0的输入为a和b,输出为a_add_b_output,节点1的输入为a_add_b_output和c,输出为output。
- 自定义插件算子(PluginOperation)是一种为用户实现特定功能提供的机制。如果一些功能通过单算子或图算子无法实现,用户可以通过开发自定义插件算子实现对应的功能。
这三种算子继承自同一个父类Operation,在使用时除了构造算子的操作步骤有所区别,其他步骤都基本一致。
父主题: 加速库使用指导