---
title: LinearSparseOperation
description: "| 硬件型号 | 是否支持 |"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/ascendtb/ascendtb_01_0064.html
sourcePath: /source/zh/canncommercial/900/API/ascendtb/ascendtb_01_0064.html
indexId: 0580a52c52acff25c73a9baaf2ea7b502949ac9ef54a41de6c0684e27d94a38764
---
# LinearSparseOperation

#### 产品支持情况

| 硬件型号 | 是否支持 |
| --- | --- |
| Atlas 350 加速卡 | x |
| Atlas A3 推理系列产品 / Atlas A3 训练系列产品 | x |
| Atlas A2 训练系列产品 / Atlas A2 推理系列产品 | x |
| Atlas 训练系列产品 | x |
| Atlas 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | x |


#### 功能说明

稀疏量化Linear。

该算子实现功能与量化Linear类似。不同点在于稀疏量化算子会使用压缩工具提前对weight输入进行压缩，以此提升算子性能。参数tilingK和tilingN由压缩算法决定，目前均只支持取值为8。


#### 定义

```
struct LinearSparseParam{
    bool transposeA = false;
    bool transposeB = true;
    uint32_t tilingK =8;
    uint32_t tilingN = 8;
    uint8_t rsv[12] = {0};
};
```


#### 参数列表

| 成员名称 | 类型 | 默认值 | 描述 |
| --- | --- | --- | --- |
| transposeA | bool | false | 是否转置A矩阵。在量化场景下，非 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 和 Atlas A3 推理系列产品 / Atlas A3 训练系列产品 仅支持配置为false。 |
| transposeB | bool | true | 是否转置B矩阵。在反量化场景下，非 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 和 Atlas A3 推理系列产品 / Atlas A3 训练系列产品 仅支持配置为true。 |
| tilingK | uint32\_t | 8 | 压缩参数，由外部压缩算法决定，目前仅支持取值为8。 |
| tilingN | uint32\_t | 8 | 压缩参数，由外部压缩算法决定，目前仅支持取值为8。 |
| rsv[12] | uint8\_t | {0} | 预留参数。 |


#### 输入

| 参数 | 维度 | 数据类型 | 格式 | 描述 |
| --- | --- | --- | --- | --- |
| x | [m, k] | int8 | ND | 矩阵乘运算的A矩阵。 m需小于等于256，k为64的整数倍且大于256。 |
| weight | [c] | int8 | ND/NZ | 权重，矩阵乘的B矩阵。 通过压缩工具压缩后的权重，shape大小c的值大于0且不大于k \* n。 |
| bias | [1, n] 或 [n] | int32 | ND | 叠加的偏置矩阵。n为64的整数倍且大于等于128。 |
| deqScale | [1, n] 或 [n] | uint64/int64 | ND | 反量化的scale。量化时输入。 |
| compressIdx | [x] | int8 | ND | 压缩权重时同时生成的压缩索引，x由以下计算得出。 x = k\_index \* n\_index \* 8 k\_index = ceil(k1 / tilingK) n\_index = ceil(n1 / tilingN) k1 = k / 32 n1 = n / 16 其中，ceil()函数为向上取整。 |


#### 输出

| 参数 | 维度 | 数据类型 | 格式 | 描述 |
| --- | --- | --- | --- | --- |
| output | [m, n] | float16 | ND | 输出tensor，维度数与x一致。 |


#### 约束说明

- 输入x / weight原维度，通过transposeA / transposeB配置要满足矩阵乘的维度关系。
- 输入weight的维度c由压缩工具（如ModelSlim）计算而来，满足c大于0且小于k * n。
- 参数tilingK和tilingN由压缩算法决定，目前均只支持取值为8。
