更新时间:2021-03-18 GMT+08:00
分享

说明

为了改善用户自定义算子的易用性,提高开发效率,我们对部分Vector算子进行了模块化封装。针对Element wise操作的接口,用户需要利用TVM原语来定义自己的输入Tensor(张量),然后调用封装的接口,简要描述下自定义算子的计算过程,然后再调用提供的Auto schedule和Build接口把自定义算子编译生成二进制可执行文件。

在Tensor Engine中提供了一组封装好的接口,目前主要涵盖向量运算,包括Element-wise类操作接口、Reduction 操作接口、Broadcast操作接口、Index操作接口、Concat操作接口、卷积接口、4D/5D互转接口、矩阵乘接口。

您可以在DDK包的安装目录下的“ddk/site-packages/te-0.4.0.egg/te/lang/cce/te_compute”“ddk/site-packages/te-0.4.0.egg/te/lang/cce/te_schedule”“ddk/site-packages/topi-0.4.0.egg/topi/generic”目录下查看接口的定义文件。如果通过引导安装的方式同时安装Mind Studio和DDK,您可以使用Mind Studio安装用户登录Mind Studio服务器,在“~/tools/che/ddk/ddk/site-packages”路径下的对应目录下查看接口定义文件。每个接口对应的定义文件请参见下文中具体的接口描述。关于如何使用这些接口进行自定义算子的开发以及代码的编译运行指导,请参见《TE自定义算子开发指导》

Element-wise类操作接口

对输入数据进行逐个元素对应运算的操作,这种操作的输出往往具有与输入相同的形状。

Reduction 操作接口

压缩某一维的数据,沿着指定方向将数据进行累加或累乘等操作,该操作输出比输入数据维度少一维的结果。

使用限制由于CCE计算平台的数据排布限制,reduction操作后的数据需要进行一次重排才能进行后续的操作。故当前在使用不同类型的接口时,暂时不能在reduction操作后进行任何向量运算操作。

Broadcast操作接口

Broadcast操作主要是用于处理两个不同形状的tensor进行计算,将低维度的一个操作数按照高维度操作数的维度进行广播,使得两个操作数的维度相同后,再进行element-wise计算。

把较小的tensor广播为较大的tensor,详细请参见te.lang.cce.broadcast(var, shape, output_dtype=None)

Index操作接口

Index操作,对Tensor进行分段计算,比如求和、均值、内积、最大值、最小值等。

Concat操作接口

Concat操作是沿着某个轴对多个输入的Tensor进行连接。

沿一个轴连接Tensor,详细请参见te.lang.cce.concat(raw_tensors, axis)

卷积接口

卷积接口是用来实现卷积算子的接口。

实现卷积,详细请参见te.lang.cce.conv(*args)

4D/5D互转接口

4D维度NCHW与5D维度NC1HWC0互转接口。

矩阵乘接口

矩阵乘接口是用来实现矩阵相乘的接口。

详细请参见te.lang.cce.matmul(tensor_a, tensor_b, trans_a=False, trans_b=False, alpha_num=1.0, beta_num=0.0, tensor_c=None)

融合算子接口

TE算子融合功能需要对单算子的融合能力和入参等信息做预处理,因此在生成单算子时需要调用指定API生成单算子的*.so文件和*.json文件。

详细请参见bool BuildTeCustomOp(std::string ddkVer, std::string opName, std::string opPath, std::string opFuncName, const char *format, ...)

分享:

    相关文档

    相关产品