昇腾社区首页
中文
注册

TBE算子开发方式

昇腾AI软件栈提供了TBE(Tensor Boost Engine:张量加速引擎)算子开发框架,开发者可以基于此框架使用Python语言开发自定义算子,通过TBE进行算子开发有以下几种方式:

  • DSL(Domain-Specific Language)开发

    为了方便开发者进行自定义算子开发,TBE DSL接口已高度封装,开发者仅需要使用DSL接口完成计算过程的表达,后续的Schedule创建、优化及编译都可通过已有接口一键式完成,适合初级开发者。DSL开发的算子性能可能较低。

  • TIK(Tensor Iterator Kernel)开发

    TIK(Tensor Iterator Kernel)是一种基于Python语言的动态编程框架,呈现为一个Python模块。开发者可以通过调用TIK提供的API基于Python语言编写自定义算子,即TIK DSL,然后TIK编译器会将TIK DSL编译为昇腾AI处理器应用程序的二进制文件。

    基于TIK的自定义算子开发,提供了对Buffer的管理和数据自动同步机制,但需要开发者手动计算数据的分片和索引,需要开发者对AI Core架构有一定的了解,入门难度更高。TIK对矩阵的操作更加灵活,性能会更优。

整个计算过程可以表现为多个输入张量经过一个计算节点得到多个张量的过程。TIK方式、DSL的开发流程本质上是一样的,只不过开发的抽象层次不一样而已。

表1 算子开发方式对比

参数

DSL方式

TIK方式

语言

Python

Python

运用场景

常用于各种算术逻辑简单向量运算,或内置支持的矩阵运算及池化运算,例如eltwise类操作。

适用各类算子的开发,对于无法通过lambda表达描述的复杂计算场景也有很好的支持,例如排序类操作。

入门难度

较低

较高

适用人群

入门开发者,需要了解NN、TBE DSL相关知识。

高级开发者,需要了解NN,昇腾AI处理器架构、TIK指令、数据搬运等相关知识。

特点

TBE DSL接口已高度封装,开发者仅需要使用DSL接口完成计算过程的表达,后续的Schedule创建、优化及编译都可通过已有接口一键式完成。

入门难度高,程序员直接使用TIK提供的API完成计算过程及Schedule过程,需要手工控制数据搬运的参数和Schedule。

开发者无需关注Buffer地址的分配及数据同步处理,由TIK工具进行管理。

不足

某些场景下性能可能较低,复杂算子逻辑无法支持表达。

TIK对数据的操作更加灵活,但需要手工控制数据搬运的参数和Schedule过程。

代码编写接近底层硬件架构,过程优化等基于特定硬件特性。