昇腾社区首页
中文
注册

LinearOperation

功能

将A、B两个矩阵进行矩阵乘运算,同时可以选择对矩阵乘的运算结果添加偏置或进行反量化操作。

算子本质上是接收x和weight两个输入tensor作为A矩阵和B矩阵进行矩阵乘运算,可通过参数“transposeA”“transposeB”控制做矩阵乘前是否需要对A矩阵和B矩阵进行行列转置,根据参数转置后的A矩阵和B矩阵需满足矩阵乘维度关系,即A矩阵最后一维与B矩阵第0维相等。

该算子分为浮点和量化两类,可通过输出数据类型进行选择。

图1 LinearOperation

约束

Atlas 推理系列产品中, 不支持bf16数据类型的计算,即输入和输出张量的数据类型均不支持bf16。

定义

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 推理系列产品中,量化情况下,transposeA必须为false。

transposeB

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

Atlas 推理系列产品中,量化情况下,transposeB必须为true。

hasBias

是否叠加偏置。

Atlas 推理系列产品中,量化情况下,hasBias必须为true。

outDataType

输出数据类型。

  • 若为浮点linear,参数outDataType配置为ACL_DT_UNDEFINED,表示输出tensor的数据类型与输入tensor一致。
  • 若为量化linear,输出tensor的数据类型与输入tensor不一致,则参数outDataType配置为用户预期输出tensor的数据类型, 目前仅支持ACL_FLOAT16/ACL_BF16,在Atlas 推理系列产品中,不支持ACL_BF16。

输入

参数

维度

数据类型

格式

描述

x

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

  • 浮点: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且为四维时:

  • 浮点:n和k的值均为16的倍数。
  • 量化:k为16的整数倍,n为32的整数倍。

数据类型需与x一致。

bias

[1, n] 或 [n]

  • 浮点:float16/bfloat16
  • 量化:int32

ND

叠加的偏置矩阵,hasBias为true时输入。浮点时数据结构与x一致。

deqScale

[1, n] 或 [n]

  • 量化输出为float16时:uint64/int64
  • 量化输出为bfloat16时:float

ND

反量化的Scale。量化时输入。

输出

参数

维度

数据类型

格式

描述

output

[batch, m, n] 或 [m ,n]

float16/bfloat16

ND

输出Tensor。维度数与x一致。

  • 若为浮点,数据类型与x一致。
  • 若为量化,数据类型与参数outDataType一致。