LinearOperation

功能

Linear计算功能。

图1 LinearOperation

约束

输入x / weight矩阵维度,通过transposeA / transposeB配置要满足矩阵乘的维度关系。

定义

// matmul+add
struct LinearParam {
    bool transposeA = false;                    // 是否转置A矩阵
    bool transposeB = true;                     // 是否转置B矩阵
    bool hasBias = true;                        // 是否叠加偏置
    aclDataType outDataType = ACL_DT_UNDEFINED; // 输出数据类型
};

成员

成员名称

描述

transposeA

是否转置A矩阵,默认不转置。

当输入x的维度为3时,transposeA必须为false。

Atlas 推理系列产品(Ascend 310P AI处理器)中,量化情况下,transposeA必须为false。

transposeB

是否转置B矩阵,默认转置。

Atlas 推理系列产品(Ascend 310P AI处理器)中,量化情况下,transposeB必须为true。

hasBias

是否叠加偏置。

outDataType

输出数据类型。默认为ACL_DT_UNDEFINED,表示输出数据类型与输入一致。

输入

参数

维度

数据类型

格式

描述

x

[batch, m, k] 或 [m,k]

当y为ND或NZ格式时,支持以下维度输入:

  1. x:

    weight: [k, n]

  2. x:

    weight: [k, n]

当y为NZ格式时,额外支持以下维度输入:

  1. x: [m, k]

    weight: [1, n/16, k, 16]

  2. x: [batch, m, k]

    weight: [1, n/16, k, 16]

float16/bfloat16/int8

ND

矩阵乘A矩阵。

weight

格式为ND时:[k, n]

格式为NZ时:

额外支持 [1, n/16, k, 16](浮点)或 [1, n/32, k, 32](量化)

float16/bfloat16/int8

ND/NZ

矩阵乘B矩阵。格式为NZ且为四维输入时,倒数第二维为16(浮点)/32(量化)的整数倍。

bias

[1, n] / [n]

float16/bfloat16/int32

ND

当hasBias = true时才输入。

当linearType为0时,数据类型为float16;

当linearType为1时,数据类型为bfloat16;

当linearType为2或3时,数据类型为int32;

deqScale

[1, n] / [n]

uint64/int64

ND

反量化的Scale。量化时输入

输出

参数

维度

数据类型

格式

output

[batch, m, n] 或 [m ,n](与x对应)

float16/bfloat16

ND