下载
中文
注册

ElewiseOperation

功能

常用的逐元素数值计算集合。

算子上下文

图1 ElewiseOperation算子上下文

定义

struct ElewiseParam {
    enum ElewiseType: int {
        ELEWISE_UNDEFINED = 0,
        ELEWISE_CAST,
        ELEWISE_MULS,
        ELEWISE_COS,
        ELEWISE_SIN,
        ELEWISE_NEG,
        ELEWISE_QUANT,
        ELEWISE_LOGICAL_NOT,
        ELEWISE_ADD,
        ELEWISE_MUL,
        ELEWISE_REALDIV,
        ELEWISE_LOGICAL_AND,
        ELEWISE_LOGICAL_OR,
        ELEWISE_LESS,
        ELEWISE_GREATER,
        ELEWISE_SUB,
        ELEWISE_EQUAL,
        ELEWISE_QUANT_PER_CHANNEL,
        ELEWISE_DEQUANT_PER_CHANNEL,
        ELEWISE_DYNAMIC_QUANT,
        ELEWISE_TANH
    };
 
    struct QuantParam {
        float inputScale = 1.0f;
        bool asymmetric = false;
        int inputOffset = 0;
    };
 
    struct MulsParam {
        float varAttr = 0.0f;
    };
 
    ElewiseType elewiseType = ELEWISE_UNDEFINED;
    QuantParam quantParam;
    MulsParam mulsParam;

    aclDataType outTensorType = ACL_DT_UNDEFINED;
};

参数列表

成员名称

类型

默认值

描述

elewiseType

ElewiseType

ELEWISE_UNDEFINED

计算类型。

  • ELEWISE_UNDEFINED:默认值,未定义。
  • ELEWISE_CAST:数据类型转换。
  • ELEWISE_MULS:向量逐元素乘值。
  • ELEWISE_COS:逐元素计算余弦值。
  • ELEWISE_SIN:逐元素计算正弦值。
  • ELEWISE_NEG:逐元素取相反数。
  • ELEWISE_QUANT:量化,仅在 Atlas 800I A2 推理产品 / Atlas A2 训练系列产品 上支持。
  • ELEWISE_LOGICAL_NOT:逐元素逻辑非。
  • ELEWISE_ADD:逐元素相加。
  • ELEWISE_MUL:向量与向量逐元素相乘。
  • ELEWISE_REALDIV:向量与向量逐元素相除。
  • ELEWISE_LOGICAL_AND:逐元素逻辑与。
  • ELEWISE_LOGICAL_OR:逐元素逻辑或。
  • ELEWISE_LESS:逐元素判断是否小于。
  • ELEWISE_GREATER:逐元素判断是否大于。
  • ELEWISE_SUB:逐元素相减。
  • ELEWISE_EQUAL:逐元素判断是否相等。
  • ELEWISE_QUANT_PER_CHANNEL:每个通道量化。
  • ELEWISE_DEQUANT_PER_CHANNEL:每个通道反量化。
  • ELEWISE_DYNAMIC_QUANT:逐行动态量化。
  • ELEWISE_TANH:逐元素计算双曲正切值。

quantParam

struct

-

量化参数,具体请参见表1

mulsParam

struct

-

乘值参数,具体请参见表2

outTensorType

aclDataType

ACL_DT_UNDEFINED

指定数据类型转换输出的数据类型。

表1 QuantParam成员

成员名称

类型

默认值

描述

inputScale

float

1.0f

量化的步长。

asymmetric

bool

false

动态量化的是否为非对称量化。

  • false:symmetric,对称量化。
  • true:asymmetric,非对称量化。

inputOffset

int

0

量化的偏移度。

表2 MulsParam成员

成员名称

类型

默认值

描述

varAttr

float

0.0f

向量乘的值。

ELEWISE_DYNAMIC_QUANT(逐行动态量化)输入输出描述

参数

维度

数据类型

格式

描述

x

[dim_0,dim_1,...,dim_n]

float16

ND

输入tensor,n>1。

最后一维H小于等于24576。

若为 Atlas 推理系列产品 ,最后一维H小于或等于4096,并为32的倍数。

z

[dim_0,dim_1,...,dim_n]

int8

ND

量化输出结果。

scale

[dim_0,...,dim_n-1]

float

ND

反量化所需的scale。

offset

[dim_0,...,dim_n-1]

float

ND

反量化所需的offset,在“asymmetric”“true”时才返回。当前不支持asymmetric为true的场景。

ELEWISE_TANH(逐元素计算双曲正切值)输入输出描述

参数

维度

数据类型

格式

描述

x

[dim_0,...,dim_n]

float16

ND

输入。

out

[dim_0,...,dim_n]

float16

ND

输出。

规格约束

  • ELEWISE_ADD、ELEWISE_MUL、ELEWISE_REALDIV、ELEWISE_SUB计算类型将会对输入进行广播后再进行指定操作。
  • 输入x、y对应维度的对应值要求相同或至少其中一个为1。
  • ElewiseDeQuantPerChannel 只支持 Atlas 800I A2 推理产品 / Atlas A2 训练系列产品