aclnnQuantMatmulV5
产品支持情况
功能说明
- 接口功能:完成量化的矩阵乘计算。
- [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:兼容aclnnQuantMatmulV3、aclnnQuantMatmulV4接口功能。完成量化的矩阵乘计算,最小支持输入维度为1维,最大支持输入维度为2维。相似接口有aclnnMm(仅支持2维Tensor作为输入的矩阵乘)。
- 计算公式:
[object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]: 支持K-C && K-T、T-C && T-T、G-B、K-CG,不同量化模式对应的输入输出数据类型组合参见。
[object Object][object Object]x1为INT8,x2为INT32,x1Scale为FLOAT32,x2Scale为UINT64,yOffset为FLOAT32:
x1,x2为INT4,x1Scale,x2Scale为FLOAT32,x2Offset为FLOAT16,out为FLOAT16/BFLOAT16 (pertoken-pergroup非对称量化):
x1Scale无bias:
x1Scale,bias INT32(此场景无offset):
x1Scale,bias BFLOAT16/FLOAT16/FLOAT32(此场景无offset):
无x1Scale无bias:
bias INT32:
bias BFLOAT16/FLOAT32(此场景无offset):
- x1,x2为INT8,x1Scale,x2Scale为FLOAT32,bias为FLOAT32,out为FLOAT16/BFLOAT16 (pergroup-perblock量化):
函数原型
每个算子分为,必须先调用“aclnnQuantMatmulV5GetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnQuantMatmulV5”接口执行计算。
aclnnQuantMatmulV5GetWorkspaceSize
参数说明
[object Object]注:可选输入是指可选的量化参数,支持传入nullptr。
[object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:
- 上表数据类型列中的角标“2”代表该系列不支持的数据类型。
计算公式:[object Object][object Object]
返回值
第一段接口完成入参校验,出现以下场景时报错:
[object Object]
aclnnQuantMatmulV5
约束说明
- 确定性计算:
- aclnnGroupedMatmulV5默认确定性实现。
公共约束: [object Object][object Object]
- x1的约束如下:
- 在transposeX1为false情况下,形状为(batch, m, k)。
- 在transposeX1为true情况下,形状为(batch, k, m),其中batch代表前0~4维,0维表示batch不存在。
- x2的约束如下:
- ND格式下,shape支持2~6维,
- transposeX2为false情况下各个维度表示:(batch,k,n)。
- transposeX2为true情况下各个维度表示:(batch,n,k)。
- batch可不存在,其中k与x1的shape中的k一致。
- 可使用aclnnConvertWeightToINT4Pack接口完成x2从INT32(1个int32在0~3bit位存储1个int4)到INT32(1个int32存储8个int4)或INT4(1个int4表示1个int4)的数据格式转换,具体参见。
- AI处理器亲和数据排布格式下,shape支持4~8维。
- transposeX2为true时维度为:(batch,k1,n1,n0,k0),batch可不存在,其中k0 = 32,n0 = 16,x1 shape中的k和x2 shape中的k1需要满足以下关系:ceil(k / 32) = k1。
- transposeX2为false时维度为:(batch,n1,k1,k0,n0),batch可不存在,其中k0 = 16,n0 = 32,x1 shape中的k和x2 shape中的k1需要满足以下关系:ceil(k / 16) = k1。
- 可使用aclnnCalculateMatmulWeightSizeV2接口以及aclnnTransMatmulWeight接口完成输入Format从ND到AI处理器亲和数据排布格式的转换。
- ND格式下,shape支持2~6维,
- x1Scale约束如下:
- shape支持2维,形状为(m,1)。数据类型支持FLOAT32。
- x2Scale的约束如下:
- 当前版本不支持yScale,需要传入nullptr。
- x2Offset的约束如下:
- 可选量化参数,数据类型支持FLOAT32。
- 当out数据类型为INT8时,offset可以存在,其他输入类型需要传入nullptr。
- transposeX1:x1和x2为INT32、INT4时,transposeX1仅支持false,各个维度表示:(m, k)。
- transposeX2的约束如下:
- ND格式下,为false时维度为:(batch,k,n),为true时维度为:(batch,n,k),batch可不存在,其中k与x1的shape中的k一致。
- AI处理器亲和数据排布格式下:
- 为true时维度为:(batch,k1,n1,n0,k0),batch可不存在,其中k0 = 32,n0 = 16,x1 shape中的k和x2 shape中的k1需要满足以下关系:ceil(k / 32) = k1。
- 为false时维度为:(batch,n1,k1,k0,n0),batch可不存在,其中k0 = 16,n0 = 32,x1 shape中的k和x2 shape中的k1需要满足以下关系:ceil(k / 16) = k1。
- out的约束如下:
- shape支持2维,(m,n)。数据类型支持FLOAT16、INT8、BFLOAT16、INT32。
- 输入和输出支持以下数据类型组合:
[object Object][object Object]
[object Object]undefined
x1、x2、x1Scale、x2Scale、yOffset和groupSize的取值关系:
[object Object]undefined
注:上表中gsM、gsK和gsN分别表示groupSizeM、groupSizeK和groupSizeN。
x1的约束:目前n需与256对齐, k与128对齐且为4 * 128的倍数,transposeX1为false,形状为(m, k)。
x2的约束:transposeX2为true,形状为(n, k),目前n需与256对齐,k与128对齐且为4 * 128的倍数。
x1Scale的约束:形状为(m, ceil(k / 128))。
x2Scale的约束:当x2的transpose为true时,形状为(ceil(n / 128), ceil(k / 128)),当x2的transpose为false时,形状为(ceil(k / 128), ceil(n / 128))。
bias的约束:shape支持一维(n, )。
groupSize的约束:[groupSizeM,groupSizeN,groupSizeK]取值组合仅支持[1, 128, 128]。
- 输入和输出支持以下数据类型组合:
[object Object][object Object]
[object Object]undefined
- x1的约束:
- 当数据类型为INT4时,transposeX1为false。维度为:(batch,m,k),要求k为偶数。
- 当数据类型为INT32时,transposeX1为false。每个INT32数据存放8个INT4数据,对应维度表示:(batch,m,k // 8),要求k为8的倍数。
- x2的约束:
- 数据类型为INT4时:
- 当前仅支持2维ND格式。
- transposeX2为true时维度为:(n,k),要求k为偶数。
- transposeX2为false时维度为:(k,n),要求n为偶数。
- 数据类型为INT32时,每个INT32数据存放8个INT4数据,
- 当前仅支持2维ND格式。
- transposeX2为true时维度为:(n,k // 8),要求k为8的倍数。
- transposeX2为false时维度为:(k,n // 8),要求n为8的倍数。
- 数据类型为INT4时:
- yOffset的约束:
- shape支持1维(n)。为计算过程中离线计算的辅助结果,值要求为8x2x2Scale,并在第1维累加。
- 输入和输出支持以下数据类型组合:
[object Object][object Object] | x1 | x2 | x1Scale | x2Scale | x2Offset | yScale | bias | yOffset | out | | ------------------------- | ------------------------- | ----------- | ----------- | ----------- | ------- | ------------ | -----------| -------------------------------------- | | INT8 | INT32 | FLOAT32 | UINT64 | null | null | null | FLOAT32 | FLOAT16/BFLOAT16 | | INT4 | INT4 | FLOAT32 | FLOAT32 | FLOAT16 | null | null | null | BFLOAT16 |
- x1、x2、x1Scale、x2Scale和groupSize的取值关系:
[object Object]undefined
- x1的约束:当数据类型为INT8时,k需与256对齐,并小于18432。当数据类型为INT4时,k需与1024对齐,transposeX1为false,形状为(m, k)。
- x2的约束:当数据类型为INT8时,k需与256对齐。当数据类型为INT4时,transposeX2为true,形状为(n, k),k需与1024对称,n需与256对齐。
- x1Scale的约束:形状为(m, 1)。
- x2Scale的约束:当x2的transpose为false时,形状为(ceil(k / 256), n)。
- x2Offset的约束:当数据类型为INT4时,形状为(ceil(k, 256),n)。
- groupSize的约束:[groupSizeM,groupSizeN,groupSizeK]取值组合仅支持仅支持[0, 0, 256]。
- x1的约束如下:
调用示例
x1为FLOAT8_E4M3FN,x2为FLOAT4_E2M1,x2Scale为BFLOAT16,yScale为UINT64。
x1为INT8,x2为INT8,x1Scale为FLOAT32,x2Scale为FLOAT32,bias为INT32。
x1,x2为FLOAT8_E4M3FN,x1Scale为FLOAT32,x2Scale为FLOAT32,无x2Offset,bias为FLOAT32。
[object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]: x1为INT8,x2为INT32,x1Scale为FLOAT32,x2Scale为UINT64。
[object Object]