LinearSparseOperation
功能
稀疏量化Linear。
该算子实现功能与量化linear类似。不同点在于稀疏量化算子会使用压缩工具提前对weight输入进行压缩,以此提升算子性能。
定义
struct LinearSparseParam{
bool transposeA = false;
bool transposeB = true;
uint32_t tilingK = 1;
uint32_t tilingN = 1;
};
参数列表
成员名称 |
类型 |
默认值 |
描述 |
---|---|---|---|
transposeA |
bool |
false |
是否转置A矩阵,默认不转置。当前仅支持transposeA = true。 |
transposeB |
bool |
true |
是否转置B矩阵,默认转置。当前仅支持transposeB = true。 |
tilingK |
uint32_t |
1 |
压缩参数,由外部压缩算法决定,目前仅支持取值为8。 |
tilingN |
uint32_t |
1 |
压缩参数,由外部压缩算法决定,目前仅支持取值为8。 |
输入
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
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。
- 该算子仅支持在
Atlas 推理系列产品 中进行运算。 - 参数tilingK和tilingN由压缩算法决定,目前均只支持取值为8。