QuantGroupedMatmulInplaceAdd
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT AI处理器 | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | × |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | × |
参数说明
TODO
功能说明
-
算子功能:在micro-batch训练场景,需要做micro-batch的梯度累计,会存在大量GroupedMatMul后接InplaceAdd的融合场景。QuantGroupedMatmulInplaceAdd算子将上述算子融合起来,提高网络性能。实现分组矩阵乘计算和加法计算,基本功能为矩阵乘和加法的组合,如T-C量化场景下yi[m,n]=(x1i[m,ki]×x2i[ki,n])∗scale2i[n]∗scale1i+yi[m,n],i=1...gy_i[m,n]=(x1_i[m,k_i] \times x2_i[k_i,n]) * scale2_i[n] * scale1_i + y_i[m,n], i=1...g,其中g为分组个数,m/ki/nm/k_i/n为对应的维度。
相较于GroupedMatmulV4接口,此接口变化:
- 输入输出参数类型均为aclTensor。
- 在GroupedMatMul计算结束后增加了InplaceAdd计算。
- 仅支持量化场景(1.mx量化;2.T-C量化;3.T-T量化)。量化方式请参见量化介绍。
- 仅支持x1、x2是FLOAT8_E5M2、FLOAT8_E4M3FN、HIFLOAT8的输入。
-
计算公式:
- mx量化:
yi[m,n]=∑j=0kLoops−1((∑k=0gsK−1(x1Slicei∗x2Slicei))∗(scale1i[m,j]∗scale2i[j,n]))+yi[m,n] y_i[m,n] = \sum_{j=0}^{kLoops-1} ((\sum_{k=0}^{gsK-1} (x1Slice_i * x2Slice_i)) * (scale1_i[m, j] * scale2_i[j, n])) + y_i[m,n]
其中,gsK代表K轴的量化的block size即32,x1Sliceix1Slice_i代表x1ix1_i第m行长度为gsK的向量,x2Sliceix2Slice_i代表x2ix2_i第n列长度为gsK的向量,K轴均从j∗gsKj*gsK起始切片,j的取值范围[0, kLoops), kLoops=ceil(KiK_i / gsK),支持最后的切片长度不足gsK。
- T-T/T-C量化:
yi=(x1i×x2i)∗scale2i∗scale1i+yi y_i=(x1_i\times x2_i) * scale2_i * scale1_i + y_i
约束说明
- x1和x2的每一维大小在32字节对齐后都应小于int32的最大值2147483647,且内轴大小需小于2097152。
-
动态量化(T-T/T-C量化)场景支持的输入类型为:
-
不为空的参数支持的数据类型组合要满足下表:
x1 x2 scale2 scale1Optional yRef HIFLOAT8 HIFLOAT8 FLOAT32 FLOAT32 FLOAT32 -
scale1Optional/scale2要满足以下约束(其中g为matmul组数即分组数):
参数 shape限制 scale1Optional 2维tensor或1维tensor,shape为(g, 1)或(g,) scale2 pertensor场景:2维tensor或1维tensor,shape为(g, 1)或(g,);perchannel场景:2维tensor,shape为(g, N)
-
-
动态量化(mx量化)场景支持的数据类型为:
-
数据类型组合要满足下表:
x1 x2 scale2 scale1Optional yRef FLOAT8_E5M2/FLOAT8_E4M3FN FLOAT8_E5M2/FLOAT8_E4M3FN FLOAT8_E8M0 FLOAT8_E8M0 FLOAT32 -
scale1Optional/scale2要满足以下约束(其中g为matmul组数即分组数,g_i为第i个分组(下标从0开始)):
参数 shape限制 scale1Optional 3维tensor,shape为((K / 64) + g, M, 2),scale_i起始地址偏移为((K_0 + K_1 + ...+ K_{i-1})/ 64 + g_i) * M * 2,即scale_0的起始地址偏移为0,scale_1的起始地址偏移为(K_0 / 64 + 1) * M * 2, scale_2的起始地址偏移为((K_0 + K_1) / 64 + 2) * M * 2, 依此类推 scale2 3维tensor,shape为((K / 64) + g, N, 2), 起始地址偏移与scale1Optional同理
-
-
调用说明
| 调用方式 | 调用样例 | 说明 |
|---|---|---|
| aclnn调用 | [test_aclnn_quant_grouped_matmul_inplace_add] | 通过接口方式调用QuantGroupedMatmulInplaceAdd算子。 |
| 图模式调用 | [test_geir_quant_grouped_matmul_inplace_add] | 通过构图方式调用QuantGroupedMatmulInplaceAdd算子。 |