接口功能:完成量化的矩阵乘计算。相似接口有aclnnMm(仅支持2维Tensor作为输入的矩阵乘)和aclnnBatchMatMul(仅支持三维的矩阵乘,其中第一维是Batch维度)。支持T-C、T-T、K-C、K-T、mx。
计算公式:
[object Object]- 无x1Scale无bias:
- bias INT32:
- bias BFLOAT16/FLOAT32(此场景无x2Offset):
- x1Scale无bias:
- x1Scale, bias INT32(此场景无x2Offset):
- x1Scale, bias BFLOAT16/FLOAT16/FLOAT32(此场景无x2Offset):
- x1为INT8,x2为INT32,x1Scale为FLOAT32,x2Scale为UINT64,yOffset为FLOAT32:
- mx量化模式: 其中,gsM,gsN和gsK分别代表groupSizeM,groupSizeN和groupSizeK;x1Slice代表x1第m行长度为groupSizeK的向量,x2Slice代表x2第n列长度为groupSizeK的向量;K轴均从j*groupSizeK起始切片,j的取值范围[0, kLoops], kLoops = ceil(K / groupSizeK),K为K轴长度,支持最后的切片长度不足groupSizeK。
每个算子分为,必须先调用“aclnnQuantMatmulWeightNzGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnQuantMatmulWeightNz”接口执行计算。
参数说明:
[object Object]公式一:
[object Object][object Object] [object Object][object Object] [object Object][object Object]
返回值:
第一段接口完成入参校验,出现以下场景时报错:
[object Object]
- 确定性说明:
- aclnnQuantMatmulWeightNz默认确定性实现。
输入和输出支持以下数据类型组合:
[object Object]undefined
x1的约束:当数据类型为INT8时,且x2的数据类型为INT32时,transposeX1为false。维度为:(m,k),要求k为偶数。
yOffset的约束:shape支持1维(n)。为计算过程中离线计算的辅助结果,值要求为8 * x2 * x2Scale,并在第1维累加。
当原始ND的后两维中存在某一维度为1时,无法使用weightNz特性,本接口不支持此种场景。
T-C量化 && T-T量化场景约束:
[object Object][object Object] - 输入和输出支持以下数据类型组合: [object Object][object Object] | x1 | x2 | x1Scale | x2Scale | x2Offset | yScale | bias | out | | --------------- | ----------- | ----------- | --------------- | ------------ | -------| -------------------------- | ----------------------| | INT8 | INT8 | null | UINT64/ INT64 | null | null | null/INT32 | FLOAT16/ BFLOAT16 | | INT8 | INT8 | null | UINT64/ INT64 | null/FLOAT32 | null | null/INT32 | INT8 | | INT8 | INT8 | null | FLOAT32/BFLOAT16 | null | null | null/INT32/FLOAT32/BFLOAT16| BFLOAT16 | | INT8 | INT8 | null | FLOAT32/BFLOAT16 | null | null | null/INT32 | INT32 |
- K-C量化 && K-T量化场景约束:
[object Object][object Object] - 输入和输出支持以下数据类型组合: [object Object][object Object] | x1 | x2 | x1Scale | x2Scale | x2Offset | yScale | bias | out | | -------------------- | -------------------- | ------- | --------------- | -------- | -------| ------------------------- | --------------- | | INT8 | INT8 | FLOAT32 | FLOAT32/BFLOAT16| null | null | null/INT32/FLOAT32/BFLOAT16 | BFLOAT16 | | INT8 | INT8 | FLOAT32 | FLOAT32 | null | null | null/INT32/FLOAT32/FLOAT16 | FLOAT16 |
- mx量化场景约束:
[object Object][object Object] - 输入和输出支持以下数据类型组合: [object Object][object Object] | x1 | x2 | x1Scale | x2Scale | x2Offset | yScale | bias | out | |---------------| ------------- | ----------- | ----------- | -------- | ------ | -------------| --------------------------- | | FLOAT8_E4M3FN | FLOAT8_E4M3FN | FLOAT8_E8M0 | FLOAT8_E8M0 | null | null | null/FLOAT32 | FLOAT16/BFLOAT16/FLOAT32 |
伪量化场景下dtype和shape要求如下:
[object Object]undefined
- 约束说明:
- k, n大小要求64对齐。
- x1是FLOAT8_E4M3FN,x2是FLOAT32时, x2表示一个FLOAT32存储8个FLOAT4_E2M1的紧密排布的数据格式。
- 约束说明:
[object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:
x2为NZ格式场景下的示例代码如下(transposeX2=false)。
[object Object][object Object]Atlas 推理系列产品[object Object]: x2为NZ格式场景下的示例代码如下(transposeX2=true)。
[object Object]Atlas 350 加速卡: x2为NZ格式场景下的示例代码如下(transposeX2=true)。
[object Object]