算子上下文
图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_CAST(转化数据类型)输入输出描述
参数 |
维度 |
数据类型 |
格式 |
描述 |
x |
[dim_0,dim_1,...,dim_n] |
float16/float/int64/int32 |
ND |
被转换类型的输入。 |
out |
[dim_0,dim_1,...,dim_n] |
float16/float/int64/int32 |
ND |
被转换类型的输出。 |
ELEWISE_CAST可用于float16和float、int32和int64数据类型互相转化。
注:
Atlas 推理系列产品
仅支持float16和float互转。
ELEWISE_MULS(向量逐元素乘值)输入输出描述
参数 |
维度 |
数据类型 |
格式 |
描述 |
x |
[dim_0,dim_1,...,dim_n] |
float16/float/bf16 |
ND |
输入。 |
out |
[dim_0,dim_1,...,dim_n] |
与x一致 |
ND |
输出。数据类型与x保持一致。 |
ELEWISE_COS(逐元素计算余弦值)输入输出描述
参数 |
维度 |
数据类型 |
格式 |
描述 |
x |
[dim_0,dim_1,...,dim_n] |
float/float16 |
ND |
输入。 |
out |
[dim_0,dim_1,...,dim_n] |
与x一致 |
ND |
输出。数据类型与x保持一致。 |
ELEWISE_SIN(逐元素计算正弦值)输入输出描述
参数 |
维度 |
数据类型 |
格式 |
描述 |
x |
[dim_0,dim_1,...,dim_n] |
float/float16 |
ND |
输入。 |
out |
[dim_0,dim_1,...,dim_n] |
与x一致 |
ND |
输出。数据类型与x保持一致。 |
ELEWISE_NEG(逐元素取相反数)输入输出描述
参数 |
维度 |
数据类型 |
格式 |
描述 |
x |
[dim_0,dim_1,...,dim_n] |
float16 |
ND |
输入。 |
out |
[dim_0,dim_1,...,dim_n] |
float16 |
ND |
输出。 |
ELEWISE_QUANT(量化)输入输出描述
参数 |
维度 |
数据类型 |
格式 |
描述 |
x |
[dim_0,dim_1,...,dim_n] |
float16 |
ND |
输入。 |
out |
[dim_0,dim_1,...,dim_n] |
int8 |
ND |
输出。 |
x/out不支持
Atlas 推理系列产品
。 |
ELEWISE_LOGICAL_NOT(逐元素逻辑非)输入输出描述
参数 |
维度 |
数据类型 |
格式 |
描述 |
x |
[dim_0,dim_1,...,dim_n] |
int8 |
ND |
输入。 |
out |
[dim_0,dim_1,...,dim_n] |
int8 |
ND |
输出。 |
ELEWISE_ADD(逐元素相加)输入输出描述
参数 |
维度 |
数据类型 |
格式 |
描述 |
x |
[x_dim_0,x_dim_1,...,x_dim_n,y_dim_0,...,y_dim_n] |
float/float16/bf16 |
ND |
输入1。 |
y |
[y_dim_0,...,y_dim_n] |
与x一致 |
ND |
输入2。 |
out |
[x_dim_0,x_dim_1,...,x_dim_n,y_dim_0,...,y_dim_n] |
与x一致 |
ND |
输出;输出,输入1,输入2数据类型需保证一致。 |
ELEWISE_MUL(向量与向量逐元素相乘)输入输出描述
参数 |
维度 |
数据类型 |
格式 |
描述 |
x |
[x_dim_0,x_dim_1,...,x_dim_n,y_dim_0,...,y_dim_n] |
float16/bf16 |
ND |
输入1。 |
y |
[y_dim_0,...,y_dim_n] |
与x一致 |
ND |
输入2。 |
out |
[x_dim_0,x_dim_1,...,x_dim_n,y_dim_0,...,y_dim_n] |
与x一致 |
ND |
输出。输出、输入1和输入2数据类型需保证一致 |
ELEWISE_REALDIV(向量与向量逐元素相除)输入输出描述
参数 |
维度 |
数据类型 |
格式 |
描述 |
x |
[x_dim_0,x_dim_1,...,x_dim_n,y_dim_0,...,y_dim_n] |
float/float16 |
ND |
输入1。 |
y |
[y_dim_0,...,y_dim_n] |
与x一致 |
ND |
输入2。 |
out |
[x_dim_0,x_dim_1,...,x_dim_n,y_dim_0,...,y_dim_n] |
与x一致 |
ND |
输出。输出、输入1和输入2数据类型需保证一致。 |
ELEWISE_LOGICAL_AND(逐元素逻辑与)输入输出描述
参数 |
维度 |
数据类型 |
格式 |
描述 |
x |
[x_dim_0,x_dim_1,...,x_dim_n,y_dim_0,...,y_dim_n] |
int8 |
ND |
输入1。 |
y |
[y_dim_0,...,y_dim_n] |
int8 |
ND |
输入2。 |
out |
[x_dim_0,x_dim_1,...,x_dim_n,y_dim_0,...,y_dim_n] |
int8 |
ND |
输出。 |
ELEWISE_LOGICAL_OR(逐元素逻辑或)输入输出描述
参数 |
维度 |
数据类型 |
格式 |
描述 |
x |
[x_dim_0,x_dim_1,...,x_dim_n,y_dim_0,...,y_dim_n] |
int8 |
ND |
输入1。 |
y |
[y_dim_0,...,y_dim_n] |
int8 |
ND |
输入2。 |
out |
[x_dim_0,x_dim_1,...,x_dim_n,y_dim_0,...,y_dim_n] |
int8 |
ND |
输出。 |
ELEWISE_LESS(逐元素判断是否小于)输入输出描述
参数 |
维度 |
数据类型 |
格式 |
描述 |
x |
[x_dim_0,x_dim_1,...,x_dim_n,y_dim_0,...,y_dim_n] |
int64/float/float16 |
ND |
输入1。 |
y |
[y_dim_0,...,y_dim_n] |
与x一致 |
ND |
输入2。输入1、输入2数据类型需保证一致。 |
out |
[x_dim_0,x_dim_1,...,x_dim_n,y_dim_0,...,y_dim_n] |
int8 |
ND |
输出。 |
ELEWISE_GREATER(逐元素判断是否大于)输入输出描述
参数 |
维度 |
数据类型 |
格式 |
描述 |
x |
[x_dim_0,x_dim_1,...,x_dim_n,y_dim_0,...,y_dim_n] |
int64/float/float16 |
ND |
输入1。 |
y |
[y_dim_0,...,y_dim_n] |
与x一致 |
ND |
输入2。输入1、输入2数据类型需保证一致。 |
out |
[x_dim_0,x_dim_1,...,x_dim_n,y_dim_0,...,y_dim_n] |
int8 |
ND |
输出。 |
ELEWISE_SUB(逐元素相减)输入输出描述
参数 |
维度 |
数据类型 |
格式 |
描述 |
x |
[x_dim_0,x_dim_1,...,x_dim_n,y_dim_0,...,y_dim_n] |
float16/int64 |
ND |
输入1。 |
y |
[y_dim_0,...,y_dim_n] |
与x一致 |
ND |
输入2。输入1、输入2数据类型需保证一致。 |
out |
[x_dim_0,x_dim_1,...,x_dim_n,y_dim_0,...,y_dim_n] |
与x一致 |
ND |
输出。 |
ELEWISE_EQUAL(逐元素判断是否相等)输入输出描述
参数 |
维度 |
数据类型 |
格式 |
描述 |
x |
[x_dim_0,x_dim_1,...,x_dim_n,y_dim_0,...,y_dim_n] |
float/float16 |
ND |
输入1。 |
y |
[y_dim_0,...,y_dim_n] |
与x一致 |
ND |
输入2。输入1、输入2数据类型需保证一致。 |
out |
[x_dim_0,x_dim_1,...,x_dim_n,y_dim_0,...,y_dim_n] |
int8 |
ND |
输出。 |
ELEWISE_QUANT_PER_CHANNEL(每个通道量化)输入输出描述
参数 |
维度 |
数据类型 |
格式 |
描述 |
x |
[x_dim_0,x_dim_1,...,x_dim_n,dim_0,...,dim_n] |
float16/bf16 |
ND |
输入1。 |
scale |
[dim_0,...,dim_n] |
float16/bf16 |
ND |
输入2。scale中元素要求不为0。可以为标量。输入1,输入2数据类型需保证一致。 |
offset |
[dim_0,...,dim_n] |
int8/float |
ND |
输入3。可选,offset可以为空Tensor,可以为标量。 |
y |
[x_dim_0,x_dim_1,...,x_dim_n,dim_0,...,dim_n] |
int8 |
ND |
量化输出结果。 |
ELEWISE_DEQUANT_PER_CHANNEL(每个通道反量化)输入输出描述
参数 |
维度 |
数据类型 |
格式 |
描述 |
y |
[x_dim_0,x_dim_1,...,x_dim_n,dim_0,...,dim_n] |
int8 |
ND |
输入1。 |
scale |
[dim_0,...,dim_n] |
float16 |
ND |
输入2。可以为标量。 |
offset |
[dim_0,...,dim_n] |
int8 |
ND |
输入3。可选,offset可以为空Tensor,可以为标量。输入1,输入3数据类型需保证一致。 |
x |
[x_dim_0,x_dim_1,...,x_dim_n,dim_0,...,dim_n] |
float16 |
ND |
反量化输出结果。 |
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 训练系列产品
。